Backup of UNIX/コマンド/クライアント/rsync(No. 5)



rsync コマンドはファイルのバックアップを取るのに利用します。 r が冠するように rlogin や rcp などの r* 系コマンドの1つで、リモートサーバとの間でバックアップを取ることができます。ローカルでのバックアップコマンドとしても利用できます。

rsyncはデフォルトでは、サイズまたは変更日時が変わったファイルをバックアップが必要なファイルとして探知します。より厳密に比較したい場合は、それらを無効化し md5 ハッシュ値を比較に使用することもできます(-c)。

Table of Contents

ローカルで使用する Edit

rsync -auv --delete --exclude ".svn" [src_dir] [dest_dir]

のように使用します。

ファイルの属性を保存し(-a)、目的地側に新しいファイルがある場合は上書きしない(-u)ようにし、進歩状況の表示(-v)をし、 バックアップ元にないファイルはバックアップ先から削除します(--delete)し、--exclude で指定した文字列にマッチするファイル、ディレクトリを除いて、バックアップを取ります。

注意が必要なのが

[src_dir]/
[src_dir]/file1
[src_dir]/file2

とファイルがある場合

rsync -auv --delete --exclude ".svn" [src_dir]/ [dest_dir]

では

[dest_dir]/
[dest_dir]/file1
[dest_dir]/file2

のようにバックアップを取るのに対し、

rsync -auv --delete --exclude ".svn" [src_dir] [dest_dir]

では

[dest_dir]/
[dest_dir]/[src_dir]
[dest_dir]/[src_dir]/file1
[dest_dir]/[src_dir]/file2

のようにバックアップをとる([src_dir] が中に入る)点です。 オプション --delete をつけていると、この少しの違いが大きな違いになってしまうことがあります。

/ を付けると [src_dir]/* のような意味になると思っておけば良さそうです。 [dest_dir] には / があろうがなかろうが動作は変わりません。

delete オプションで失敗するのが怖い場合は --backup オプションを使用します。ファイルを直接削除せずに --backup-dir=<ディレクトリ名> で指定したディレクトリに移動してくれます。

リモートで使用する Edit

リモート先に rsyncd サーバを建てることで差分バックアップ機能を使えます。 最近では他にも ssh との連携もサポートしており、

  1. ローカルで起動された rsync
  2. ssh でリモートへ login し
  3. リモート側でも rsync を起動する。
  4. その後、ローカルの rsync とリモートの rsync とで通信を行い、バックアップを行う。

という仕組みで差分バックアップを行えるようになっています。

(予定地)


xrea