wiki:LinuxBackup

Linux用バックアップソフト

僕は、「faubackup」→「rdiff-backup」→「rsyncNILFS」ってふうに変遷。

やりたいこと

ディスクにバックアップする
ハードディスクがどんどん巨大になってきている今、テープやDVDにというのは、速度と容量の点で非現実的。
毎日バックアップする
メールサーバなど、毎日毎時間変化があるので、数日に一度のバックアップでは役に立たない。
複数世代の状態を残しておく
最新のバックアップしか無ければ、ファイルが消えた状態で反映されてしまってアウトってことがある。 最低でも、7日、7世代以上の状態を残しておきたい。

選定条件

転送量、ディスク使用量が抑えられている
毎回、全データを転送していたのではとても時間がかかり、毎日は実行できなくなってしまう。 複数世代で同じデータを共有する仕組みが無ければ、せいぜい2、3世代しか保持できない。
ファイルシステム上に展開された状態で保存される
大きなファイルにまとめられちゃうと、「find」や「grep」で探したり、「cp」で復元したりということができない。
パーミッション、シンボリックリンクなどが保持される
Unix系OSに限らないかもしれないが、システム全体の復旧のために、パーミッションやシンボリックリンクがどのように設定されていたかという情報がとても重要。 しかも、これを手作業で復旧するのはとても手間がかかる。

比較

 faubackup

  • 前回のバックアップから変更されたファイルだけを転送する。
  • バックアップを実行した日時を名前に含むディレクトリ以下のツリーに保存される。ファイルを探すのが簡単。
  • 変更されていないファイルは、前回のバックアップツリー上のファイルにハードリンクする。
  • ウェブサーバなど、巨大なログファイルとは相性が悪い。バックアップ総量が級数的にどんどん増える。
  • 遅い。
  • 古いバックアップを削除するのは簡単(rm -rf)だが遅い。
  • Perlで書いてある。
  • トランスポートはSSH。

 rdiff-backup

  • 前回のバックアップから変更されたファイルの変更された部分だけを転送する。
  • 最新のバックアップ状態はツリーに保存される。
  • 過去の状態は、差分情報だけが保存される。
  • 過去のファイルを取り出すには、コマンドを用いてコピーする。
  • ウェブサーバなど、巨大なログファイルでもだいじょうぶ。
  • faubackupよりは速いが、やっぱり遅い。
  • 初回のバックアップがとても時間がかかる上、よくPythonの例外でコケ、コケると最初からやり直し。2回目以降は割と丈夫。
  • 古いバックアップを削除するのは、日数を指定してコマンドで行う。
  • rsync」のライブラリを用い、Pythonで書いてある。
  • トランスポートはSSH。

 rsyncNILFS

  • 前回のバックアップから変更されたファイルの変更された部分だけを転送する。
  • 最新のバックアップ状態はツリーに保存される。
  • 過去の状態は、その差分だけが、通常は見えない場所に保存されている。
  • 過去のファイルを取り出すには、「mount」コマンドを用いる。ツリーの状態で再現される。
  • ウェブサーバなど、巨大なログファイルでもだいじょうぶ。
  • だいぶ速いが、ファイル転送を開始するまで一定の時間がかかる。
  • 毎回、最初に全ファイルのリストを作成するため、メモリを大量に使用する。
  • 古いバックアップを削除するのは、スナップショットの番号を指定してコマンドで行う。一瞬で終わる。
  • トランスポートはSSHまたはrsyncプロトコル。
  • NILFSが未だ開発段階で、長期の使用実績が無いのが心配。

(2008/4/3 - sgk)