2011-07-19
_ VPS 上の日記データを QNAP へ rsync+ssh で定期的にバックアップする
いつ何時,何が起こるかはわからないので,バックアップって大事ですね.ここのところは歯抜けが多いものの,なんだかんだで 8 年以上もここで Web 日記を書いてきているものなので,このデータが失われるとやっぱりショックは大きいだろうし.これまでは手元にマシンがあって,ふと思い立ったときに外付けHDDにバックアップをとるとか気まぐれでやってたけど,VPSに移行したので定期的に手元にバックアップデータをとるようにした.
ということで,我が家のデータのバックアップはすべて QNAP に集めているので,VPS 上のデータもこちらにバックアップするようにした.最初は,VPS 側は lsyncd を導入して,日記のデータを更新したらすぐにバックアップをとるようにしようかとも考えたけれども,まずは無難に QNAP 側から定期的に VPS に対して rsync + ssh で同期することにした.
rsync用の鍵ファイルを準備する
QNAP から VPS のデータを取得する処理は定期的に自動で実行されるので passphrase なしの秘密鍵を作成する.
# ssh-keygen
鍵ファイルは例えば rsync_id_rsa とか.QNAP上で作成する場合,ファームウェアのバージョンによっては,鍵ファイルの作成がデフォルトでは /share/homes/admin/.ssh 以下となっているけどディレクトリが存在しない場合もあるので,その場合は鍵を作成するときのパスは /root/.ssh/rsync_id_rsa などにしておくといい.後ほど出てくるけど,最終的には /root のシンボリックリンクを /share/homes/admin にはることで対応している.
VPSにログインできるようにする
VPS側はすでに SSH でのアクセスができることを前提として,先ほど作成した鍵ファイルでアクセスできるように設定する.今回は日記データは www-data ユーザーとしてログインしてデータを取得することにしてみた.Ubuntu の場合,/var/www 以下に .ssh ディレクトリを作成して,authorized_keys に公開鍵を追記しておく.
また,authorized_keysにcommandオプションを追加することで,接続時に指定したコマンドを実行することができるので,ここでは試しに ls コマンドを指定しておく.
command="/bin/ls" ssh-rsa AAA...
QNAPから VPS にアクセスしてみる
QNAP から VPS に接続してみる.
# ssh -i /root/.ssh/rsync_id_rsa www-data@sakura dir1 dir2 file1 Connection to sakura
command で指定した処理が実行され接続が切断されれば問題なし.また,known_hosts ファイルのパスが /share/homes/admin となっている場合で,実際にディレクトリが存在しない場合は,シンボリックリンクを作成しておく.
# mkdir /share/homes # ln -s /root /share/homes/admin
再起動するとこれは消えてしまうので,autorun.sh に記述しておく.
rsyncでデータをとってくる
QNAP で以下の rsync コマンドを実行すると以下のような表示がされます.これは必ずエラーになる.保存先のディレクトリはここでは例として /share/sakura/www とする.
# rsync -avvz -e "ssh -2 -i /root/.ssh/rsync_id_rsa" --exclude "/www/data/cache/" www-data@sakura:/var/www/www /share/sakura/www opening connection using: ssh -2 -i /root/.ssh/rsync_id_rsa -l www-data sakura rsync --server --sender -vvlogDtprze.is . /var/www/www protocol version mismatch -- is your shell clean? (see the rsync man page for an explanation) rsync error: protocol incompatibility (code 2) at compat.c(171) [receiver=3.0.6]
ここで opening connection から始まる行に記載されている以下のコマンドを VPS の authorized_keys の command オプションに記述します.
rsync --server --sender -vvlogDtprze.is . /var/www/www
再度,QNAPから rsync コマンドを実行すると問題なければ同期がはじまります.8 年分の日記データは画像も含めると約 100 Mほど.思ったよりも多くてちょっとびっくり.初回はデータ量によっては時間がかかりますが,2回目以降は差分のみとなるため短時間ですむと思います.
cronに設定する
/etc/config/crontab に追加して,/tmp/cron/crontab/admin にも記入.あとは /etc/init.d/crontab.sh restart すれば定期的にバックアップできる.ログに出力するなりしてうまく動いているかは確認しておく.