|
rdiff-backup は、ネットワーク対応のディレクトリバックアップツールです。ディレクトリの完全なコピーが保存されるとともに、特別なサブディレクトリに逆差分ファイルが保存され、過去に失われてしまったファイルを復元することが出来ます。すなわち、ミラーと差分バックアップのいいところ取りです。rdiff-backup は、サブディレクトリ、ハードリンク、デバイスファイル、パミッション、所有者のユーザー/グループID、ファイル変更時間、拡張属性、アクセスコントロールリスト、リソースフォークを保存します。さらに、rdiff-backup は rsync のように、パイプを介してネットワーク帯域を効率的に利用します。したがって、rdiff-backup と ssh を使って、ローカルのハーディスクをリモートに安全にバックアップでき、そのときにローカルとリモートの差だけがデータ転送されます。そして、rdiff-backup は使い方が簡単で、ほとんどの設定はデフォルトのままで動くように設計されています。
このページではrdiff-backupのページに書かれている情報を適宜日本語化しています。This page is a Japanese translation of some of the rdiff-backup pages.
目次 ↑
ダウンロードとインストール ↑
- ソースファイルをrdiff-backupのページからダウンロードできます。rdiff-backupはGPLです。
- 以下のシステムで、パッケージとしてインストール可能となっています。
- Linux の ディストリビューション: Fedora, Debian, Gentoo, PLD
- FreeBSD ports
- NetBSD パッケージ
- Sunfreeware
- Mac OS X: Darwinports, Fink
- Windows への対応状況についてはNative Windows Portを参考にしてください。
- インストールに必要な環境は
- POSIX OS (Linux や Mac OS X のような OS)
- Python v2.2 以降 (http://www.python.org)
- librsync v0.9.7 以降
- オプション:Python の pylibacl モジュール (アクセスコントロールリストのサポートに必要)
- オプション:Python の pyxattr モジュール (拡張属性のサポートに必要)
- インストールに際してはWikiの記述が参考になります。
特徴 ↑
Featuresより
- 簡単に使える: ほとんどの場合、ローカルのバックアップは rdiff-backup dir1 dir2 で、リモートへのバックアップは rdiff-backup dir1 user@system::/dir2 で、バックアップができる。
- ミラーができる: rdiff-backup がつくるバックアップディレクトリは、ソースディレクトリのほとんど完全なコピーとなっています。唯一の違いは、バックアップ側に作成される1つのサブディレクトリ(差分情報が格納されている)だけです。ソースディレクトリで誤ってファイルを削除してしまったら、バックアップディレクトリからコピーすれば元に戻すことが出来ます。
- 差分を保存する: 通常のミラーでは、ソースディレクトリに変更を加えるとバックアップ側にもその変更が反映され、古いファイルへの復元はできません。rdiff-backup は逆差分ファイルを保存するため、古いファイルを復元することができます。たとえば、先週文章の半分を削除してしまい、昨日、バックアップが行われたとします。そして、今日、先週削除した箇所を復元したいと思ったとします。通常のミラーであれば、バックアップ側には新しいファイルがありますから、削除する前の状態に復元することはできません。rdiff-backup の場合にも、たしかに新しいファイルが保存されていますが、さらに、特殊なディレクトリ(rdiff-backup-data/)の中に、変更を記録したファイルが存在しています。rdiff-backup のコマンドを実行することで、1週間前のバージョンに戻すことが出来ます。
- すべての情報を保存する: rdiff-backup は、バックアップされたときの状態を正確に復元します。その時点で存在しなかったファイルは復元後も存在しません。ハードリンクであったファイルは、ハードリンクとして復元されます。パミッション、所有ユーザーおよびグループ、ファイル変更時間、デバイスファイル、fifos、シンボリックリンクを保存します。
- バックアップ側に、すべての情報をそのまま保存することが不可能な場合があります。たとえば、ファイルの所有者情報にはルート権限が必要であったり、Windows ファイルシステムではファイル名の大文字小文字を区別しなかったり所有者情報そのものがなかったり、といったことがあります。rdiff-backup では、ファイルのメタデータを別ファイルに記録することで、そういった場合にもすべての情報を保存できることができます。
- ディスク容量を効率的に使う: 大きなデータベースファイルが少しずつ毎日変わるような場合に、通常の差分バックアップはこのファイルを毎回コピーするので、ディスク容量をたくさん使います。rdiff-backup は、librsync によって rsycn と同じ効率的な差分アルゴリズムを使うため、バイナリファイルでもテキストファイルと同じように差分のみバックアップします。
- 帯域を効率的に使う: rdiff-backup はlibrsync を使うため、rsync と同じように、リモートへの書き込みをするときには、差分情報のみを送信するため、たとえば ftp や scp と比べると、ネットワークの帯域を大きく節約できます。
- 特殊なデータフォーマットではない: ハードリンク構造以外は、rdiff-backup 専用の特殊なデータフォーマットがありません。将来的に rdiff-backup の使用をやめたとしても、バックアップファイルの中身を見ることができます。ミラーの中身はソースとまったく同じであり、差分情報は、以下のいずれかの方法で保存されています。1)ファイルをそのままコピーする 2)rdiffによって生成された diff ファイル 3) 1あるいは2のgzipファイル。
- ファイルシステムの自動検知: Linux, Windows, Mac といったいろいろなファイルシステムがあり、それぞれ大文字小文字を区別したりしなかったり、":"といった文字をサポートしたりしなかったり、リソースフォークや拡張属性といった情報があったりなかったりします。こういった情報をユーザーが判断して --acl, --no-ownership といったオプションをつけるのは大変です。rdiff-backup では、その必要はありません。rdiff-backup が、そういったファイルシステムの特徴を自動的にテストします。
- Mac OS X リソースフォークのサポート: Mac OS X では、rdiff-backup では、ファインダーの情報等が記録されているリソースフォークをバックアップします。ほとんどの UNIX バックアップツールでは、データフォークのみをコピーしてリソースフォークを無視しています。
- ACL と EA のサポート: rdiff-backup が pylibacl と pyxattr モジュールをみつけ、ファイルシステムがサポートしているときには、ACL (Access Control List) および EA (user-level Extended Attributes) を保存します。
- 統計情報: セッションごとに、このような統計情報をテキストファイルに保存します。
StartTime 1124018521.00 (Sun Aug 14 06:22:01 2005)
EndTime 1124019454.64 (Sun Aug 14 06:37:34 2005)
ElapsedTime 933.64 (15 minutes 33.64 seconds)
SourceFiles 975715
SourceFileSize 13078345389 (12.2 GB)
MirrorFiles 975604
MirrorFileSize 13076177922 (12.2 GB)
NewFiles 119
NewFileSize 1103075 (1.05 MB)
DeletedFiles 8
DeletedFileSize 190653 (186 KB)
ChangedFiles 2032
ChangedSourceSize 395324417 (377 MB)
ChangedMirrorSize 394069372 (376 MB)
IncrementFiles 2233
IncrementFileSize 6098156 (5.82 MB)
TotalDestinationSizeChange 8265623 (7.88 MB)
Errors 80
使い方の例 ↑
rdiff-backup examplesより
バックアップ ↑
- 簡単なケース---ローカルディレクトリ foo からローカルディレクトリ bar へコピーします。bar は foo のコピーと、差分情報が保存される foo/rdiff-backup-data というディレクトリができます。
rdiff-backup foo bar
- 簡単なリモートのケース---ローカルの /some/local-dir ディレクトリを、hostname.net というマシン上の /whatever/remote-dir ディレクトリへコピーします。リモートの rdiff-backup へのパイプを作るために、ssh を使います。ディレクトリの一方がリモートであるという点を除いては、上の例と同じです。
rdiff-backup /some/local-dir hostname.net::/whatever/remote-dir
- 今度はソースディレクトリがリモートでバックアップがローカルです。さらに、リモートホストのユーザーネームを指定します。なお、ユーザーネームを省略すると、ローカルのユーザーネームと同じユーザーネームでログインします。
rdiff-backup user@hostname.net::/remote-dir local-dir
- さらに、ソースとリモートが両方とも他のマシンとすることもできます。以下の例では、さらに -v5 オプションをつけました。これは、表示されるメッセージの量(verbosityのv)を設定するオプションです。verbosity は 0 から 9 まで設定でき、デフォルトでは3です。さらに、--print-statistics オプションを加えることで、統計が表示されます。このオプションをつけなくても、統計は rdiff-backup-data ディレクトリに保存されます。
rdiff-backup -v5 --print-statistics user1@host1::/source-dir user2@host2::/dest-dir
復元 ↑
- rdiff-backup foo bar にてバックアップをしたとします。foo/dir を消してしまって、bar/dir から復元するには
cp -a bar/dir foo/dir
rdiff-backup はミラーを作るため、cp コマンドのような通常のコマンドでファイルを復元できます。
- この先の例では、diff-backup local-dir host.net::/remote-dir にてバックアップを実行したと仮定して、復元方法の例を示します。その場合には、マシンが異なりますから、cp コマンドでファイルを復元することができません。そこで、以下のいずれかによって最新のバージョンを復元します。
rdiff-backup --restore-as-of now host.net::/remote-dir/file local-dir/file
rdiff-backup -r now host.net::/remote-dir/file local-dir/file
ここで、--restore-as-of (短縮は -r) オプションは、rdiff-backup にバックアップではなく復元をするのだということを指定します。now オプションは現在時刻を示します。
- rdiff-backup の大きな利点は、バージョン履歴を取っていることです。以下のコマンドにより、host.net::/remote-dir/file の10日前の状態を、/tmp/file に復元できます。
rdiff-backup -r 10D host.net::/remote-dir/file /tmp/file
時間の指定方法は、他にも 5m4s (5分4秒)、2002-03-05 (2002年3月5日)といった指定ができます。さらに詳しくは、マニュアルの TIME FORMATS セクションを参照してください。
- 最後に、差分ファイルからディレクトリを復元する例を示します。差分ファイルは host.net::/remote-dir/rdiff-backup-data/increments にあり、変更のあったファイルの過去のバージョンを保存しています。1つのディレクトリを指定するならば、
rdiff-backup host.net::/remote-dir/rdiff-backup-data/increments/file.2003-03-05T12:21:41-07:00.diff.gz local-dir/file
- rdiff-backup はファイル名から rdiff-backup 差分ファイルであると判断し、復元モードに入ります。上の例では、復元されたバージョンは local-dir/file に保存されます。
古いファイルの削除 ↑
- rdiff-backup はファイルの差分のみを保存することでディスク容量を節約しているとはいえ、いずれバックアップ先のスペースが足りなくなる場合もあります。rdiff-backup の --remove-older-than モードは、古い差分を削除します。このセクションでは、過去にrdiff-backup によって host.net::/remote-dir にバックアップがなされたと仮定しますが、ホスト名が省略されれば、ローカルでも同じようにはたらきます。
- このコマンドは、過去2週間の間最新のバージョンでなかったファイルを削除します。
rdiff-backup --remove-older-than 2W host.net::/remote-dir
1年間変更のなかったファイルはそのまま残ります。15日前に削除されたファイルは、このコマンドを実行後は復元できません。
- 復元するときと同じように、時間を指定する方法はたくさんあります。以下のように 20B を指定すると、過去20回の rdiff-backup 実行に関わる情報のみを保存します。nnBの文法は、バージョン 0.13.1 移行でのみ使用可能です。
rdiff-backup --remove-older-than 20B host.net::/remote-dir
include/exclude オプションによるファイルの選択 ↑
- すべてのファイルをバックアップしたくない場合には、--includeと--excludeオプションにより、どのファイルをバックアップするかを正確に指定することが出来ます。すべてのオプションとその意味については、マニュアルを参照して下さい。
- この例では、無限ループを避けるために、/mnt/backupを除外します。
rdiff-backup --exclude /mnt/backup / /mnt/backup
(実は、rdiff-backupはこの例のような単純なループを自動的に検出することができます。)これは、単なる例であって、実際には /proc も除外する必要があるでしょう。
- もっと現実的な例として、/proc, /tmp, /mntを除外します。特に、/procは絶対にバックアップしてはいけません。また、バックアップ元のディレクトリがリモートとなっています。
rdiff-backup --exclude /tmp --exclude /mnt --exclude /proc user@host.net::/ /backup/host.net
- 複数のincludeとexcludeオプションがある場合には、先に書いた方が優先されます。以下のコマンドでは、/usr/local/binをバックアップしますが/usr/binをバックアップしません。
rdiff-backup --include /usr/local --exclude /usr / host.net::/backup
- rdiff-backup では、rsync と同じようなワイルドカードを使うことが出来ます。すなわち、**はあらゆるディレクトリに一致し、*は/が含まれないディレクトリに一致します。したがって、
rdiff-backup --include /usr/local --include /var --exclude '**' / /backup
このコマンドは /usr/local と /var ディレクトリのみをバックアップします。シングルクオート '' は、シェルが ** を展開することを防ぐためのものであり、rdiff-backup コマンドの一部ではありません。
- もっと複雑な例を示します。(長いので2行に分けましたが、1行です。)
rdiff-backup --include '**txt' --exclude /usr/local/games --include /usr/local
--exclude /usr --exclude /backup --exclude /proc / /backup
このコマンドは /usr/local/games/pong/scores.txt を含むすべての txt で終わるファイルをバックアップします。--include '**txt' が最優先されるからです。/usr/local/bin ディレクトリはバックアップされますが、/usr/share と /usr/local/games/pong はバックアップされません。
- バックアップするファイルをファイル名リストで指定することもできます。たとえば、include-list というテキストファイルの中身が以下の2行だとします。
/var
/usr/bin/gzip
そのときに、
rdiff-backup --include-filelist include-list --exclude '**' / /backup
このコマンドは、/var, /usr, /usr/bin, /usr/bin/gzip をバックアップしますが、/var/log と /usr/bin/gunzip をバックアップしません。ここで、この --include-filelist のはたらきは --include とは違うことに注意して下さい。つまり、--include /var の場合には /var/log にもマッチしますが、--include-filelist の場合にはマッチしません。
- 1つのファイルリストに、includeとexcludeを両方書くことができます。たとえば、include-list というファイル名で以下のようなファイルを作成したとします。
**txt
- /usr/local/games
/usr/local
- /usr
- /backup
- /proc
このとき、次のコマンドは2つ上の複雑な例とまったく同じことをします。
rdiff-backup --include-globbing-filelist include-list / /backup
ここで、--include-filelist のかわりに --include-globbing-filelist を使いました。これは、それぞれの行をコマンドラインで指定したと同じように解釈させるためです。そうしなかった場合には、たとえば、**txt は"**txt"というファイル名のファイルとして解釈されてしまいます。
バックアップディレクトリの情報取得 ↑
- 以下の例では、過去に rdiff-backup in-dir out-dir を実行したと仮定します。
- このコマンドは、frobniz という文字を含むすべての新しいファイルおよび古いファイルをみつけます。
find out-dir -name '*frobniz*'
rdiff-backup はファイル名をまったくいじりらないので、たいていの場合は通常のツールを使えばうまくいきます。
- 以下の2つのコマンドは、いずれも同じで、out-dir/file のすべてのバージョンに対して、バックアップされた時間を表示します。このコマンドは、in-dir/file の古いバージョンを復旧させたいけれど、どのバージョンなのかが分からないときに便利です。
rdiff-backup --list-increments out-dir/file
rdiff-backup -l out-dir/file
- このコマンドは、out-dir/subdir ディレクトリの下にあるファイルの中で、過去5日の間に更新されたファイルをリストします。
rdiff-backup --list-changed-since 5D out-dir/subdir
- このコマンドは、5日前に out-dir/subdir ディレクトリに存在したファイルすべてをリストします。このファイルには、過去5日間の間に削除されたファイルだけでなく、最近更新されてないファイルを含みます。
rdiff-backup --list-at-time 5D out-dir/subdir
- 以下の1つ目の例は、out-dir の中の現在のファイル(リモートコンピュータにある)と in-dir の中のファイルを比較し、どのファイルが更新されているかを表示します。2つ目の例は、1つ目の例と似ていますが、in-dir と out-dir の2週間前の状態を比較します。
rdiff-backup --compare in-dir user@host::out-dir
rdiff-backup --compare-at-time 2W in-dir user@host::out-dir
- rdiff-backup は、out-dir/rdiff-backup-data ディレクトリに、セッション毎に1つの統計ファイルを作成します。複数の統計ファイルの平均値の計算をするためには、--calculate-average オプションを使い、計算をする統計ファイルを指定します。
rdiff-backup --calculate-average out-dir/rdiff-backup-data/session_statistics*
その他のコマンド ↑
- リモートホストへの接続がうまくいかないときには、--test-server コマンドが使えます。このコマンドは、リモートに rdiff-backup が動いているかどうかを検証します。
rdiff-backup --test-server hostname.net::/ignored
リンク ↑
コメント ↑
なにかお気づきのことがありましたらどうぞ。
|