rutoの日記: バックアップにrsync --link-destを使うと良い場合もあるよ
日記 by
ruto
バックアップのためにtarやafioなどを使う場面や、単に古いファイルを取っておきたいという理由でバージョン管理システムを使う場面の何割かはrsyncを--link-destオプション付きで使った方が良い。
rsync --link-destは次のようにして使う。
rsync --link-dest old source dest
これは次のような動作になる
sourceをdestにコピーする。ただしoldにあるファイルと同じ内容のファイルはそのファイルへのハードリンクにする。
これを次のようにcronと組み合わせることで、毎日のバックアップが取れる。
- 日付を名前にしたディレクトリを作る
- 前の日のディレクトリを--link-destのパラメータに渡して、バックアップ対象のディレクトリを新しいディレクトリにコピーする。
つまりpdumpfsやrsnapshotやglastreeと同じことがrsync単体でできる。
#ちなみに--link-destはpdumpfsなどよりも後に実装された。
利点:
- バックアップしたデータに対して、特殊なコマンドを使わずに通常のls, cp, find, grepなどのコマンドを使って、簡単かつ高速にアクセスできる(最新のバックアップにも、古いバックアップにも)。tarなどで増分バックアップしていると1つファイルを持ってくるだけでずいぶん時間がかかる。
- ディスク容量が足りなくなったときなどに、どの日のバックアップも単純にrm -rfで安全に削除できる。他のバックアップシステムだと全く削除できなかったり、最も古いものしか削除できなかったりする。
- 変更されていないファイルはハードリンクされるため、ディスク消費量を抑えられる。
- バックアップの中のファイルが破損してもそのファイルとハードリンクを共有しているファイルしか影響しない。
- バックアップの中のディレクトリが破損しても他の日のバックアップには全く影響が無い(ディレクトリはハードリンクされないため)。
- 遠隔バックアップができる。
欠点:
- バックアップは全て同じパーティションに入れないといけない。
- ファイル単位でしか差分を取らないので大きなファイルが頻繁に更新されるとディスクを消費する(mboxやディスクイメージなど)。
- ディレクトリはハードリンクされないので、ディレクトリだけでけっこうディスクを消費する場合がある。
- 圧縮できない。
- ハードリンクをサポートしたファイルシステムでしか使えない。
決して万能ではないが、バックアップシステムを選ぶ際や、単に古いファイルを取っておきたいという理由でバージョン管理システムを選ぶ場合には選択肢に加えても良いと思う。
あとは、詳細は省くけどrdiff-backupも選択肢に入れると良い。
バックアップにrsync --link-destを使うと良い場合もあるよ More ログイン
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。