svn DB の復旧について
最新リビジョンのチェックアウトをしようと思ったら、次のようなエラーが出てしまいました
svn: Can't read file '/svn_repos/my_rep/db/revs/50': End of file found
まだ、大したデータは管理されていないとはいえ、今後開発がすすんで同じようなエラーが出た時のことを考えると
復旧方法を探しておいた方が安心できるってことで、ちょいと調べてみました.
結局やったこと
次のサイトを参考にさせていただきました.
http://www.spring-aki.com/archives/2006/08/svnerror.html
- $repository/db/revs にある破損したリビジョン以降のリビジョンファイルを削除する
- $repository/db/revprops にある1で削除したものと同じリビジョンファイルを削除する
- $repository/db/current を編集して、破損したリビジョンに変更
丁度壊れているリビジョンが 51 の最新リビジョンだったので、以下のファイルを削除
- $repository/db/revs/51
- $repository/db/revprops/51
$repository/db/current をテキストエディタで開いて
51 ah j
と書いてあるところを
50 ah j
に編集して上書き.
svnX からリポジトリを開いてみると、なぜかリビジョン51が表示されていて
svn: No such revision 51
といったエラーが表示されてしまうが、リビジョン 50 を選択してチェックアウト、(適当なファイルを編集して)コミットを
行うと、新しい リビジョン 51 のログが表示される.
他に調べたこと
リポジトリDB が壊れた場合には、次のコマンドを試すものらしい.
svnadmin verify | リポジトリに保存されているデータを検証します |
svnadmin recover | リポジトリデータベースを整合性のある状態へ修復します |
例)
[user@host:~/Documents/sandbox]$ svnadmin verify file:///Documents/svn_repos/sandbox
おわりに
私は上記方法で復旧できたようですが、適切な復旧方法かは分かりませんので、試す際には自己責任でお願いします.