いちおう技術系ネタ帳ということで、日記はmixiに。
2009-02-06
Subversionリポジトリのバックアップ方法いろいろ
開発ツール |
Subversionリポジトリのバックアップ方法が色々ありすぎて何がベストなのかわからなかったので調べてまとめてみた。
ただのファイルコピー
普通にファイルシステム上でディレクトリをコピー(あるいはアーカイブ)する方法。非推奨。
誰かがリポジトリにアクセスしている最中にやると壊す可能性がある。
リポジトリディレクトリをコピーしたいならsvnadmin hotcopyを使うべき。
長所
- 簡単。
- 速い。
短所
svnadmin dump/load
svnadminのdumpとloadを使う方法。
誰かがアクセス中でも一貫性が保たれる。
あくまで管理対象のファイルのみのバックアップなので、設定やフックなどは別途バックアップが必要となる。忘れがち。
差分バックアップ(--incremental)は指定リビジョン間のバックアップ。バックアップ処理がインクリメンタルというよりはデータがインクリメンタル。復元が面倒くさい。前回のバックアップの続きを処理してくれるわけではない。
あとdump内容にリビジョン欠けが発生することがあるらしいので注意が必要。つか怖いなそれ。
長所
- バックアップデータの可搬性が高い(上位/下位互換性を持っている。アーキテクチャ非依存)。
- 最低限のデータエラーが検出できる。
- リポジトリアクセス中でも一貫性が保たれる。
- フルバックアップと差分バックアップの二種類が行える。
短所
- テキスト形式に落とすので時間がかかる(特にフルバックアップ)。
- ダンプファイルが壊れると復旧が困難。
- 設定ファイルやフックスクリプトはバックアップされない。
- 差分バックアップが段階的に複数ある場合、復元に手間がかかる。
svnadmin hotcopy
svnadminのhotcopyサブコマンドを使う方法。
安全にリポジトリのコピーを行う。誰かがアクセス中でも大丈夫。
一貫性を保ったコピーが出来る以外は普通のコピーと変わらない。
リストアに特別な作業も必要ない。バックアップデータはリポジトリそのものなので、そのまま書き戻すだけ。
長所
短所
hot-backup.py(svn-hot-backup)
Subversionに同梱されているバックアップツール。svnadmin hotcopyをラッピングしたスクリプトで、圧縮や世代保存が出来る。
この世代保存は単に古いバックアップを残しておくだけで、差分データになるわけではない。
RedHat系の場合は/usr/share/doc/subversion-x.x.x/tools以下に格納されている。
Debian系の場合はsubversion-toolsという別パッケージをインストールするとsvn-hot-backupコマンドとして使えるようになる。
ソースの場合はtools/backupに入っている。
長所
短所
svn-fast-backup
FSFS形式のリポジトリをrsyncベースの実装で高速にインクリメンタルバックアップするためのスクリプト。BDBには使えない。
svn-hot-backupのrsync --link-dest版(変更がないファイルは前の世代のハードリンクになる)と考えるとよい。ハードリンクを使うので圧縮はできない。
RedHat系の場合は……見あたらなかった。
Debian系はsubversion-toolsパッケージにsvn-fast-backupコマンドとして入っている。
ソースの場合はtoolsではなくcontrib/server-sideに入っている。
長所
- リポジトリアクセス中でも一貫性が保たれる。
- バックアップを世代別に保存できる(サイクリック可)。
- 高速にインクリメンタルバックアップが行える。
- 世代間はハードリンクによってディスクスペースが節約される。
短所
- バックアップデータの可搬性に乏しい(アーキテクチャ依存)。
- FSFS形式のリポジトリにしか対応していない。
- バックアップデータを圧縮できない。
- ハードリンクを使ってるのでたぶん世代間は同一のファイルシステム上にしかバックアップできない。
svn-backup-dumps.py(svn-backup-dumps)
svnadmin dumpをラッピングしたスクリプト。圧縮とftpおよびsmbによる転送をサポートしている。
1ダンプファイルあたりのリビジョン数を指定することが出来る。
cronで毎日差分バックアップする場合に便利。対象のダンプファイルが既に存在する場合はスキップされるので、常に最新の差分バックアップを取り続けられる。
裏で走るのはsvnadmin dumpなので、リビジョン欠けの不安は残る。また設定やフック等もバックアップされない。
RedHat系の場合は/usr/share/doc/subversion-x.x.x/tools以下に格納されている。
Debian系の場合はsubversion-toolsパッケージにsvn-backup-dumpsコマンドとして入っている。
ソースの場合はtools/server-sideに入っている。
長所
- バックアップデータの可搬性が高い(上位/下位互換性を持っている。アーキテクチャ非依存)。
- 最低限のデータエラーが検出できる。
- リポジトリアクセス中でも一貫性が保たれる。
- フルバックアップと差分バックアップの二種類が行える。
短所
svnsync
これはバックアップというか、ミラーリング、レプリケーションといったほうが近い。
オリジナルのリポジトリを参照して複製先のリポジトリの同期を取るためのツール。
単方向の同期なので複製先にコミット等をしてはいけない。
長所
短所
- あくまで同期なので、過去にさかのぼって復元することは出来ない。
まとめ
svnadmin dumpでリビジョン欠けが発生するという話をまれに目にするので不安があるが実際のところはどうなのか気になる。
いずれにしても、週単位でフルバックアップ、日単位で差分バックアップといった組み合わせが定番らしい。
最近はデフォルトでFSFSだろうから、svn-fast-backupとsvn-backup-dumpsを併用するのがよさそう。
ただ、svn-fast-backupで検索してもあまり情報が出てこないのと、これだけcontribに入っていることから若干の不安が残るので、svn-hot-backupのほうがいいかもしれない。
バックアップは取るのも大事だけど復元するのも大事なので、バックアップからちゃんと復元できるかは確認した方がいいと思う。
取るだけ取って復元方法がわからないとか……あるあるw
参考
- 380 http://b.hatena.ne.jp/hotentry
- 366 http://b.hatena.ne.jp/
- 332 http://reader.livedoor.com/reader/
- 250 http://d.hatena.ne.jp/
- 116 http://b.hatena.ne.jp/hotentry/it
- 94 http://www.google.com/reader/view/
- 86 http://delicious.com/popular/
- 86 http://www.google.co.jp/reader/view/
- 70 http://b.hatena.ne.jp/add?mode=confirm&title=Subversion%u30EA%u30DD%u30B8%u30C8%u30EA%u306E%u30D0%u30C3%u30AF%u30A2%u30C3%u30D7%u65B9%u6CD5%u3044%u308D%u3044%u308D - %u3071%u305B%u3089%u3093%u30E1%u30E2&url=http://d.hatena.ne.jp/pasela/20090206/svn_
- 38 http://b.hatena.ne.jp/entrylist
- 2009-02-01 thisjunの日記 3/17 17%
- 2009-02-01 name-3333’s memo (Maya, Shake, Python, ...) 5/55 9%
- 2009-02-01 forester3の日記 4/41 9%
- 2009-02-01 山河に在りて 3/54 5%