パスワードを忘れた? アカウント作成
157585 journal

rutoの日記: バックアップにrsync --link-destを使うと良い場合もあるよ

日記 by ruto

バックアップのためにtarやafioなどを使う場面や、単に古いファイルを取っておきたいという理由でバージョン管理システムを使う場面の何割かはrsyncを--link-destオプション付きで使った方が良い。

rsync --link-destは次のようにして使う。

rsync --link-dest old source dest

これは次のような動作になる

sourceをdestにコピーする。ただしoldにあるファイルと同じ内容のファイルはそのファイルへのハードリンクにする。

これを次のようにcronと組み合わせることで、毎日のバックアップが取れる。

  1. 日付を名前にしたディレクトリを作る
  2. 前の日のディレクトリを--link-destのパラメータに渡して、バックアップ対象のディレクトリを新しいディレクトリにコピーする。

つまりpdumpfsrsnapshotglastreeと同じことがrsync単体でできる。

#ちなみに--link-destはpdumpfsなどよりも後に実装された。

利点:

  • バックアップしたデータに対して、特殊なコマンドを使わずに通常のls, cp, find, grepなどのコマンドを使って、簡単かつ高速にアクセスできる(最新のバックアップにも、古いバックアップにも)。tarなどで増分バックアップしていると1つファイルを持ってくるだけでずいぶん時間がかかる。
  • ディスク容量が足りなくなったときなどに、どの日のバックアップも単純にrm -rfで安全に削除できる。他のバックアップシステムだと全く削除できなかったり、最も古いものしか削除できなかったりする。
  • 変更されていないファイルはハードリンクされるため、ディスク消費量を抑えられる。
  • バックアップの中のファイルが破損してもそのファイルとハードリンクを共有しているファイルしか影響しない。
  • バックアップの中のディレクトリが破損しても他の日のバックアップには全く影響が無い(ディレクトリはハードリンクされないため)。
  • 遠隔バックアップができる。

欠点:

  • バックアップは全て同じパーティションに入れないといけない。
  • ファイル単位でしか差分を取らないので大きなファイルが頻繁に更新されるとディスクを消費する(mboxやディスクイメージなど)。
  • ディレクトリはハードリンクされないので、ディレクトリだけでけっこうディスクを消費する場合がある。
  • 圧縮できない。
  • ハードリンクをサポートしたファイルシステムでしか使えない。

決して万能ではないが、バックアップシステムを選ぶ際や、単に古いファイルを取っておきたいという理由でバージョン管理システムを選ぶ場合には選択肢に加えても良いと思う。

あとは、詳細は省くけどrdiff-backupも選択肢に入れると良い。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson

読み込み中...