CentOS 7 で自宅サーバーを別PCのUSB外付ハードディスクに毎晩自動バックアップ(rsync+ssh)

1 views

実現させる機能

Ubuntu14.04搭載PCのUSB外付ハードディスク(4TB)にCentOS7搭載PCサーバーのバックアップを毎晩自動で取っています。バックアップ先(Ubuntu144.04搭載PC、topi.0t0.jp 192.168.24.240)は、バックアップ元(CentOS7搭載PC、ufuso.dip.jp 192.168.24.241)の諸設定をssh接続で行うクライアントPCでもあるため、topi → ufuso 間をssh接続しながら、同時にtopi ← ufuso間をノンパスワード(鍵方式)でssh接続する設定をしたので混乱。topi.0t0.jpもufuso.dip.jpもユーザー名がtuなので注意
以下はその手順の備忘録です。

事前準備

※保存先のUbuntu14.04のUSB外付けHardDiskのマウントが済んでいること

バックアップ元からバックアップ先にパスワード省略でssh接続する手順

(0)バックアップ元(CentOS7搭載PC)にsshでログイン(サーバーのキーボードから直接入力作業をする場合には不要)

tu@topi:~$ ssh root@ufuso.dip.jp ← バックアップ先(Ubuntu144.04搭載PC)は、バッ
クアップ元(CentOS7搭載PC)の諸設定をssh接続で行うクライアントPCでもあるため、
topi → ufuso 間をssh接続
root@ufuso.dip.jp's password:  ← ufuso.dip.jpのrootパスワード入力
Last login: Wed Feb 11 13:44:04 2015 from topi.0t0.jp

[root@ufuso ~]# ← 接続に成功するとの$左側部分が変わる。例示の場合はtopiからufuso

(1)バックアップ元(CentOS7搭載PC)で秘密鍵と公開鍵を作成し、公開鍵を送付

[root@ufuso ~]# ssh-keygen -t dsa ← 認証用の鍵の作成
Generating public/private dsa key pair. ← 公開鍵と秘密鍵の作成
Enter file in which to save the key (/root/.ssh/id_dsa):  ← 鍵の保存先フォ
ルダ
Enter passphrase (empty for no passphrase):  ← エンターキー押下
Enter same passphrase again:  ← エンターキー押下
Your identification has been saved in /root/.ssh/id_dsa. ← 秘密鍵の保存先
Your public key has been saved in /root/.ssh/id_dsa.pub. ← 公開鍵の保存先
The key fingerprint is:
f6:e6:c0:1e:3c:fe:ab:2d:e2:4f:82:30:db:d0:dd:81 root@ufuso.dip.jp
The key's randomart image is:
+--[ DSA 1024]----+
|                 |
|       .         |
|      E .        |
|   . . . .       |
|  + . . S        |
|   * . + .       |
|  . o . B o      |
|      .=.B       |
|     ..o=+=.     |
+-----------------+


[root@ufuso ~]# pwd ← 現在のディレクトリの場所を確認
/root ← rootのフォルダであることを確認

[root@ufuso ~]# cd .ssh ← .sshフォルダに移動

[root@ufuso .ssh]# ls ← フォルダ内を参照
id_dsa  id_dsa.pub  known_hosts

[root@ufuso .ssh]# scp id_dsa.pub tu@topi.0t0.jp: ← sshを使ってid_dsa.pubファイ
ルをtopi.0t0.jp側(バックアップ先)のtuフォルダにコピー(scp)
tu@topi.0t0.jp's password:  ← tuのパスワード入力
id_dsa.pub                                    100%  605     0.6KB/s   00:00  ←
 コピー完了   
[root@ufuso .ssh]# exit ← ssh接続の解除
ログアウト
Connection to ufuso.dip.jp closed.

tu@topi:~$ ← ssh接続の解除で接続元のtopi.0t0.jpのPCに戻る

(2)バックアップ先(Ubuntu144.04搭載PC)の作業手順

tu@topi:~$ pwd ← 現在のディレクトリの場所を確認
/home/tu ← tuのフォルダであることを確認

tu@topi:~$ mkdir .ssh ← tuフォルダ内に.sshフォルダを作成

tu@topi:~$ cd .ssh ← .sshフォルダに移動

tu@topi:~/.ssh$ cat ~/id_dsa.pub >> authorized_keys ← id_dsa.pubを
authorized_keysに名称変更して、.sshフォルダ内に保存

tu@topi:~/.ssh$ chmod 600 authorized_keys ← authorized_keysの読み書きを所有者
に限定6は所有者、0はグループ、0はその他の権限。6は読み書き可、4は読みのみ、0は読
み書き不可

tu@topi:~/.ssh$ sudo apt-get -y install openssh-server ← openssh-serverのイン
ストール
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
openssh-server は既に最新バージョンです。

root@topi:~# vi /etc/ssh/sshd_config ← openssh-serverの編集 
...
# Authentication:
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys ← 行頭の#を削除 
...

root@topi:~# /etc/init.d/ssh restart ← 再起動

(3)バックアップ先(Ubuntu144.04搭載PC)からsshでログイン(サーバーのキーボードから直接入力作業をする場合には不要)

tu@topi:~/.ssh$ ssh root@ufuso.dip.jp ← root@ufuso.dip.jpにtuでssh接続
root@ufuso.dip.jp's password:  ← ufuso.dip.jpのrootパスワードを入力
Last login: Wed Feb 11 14:27:04 2015 from topi.0t0.jp

(4)バックアップ元(CentOS7搭載PC)からsshでノンパスワードででログイン

[root@ufuso ~]# ssh tu@topi.0t0.jp ← topi.0t0.jpにtuでssh接続
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-45-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

Last login: Wed Feb 11 15:06:25 2015 from ufuso.dip.jp
tu@topi:~$ exit ← topi.0t0.jpへの接続解除
ログアウト
Connection to topi.0t0.jp closed.
※ノンパスでログインできなかった場合は再度sshでログイン。その際パスワードを
求められなければOK。

バックアップ機能の導入手順

(1)バックアップ先(Ubuntu144.04搭載PC)の作業手順

root@topi:~# mkdir /mnt/2EF8DE49F8DE0F49/backup/CentOS7
   ← サーバーのバックアップ先を作成します。「/mnt/2EF8DE49F8DE0F49/backup/Cent
OS7」は例示。2EF8DE49F8DE0F49はUSB外付けハードディスクのUIDをフォルダ名にしたもの

root@topi:~# chmod 777 /mnt/2EF8DE49F8DE0F49/backup/CentOS7 ← CentOS7フォ
ルダに書き込み権限を付与

(2)バックアップ元(CentOS7搭載PC)の作業手順

[root@ufuso ~]# yum -y install rsync ← バックアップに必要なrsyncのインストール
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
パッケージ rsync-3.0.9-15.el7.x86_64 はインストール済みか最新バージョンです
何もしません ← すでにインストール済み。

[root@ufuso ~]# vi /etc/rsync_exclude.lst ← バックアップから除外するフォルダやファイ
ルの一覧リストを、「rsync_exclude.lst」という名称で作成する。

- /var/tmp/* ← 「/var/tmp/」のフォルダの中身をすべて(*)バックアップから除外
(-)する。
- /dev/*
- /media/*
- /mnt/*
- /proc/*
- /sys/*
- /tmp/*

[root@ufuso ~]# rsync -avn --exclude-from=/etc/rsync_exclude.lst / ssh tu@topi.0t0.jp:/mnt/2EF8DE49F8DE0F49/backup/CentOS7/
  ← サーバー全体(/)をCentOS7フォルダにバックアップできるかテストする。
sending incremental file list
rsync: link_stat "/home/tu/ssh" failed: No such file or directory (2)
./
boot/
...
...
...
var/www/html/rain/rainloop/v/1.7.2.229/themes/Xv/
var/www/html/rain/rainloop/v/1.7.2.229/themes/Xv/images/
var/yp/

sent 79574689 bytes  received 934844 bytes  2927619.38 bytes/sec
total size is 140740566021056  speedup is 822.36 (DRY RUN)← 「(DRY RUN)」は、上
記 -avnのオプションにn(テストラン)があるので、同期を行わず対象フォルダやファイル
を一覧表示しただけ、という意味。

[root@ufuso ~]# rsync -av --exclude-from=/etc/rsync_exclude.lst / ssh tu@topi.0t0.jp:/mnt/2EF8DE49F8DE0F49/backup/CentOS7/
  ← ファイルのバックアップを実施
sending incremental file list
rsync: link_stat "/home/tu/ssh" failed: No such file or directory (2)
./
boot/
...
...
...
var/www/html/rain/rainloop/v/1.7.2.229/themes/Xv/
var/www/html/rain/rainloop/v/1.7.2.229/themes/Xv/images/
var/yp/

sent 79574689 bytes  received 934844 bytes  2927619.38 bytes/sec
total size is 140740566021056  speedup is 1748123.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9])

[root@ufuso ~]# yum -y install cronie-noanacron  ← crontabをインストール
インストール:
  cronie-noanacron.x86_64 0:1.4.11-11.el7                                       

完了しました!

[root@ufuso~]# vi /etc/crontab  ← crontabに設定を追加する。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  *  command to be executed
# DDNS Dynamic DO!.jp Update
  0  8  2  *  * root wget -q -O - 'http://free.ddo.jp/dnsupdate.php?dn=your.ddo.jp domain&pw=your-password

  0  4  *  *  * root rsync -av  --exclude-from=/etc/rsync_exclude.lst / ssh tu@topi.0t0.jp:/mnt/2EF8DE49F8DE0F49/backup/CentOS7/
  ← 毎日午前4時に同期(差分コピー)を取るように設定を追加。

同期が終わるとメールが飛んでくる

完了結果メールが来るのを確認できればOK
mail01

USBハードディスクの最新情報(パソコン&テレビ両用が主流)

[csshop service=”amazon” keyword=”USB外付けハードディスク TB” category=”” sort=”+price” mode=””]