データベースが破損しており、バージョン化ファイルが影響を受けていない場合
データベースのみが破損した場合(つまりdb.*
ファイルがクラッシュしたドライブ上に存在する一方で、シンボリックリンクを使用してバージョン化ファイルを別の物理ドライブに保存していた場合)、データベースのみを再作成する必要があります。
必要なものは以下のとおりです。
- 最後に作成されたチェックポイントファイル。これは、最新の
P4ROOT
ディレクトリバックアップから入手できます。チェックポイントをバックアップした際に対応する.md5
ファイルもバックアップしていた場合、チェックポイントのチェックサムと復元された.md5
ファイルの内容を比較することにより、チェックポイントが正しく復元されたことを確認できます。 - カレントジャーナルファイル。このファイルは、
P4ROOT
ディレクトリとは別のファイルシステム上に存在するため、P4ROOT
ディレクトリが存在するファイルシステムで障害が発生しても、影響を受けることはありません。
不要なものは以下のとおりです。
- バージョン化ファイルのバックアップ。これは、クラッシュの影響を受けていなければ、既に最新の状態になっています。
データベースをリカバリする
-
p4d
の現在のインスタンスを停止します。$ p4 admin stop
(Helixサーバスーパーユーザでなければ
p4 admin
を使用できません。) -
データベース(
db.*
)のファイル名を変更するか、そのファイルを移動します。$ mv your_root_dir /db.* /tmp
チェックポイントからリカバリを開始すると、
P4ROOT
ディレクトリにdb.*
ファイルが存在しない可能性があります。古いdb.*
ファイルがリカバリ中に使用されることはありませんが、復元が正常に完了するまでそれらのファイルを削除しないことを推奨します。 -
以下のようなコマンドを使用して、チェックポイントの整合性を検証します。
$ p4d -jv my_checkpoint_file
コマンドによって検証される項目は以下のとおりです。
- チェックポイントは冒頭から末尾まで読み取り可能かどうか。
- 圧縮されている場合、正常に解凍できるかどうか。
- MD5ファイルがある場合、そのチェックポイントのMD5と一致するかどうか。
-
想定されるヘッダとトレーラが存在するかどうか。
圧縮されたチェックポイントの整合性を検証するには、
-z
フラグと-jv
フラグを組み合わせて使用します。
-
p4d
に-jr
(journal-restore)フラグを付けて、最近のチェックポイントとカレントジャーナルを指定して起動します。サーバルート(P4ROOT
)を明示的に指定する場合、-r $P4ROOT
引数を-jr
フラグの前に置く必要があります。また、p4d
プロセスは起動時に作業ディレクトリをサーバルートに変更するので、checkpoint_file
およびjournal_file
をP4ROOT
ディレクトリからの相対パスで指定する必要があります。$ p4d -r $P4ROOT -jr checkpoint_file journal_file
これにより、データベースが最後のチェックポイント作成時点の状態でリカバリされ、その後、チェックポイント作成後のジャーナルファイルのなかに記録されている変更が適用されます。
バージョン2018.1
バージョン2018.1以降、圧縮されたジャーナルやチェックポイントを復元する際に-z
オプションを指定する必要はなくなりました。これは圧縮されたチェックポイントと複数のジャーナルを同じ操作で復元する際に特に便利です。以下に例を示します。
p4d -r . -jr checkpoint.42.gz journal.42 journal.43 journal
2018.1よりも前のバージョン
-z
(圧縮)オプションを使用してチェックポイント作成時に圧縮している場合、圧縮されたチェックポイントとは別に圧縮されていないジャーナルファイルを復元する必要が生じます。
すなわち、以下のコマンド
$ p4d -r $P4ROOT -jr checkpoint_file journal_file
を使用する代わりに、以下の2つのコマンドを使用します。
$ p4d -r $P4ROOT -z -jr checkpoint_file.gz
$ p4d -r $P4ROOT -jr journal_file
-z
フラグを使用する場合、.gz
拡張子を手動で指定する必要があります。-r
$P4ROOT
引数が-jr
フラグよりも前に置かれていることを確認してください。
システムをチェックする
復元は完了しました。復元が正常に完了したことを確認するには、「復元後のシステムの整合性を確認する」を参照してください。
システムの状態
最新のチェックポイントからリカバリしたデータベースは、カレントジャーナルファイルに保存されていた変更を適用すると、不具合が発生した時点の状態に戻ります。
リカバリ後のデータベースとバージョン化ファイルの両方には、クラッシュした時点までのすべての変更が反映されているはずであり、消失したデータはないはずです。復元が正常に完了した場合、lastCheckpointAction
カウンタはチェックポイントの作成完了を示す値に変わります。