rsyncの- -link-destオプションは便利そうだ
今まであまり知らなかったrsyncコマンドだが、オプションを使いこなすと様々な
応用ができそうだ。とりわけあまりメジャーではなさそうなオプション、- -link-destは
差分バックアップに使えるので覚えておきたい。
このオプションを使用すると、比較対象とコピー先を比べて差分のみをコピーし、
変更がないファイルに関してはハードリンクとする。変更がないファイルはすべて
ハードリンクなのだから、資源の節約にはなる。
しかし自分はこの仕組みを理解するのに、結構手間取った。
自信はないが、まとめてみよう。
まず、以下のコマンドが実行されていることが前提。
/org_dir/ディレクトリを/old_dir/ディレクトリにコピーしている。
# rsync -av – -delete /org_dir/ /old_dir/
次に以下コマンドを実行してみる。
/org_dir/を/backup/ディレクトリにコピーする。
しかし/org_dir/と/old_dir/を比較して、変更がないファイルはハードリンクとし、
変更があったファイルだけコピーする。
# rsync -av – -delete – -link-dest=/old_dir/ /org_dir/ /backup/
以下コマンドを実行してみると、/org_dir/内ファイルと/old_dir/内ファイルの
ハードリンクは別、/old_dir/内ファイルと/backup/内ファイルのハードリンクは
全く同じになっているはず。
/org_dir/内でファイルを追加してから再度- -link-destオプション付きでrsyncすると、
差分のみコピーされるはずだ。
# ls -li /org_dir/
# ls -li /old_dir/
# ls -li /backup/
参考にしたバックアップにrsync – -link-destを使うと良い場合もあるよからそのまま抜粋なのだが、
以下のような運用方法が可能となる。
1. 日付を名前にしたディレクトリを作る
2. 前の日のディレクトリを–link-destのパラメータに渡して、バックアップ対象のディレクトリを新しいディレクトリにコピーする。
ちなみに「差分のみコピーする」というだけなら-uオプションでもよい。
rsyncは他にも様々なオプションがあるので、ついでに書いておく。
-v コピー中のファイルを表示
-a アーカイブモード(ファイルやディレクトリの属性をそのままコピー)
※-aオプションをつければ以下rlptgoDオプションは必要なし
-r ディレクトリ内を再帰的にコピー
-l シンボリックリンクをそのままコピー
-H ハードリンクをそのままコピー
-D デバイスファイルを保ったままコピー
-p パーミッションを保ったままコピー
-t タイムスタンプを維持
-o オーナーをそのまま維持
※指定しないとオーナー属性はコピーしたユーザーとなる
-g グループをそのまま維持
※指定しないとグループ属性はコピーしたユーザーのグループとなる
-n テストのみ行い、実行結果を表示
-e 実行するコマンドを指定(デフォルトはrsh)
※ネットワーク越しに別のホストにコピーする時に、-e sshなど。
-z ファイルを圧縮
-u 変更・追加されたファイルのみコピー
- -existing 更新されたファイルのみコピー、追加されたファイルは無視
- -delete コピー元ファイルが削除されたらコピー先でも削除
- -exclude 指定したディレクトリを除外する
- -exclude-from ファイル名 指定したファイルに記載のディレクトリを除外
- -excludeに対応して- -includeもあり、正規表現の利用で細かい指定もできるらしい。
追う程に深いrsyncではあるが、今回はこの辺で。
- -link-destについては以下も参考にした。
↓ ↓ ↓
rsyncで差分バックアップを行うための「–link-dest」オプション