4

どのようにしてここにたどり着いたかに関係なく、バックアップから SVN リポジトリを復元する立場にいます。残念ながら、バックアップはわずかに破損しており、19000 を超えるリビジョンのうち約 80 が失われています。バックアップは bzip2 ファイルで、bzip2recover を使用して約 99% のブロックを復元できました。これらは正常に解凍されたため、「既知の正常」です。

したがって、既知の良好なコミットと失われたコミットのリストを作成することができました。

元のリポジトリも破損していましたが、ファイルの多くは残っていました。残念ながら、リポジトリ全体が壊れています。

したがって、これらの不足しているリビジョンの元の db/revs および db/revprops ディレクトリからファイルを取得できて幸運です。バックアップ bz2 ファイルの破損が db/revs ファイルの破損と一致しない可能性があります。

r13892 までのすべてを再構築しましたが、r13893 が壊れていることがわかっているため、r13893 のダンプがありません。元のリポジトリのファイル db/revs/13893 と db/revprops/13893 があります。

svn-1.4 でリポジトリを作成して再構築しましたが、svn-1.6 にアップグレードして、選択的な svnadmin verify コマンドを (単一または一連のコミットで) 使用できるようにしました。

これら 2 つのファイルを新しいリポジトリにドロップし、db/current [1] を更新してから続行できるのではないかと考えました。ただし、確認しようとすると、次のエラーが発生します。

$ svnadmin verify new-svn
* Verified revision 1.
...
* Verified revision 13889.
* Verified revision 13890.
* Verified revision 13891.
* Verified revision 13892.
svnadmin: Can't read file 'svn/db/revs/13214': End of file found

したがって、これは明らかに機能しませんでした。ここで 13214 が何と関係があるのか​​ わかりません。

1.6 で奇妙なことが起こった場合に備えて、svn-1.4.6 にダウングレードしました。残念ながら、同じ結果が得られます-リビジョン13893は検証されていません:

...
* Verified revision 13891.
* Verified revision 13892. svnadmin: Can't read file 'svn/db/revs/13214':
End of file found

だからここに私が知っていることがあります:

  • 私はリビジョン 1 から 13892 までが 100% 正しいことを知っています (bz2 ブロックが間違って解凍され、チェックサムに合格した場合を除きます)。
  • 元の SVN リポジトリの r13893 ファイルに問題がないかどうかはわかりません。破損している可能性がありますが、破損の量が非常に少ないため、可能性は低いです (可能性はあります)。

この穴を埋める方法を知っている人はいますか? 私は 100% 信頼できる r13894 を所有していることに注意してください。したがって、r13893 を差し込むことができれば、残りの復元に進むことができます。

[1] 次のスクリプトで db/current を更新しました: http://svn.haxx.se/users/archive-2005-12/att-0630/make-current-fix.py

他の SVN リポジトリでこれをテストし (db/current への書き込みを無効にした後)、既に存在する値と同じ値を生成していることを確認しました。します。

4

1 に答える 1

2

これに関して:

svnadmin: Can't read file 'svn/db/revs/13214': End of file found

リビジョン 13893 がリビジョン 13214 の何か (ファイルのコピー、skip-rev など) を参照していると思われます。

svn ロードを実行したとき、新しいリビジョンは元のリビジョンと一致しましたか? ダンプがリビジョン 0 を参照していて、リビジョン 1 としてロードされたというケースに遭遇したことを思い出します。ここでそのようなことが起こっている場合、リビジョン 13214 への後方参照は 1 つずれます。

repo db のファイルを使用して、不足している rev をダンプ形式で作成してみてください。残念ながら、私はそれを行うツールを知りません。しかし、SvnDumpToolを見ることをお勧めします。多くの便利な方法で svn ダンプを操作できます。

開示:私は過去にsvndumptoolに貢献しました

于 2009-08-19T02:50:06.290 に答える