$Date: 2018-07-07 06:49:13 +0900 (2018/07/07 (土)) $
$Revision: 1347 $
Subversionリポジトリのバックアップ [概略]
概要
バージョン管理するぐらいですから、Subversion リポジトリには
大抵の場合重要なデータが入っています。
もしハードディスククラッシュ等で失われてしまったら泣くに泣けません。
そうならないように日頃からバックアップを取るようにしましょう。
-
[svn-backup-dumps.py の利用方法] は こっちです。
-
[svn-backup-dumps.py カスタム版の利用方法] は こっちです。
-
svnsync の説明は、こっちです。
データ損失リスク
データを失うリスクとしては以下の 3つが考えられます。
-
外的要因(火事、落雷、盗難など)
-
ハードディスク故障(つまりハードディスククラッシュ)
-
誤操作(リポジトリのデータを間違って消してしまう)
バックアップ計画を考える場合、どのリスクに対応する必要があるか
考える必要があります。
ハードディスク故障によるデータ破壊から、リポジトリデータを
保護するためには、リポジトリを格納しているハードディスクドライブとは、
物理的に別のハードディスクまたは外部記憶メディア(DVD-R とか) に
バックアップデータを保存する必要があります。同じバードディスクの
別のパーティションにコピーしただけではバックアップしたことになりません。
(通常考えるリスクはこれです。)
ハードディスク故障によるデータ破壊からデータを救う方法として
RAID がありますが、RAID では 誤操作やフトウェアのバグによるデータ破壊を
防止する効果はありません。
マシン自体が損傷を受けるようなリスク(火事など)からデータを保護するためには
離れた場所にあるマシンかメディアにバックアップを置く必要があります。
同じマシンの別のハードディスクにバックアップするだけではバックアップも
被害を受けてしまいます。盗難にあってもデータを秘匿にしたいという場合は
データの暗号化が必要となります。
どこまでのリスクに対応するかは、保護したいデータの重要度と、
対策を取るために必要な手間とコストとの兼ね合いになります。
それほど重要でないデータを高いコストをかけて保護する必要はありませんし、
きわめて重要なデータであればそれなりの対策を行う必要があります。
バックアップ頻度
バックアップを行うときにはバックアップ頻度を考える必要があります。
これはどれだけの期間のデータを失うことが許容できるかに関わっています。
もしバックアップ頻度が 1週間であれば、最大1週間分のデータを失ってしまう
というリスクがあります。1日単位であれば、最大1日分になります。
バックアップを行う頻度を高くすれば、それだけデータを失ってしまうリスクを
少なくすることができますが、バックアップデータを保存しておくための
ディスク容量が多く必要です。
通常はフルバックアップを1週間ごとに行い、差分バックアップを 1日ごとに
行う。そして post-commit によるリビジョンごとのバックアップを行うと
いうようになると思います。データ量が少なければ毎日フルバックアップを
とっても大丈夫です。
バックアップの方法
Subversion のリポジトリのバックアップに利用できる方法は
以下の 4 種類です。いずれの方法でもフルバックアップ、差分バックアップが
可能です。
方法別の特徴
|
長所 |
短所 |
ファイルコピー |
|
- 可搬性に乏しい
- データエラー検出ができない
- サーバー管理者しか行えない
|
svnadmin dump/
load
|
|
- バックアップ、リストアに時間がかかる
- ダンプファイルが壊れたときに復旧が困難
- サーバー管理者しか行えない
|
svnsync
|
- サーバーダウン時に代替サーバーとして利用可能
- サーバー管理者でなくともバックアップできる
- 最低限のデータエラー検出ができる
- リモートでバックアップができる
|
|
svnrdump
|
- バックアップ、リストアに時間がかかる
- サーバー管理者でなくともバックアップできる
- 最低限のデータエラー検出ができる
- リモートでバックアップができる
- リモートでリストアができる
|
- Subversion 1.6 以降が必要
- ダンプファイルが壊れたときに復旧が困難
|
ファイルコピー
リポジトリデータのファイルをコピーする方法です。
詳細はパス。参考 URL を見てください。
長所
-
svnadmin dump/load の方法に比べて高速です。
短所
-
可搬性に乏しい
リポジトリの形式に依存してしまうため場合によっては
単にコピーしただけでは利用できない場合がある点です。
-
Berkley DB ファイルシステムを使う場合 OS, BDB のバージョンに依存して
しまうためそのままでは利用できない。
-
単純にファイル単位でコピーするだけなのでデータが壊れていたとしても
何も検出してくれない。
Berkley DB 形式のリポジトリの場合、リポジトリがわずかに壊れる場合が
あります。通常の利用では気づかないけど、何ヶ月もたってから壊れていることに
気づくことがあります。(svnadmin dump & svnadmin load するとそのときに判明する)
この方式では単にコピーするだけなので、エラーもそのままコピーします。
参考
svnadmin dump によるダンプ
バックアップには svnadmin dump を実行します。バックアップデータは
ダンプファイルの形式で保存します。復旧には svnadmin load を実行します。
容易にフルバックアップ、差分バックアップを行えるようにした
svn-backup-dumps.py というスクリプトがあります。
詳細は別ページで解説します。
長所
短所
-
バックアップ、復旧ともに時間がかかります。ただし差分バックアップを
行うことができるので、バックアップ時間を短縮することは可能です。
注意点
-
ダンプファイルには conf ディレクトリ や hooks ディレクトリは含まれないので
手動でバックアップする必要があります。
-
ダンプファイルが少しでも壊れていると復旧することができないので
バックアップテータには冗長性を持たせましょう。
つまりフルバックアップや差分バックアップを組み合わせて
複数のバックアップが存在するようにしましょう。
参考
svnsync によるバックアップ (ver 1.4 以降)
svnsync によって、リポジトリのレプリケーション(複製)を作成します。
詳細は別ページで解説します。
長所
-
バックアップしたいサーバーへのSubversion の読み込みアクセス権が
あればバックアップすることができます。
- サーバーに(SSH やリモートデスクトップで)直接ログインできなくても OK です
- サーバー管理者でなくてもバックアップできる
-
バックアップ元サーバーに問題が発生して使えなくなったときに
バックアップ先サーバーを臨時の代替サーバーとしても利用可能です。
-
バックアップ先に物理的に離れたサーバーを指定するだけで
容易に別のマシンへのリモートバックアップが可能です。
-
バックアップ先はコミット権限があるリポジトリであれば何でもかまいません。
file:/// でもかまいませんし、http プロトコルでもかまいません。
-
svnadmin dump + svnadmin load と同様の処理が行われるので
自動的にリポジトリの整合性チェックにもなる。
-
初回バックアップ以外は差分バックアップとなるので、前回バックアップを
取ってから更新されたものだけをバックアップできる。
短所
-
バックアップ元のサーバーが、Subversion 1.4 以降である必要があります。
(ただしバックアップ先は Subversion 1.0 以降であれば OK)
注意点
-
conf ディレクトリ や hooks ディレクトリはバックアップしないので
手動でバックアップする必要があります。
-
バックアップ先のリポジトリで、リビジョン属性の変更を許可する必要があるので
バックアップを取る前に、フックスクリプトを設置する必要があります。
svnrdump dump によるダンプ
バックアップには svnrdump dump を実行します。
バックアップデータは svnadmin dump/load と互換のダンプファイルの形式で保存します。
復旧には svnadmin load または svnrdump load を実行します。
長所
短所
-
バックアップ、復旧ともに時間がかかります。ただし差分バックアップを
行うことができるので、バックアップ時間を短縮することは可能です。
注意点
-
ダンプファイルには conf ディレクトリ や hooks ディレクトリは含まれないので
手動でバックアップする必要があります。
-
ダンプファイルが少しでも壊れていると復旧することができないので
バックアップテータには冗長性を持たせましょう。
つまりフルバックアップや差分バックアップを組み合わせて
複数のバックアップが存在するようにしましょう。