*バックアップのお作法(rsync)

rsyncコマンド

$rsync -rlvpt --delete /misc/copyoriginaldirectory /home/copydestinationdirectory

形式:rsync (オプション) (コピー元) (コピー先)

/etc/crontabの追加

00 2 * * * ユーザーID(neuroとか) /usr/bin/rsync -rlvpt --delete /misc/copyoriginaldirectory /home/copydestinationdirectory

毎日午前2時にrsyncでバックアップ

引用元

http://oku.edu.mie-u.ac.jp/~okumura/networking/rsync.html

rsync が一般ユーザで -a オプションを付けたとき次のようなメッセージを出すことがあります:

rsync error: partial transfer (code 23) at main.c(925)

これはファイルの owner が違っていて変更できなかったといったことのようです。

-a は -rlptgoD と等価ですが一般ユーザでは goD オプションは一般に使えないので,-a ではなく -rlpt を指定すればいいのだろうと思います。

rsyncで自動バックアップ

サーバーを運営していく上で重要なのがバックアップだ。パソコンの部品の中でもHDDはもっとも壊れやすく、サーバーの重要なデータが失われてし まうことがある。実際に自分もHDDのクラッシュを経験した。何か調子が悪いなと思いつつ動かし続けていたサーバーを、ある日再起動してみると途中でス トップしてしまう。シングルユーザーモードで起動しても、fsckが動いてくれない。仕方なく新しいHDDに交換したが、別のパソコンにデータをバック アップしていたので被害を受けずにすんだ。

また、あやまってデータを消してしまうこともある。これも体験談だが、WindowsのSSHクライアントからサーバーに接続して作業していたときのこ と。電話が入ってきて別の仕事に注意がいったとき、まちがえてクリップボードの中身をSSHクライアントにペーストしてしまったようなのだ。クリップボー ドの中身がコマンドとしてLinuxで実行されていく。まあ大部分は「command not found」となるけれど、何がどうなったのかホームディ レクトリの中のファイルがごっそりと消えていた。rmとかそういう文字列があったのかもしれない。これもバックアップのおかげですぐに復旧できた。

最初のうちはftpでパソコンの側にバックアップをとっていたのだが、これでは面倒でついついバックアップがおろそかになる。そこでバックアップを自動的に行うことを考えた。使うコマンドは「rsync」である。

rsyncの使い方

rsyncはWindowsのxcopyコマンドに似ていて、ディレクトリの構造をたもったままコピーができる。たとえば、/homeディレクト リ以下をまとめてコピーするなんてことが簡単にできるわけだ。2回目以降のコピーでは更新や追加されたファイルだけがコピーされるので、バックアップが短 時間で終わる。さらに削除したファイルはバックアップ先でも削除されるため、バックアップ元とバックアップ先の内容をまったく同じに保つことも可能だ。

本当は別のHDDやマシンにバックアップをとるべきだが、まずは同一HDDの別のディレクトリにバックアップをとってみよう。HDDの故障には対 処できなくても、誤ってファイルを削除したときなどは役に立つ。ここでは/var/backupディレクトリを作成し、その中に/homeディレクトリ以 下の内容をまるごとコピーしてみる。打ち込むコマンドは次の2行だ。

# mkdir /var/backup

# rsync -a --delete /home /var/backup

rsyncの書式は「rsync (オプション) (コピー元) (コピー先)」となっている。指定できるオプションは次の表のようになっている。「-a --delete」はコピー元とコピー先を同期させたいときに使うオプションだ。

rsyncを自動実行

うまくバックアップができることを確認したら、cronで自動実行させるように設定しよう。/etc/crontabにコマンドを追加する。次の例は毎日午前3時10分にバックアップを自動実行させるときの設定だ。

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

10 3 * * * root /usr/bin/rsync -a --delete /home/ /var/backup

[source] で指定するディレクトリ名の最後にスラッシュを付けるか付けないかhttp://www.maruko2.com/mw/rsync_%E3%81%A7%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E5%90%8C%E6%9C%9F%EF%BC%88%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%EF%BC%89

[source] で指定するディレクトリ名の最後にスラッシュを付けた場合、ディレクトリ内のファイルをコピーするが、 スラッシュを付けない場合は、ディレクトリをコピーする動作になる。

[dest] では、指定するディレクトリ名の最後にスラッシュを付けても付けなくても同じ。