Subversionが壊れた日

朝出勤したら開発環境のデイリービルドに失敗していたので、何事かと調べていたらどうやらSubversionがうまく動いていない。

apacheのエラーログ

Error string not specified yet: Berkeley DB error for filesystem '/svn/repos/db' while closing environment:\n
Could not fetch resource information.  [500, #0]
Could not open the requested SVN filesystem  [500, #160029]

とりあえずsvnadmin recoverで復旧を試みる

svnadmin recover /svn/repos
リポジトリのロックを取得しました。
お待ちください。リポジトリの復旧にはいくらか時間がかかります...

復旧が終わりました。
リポジトリの最新のリビジョンは 7304 です。

「お!」と思ったが、全然復旧してなかったので、今度はsvnadmin verifyを試す。

svnadmin verify /svn/repos
* リビジョン 1 を検証しました。
* リビジョン 2 を検証しました。
・
・
・
途中でエラー。
※エラー内容忘れた

それでも直らないので、BerkeleyDBのリカバーコマンドを試す

db_recover -c -v -h /svn/repos/db
db_recover: Ignoring log file: /svn/repos/db/log.0000000001: magic number 0, not 40988
db_recover: Invalid log file: log.0000000001: Invalid argument
db_recover: PANIC: Invalid argument
db_recover: PANIC: DB_RUNRECOVERY: Fatal error, run database recovery
db_recover: DB_ENV->open: DB_RUNRECOVERY: Fatal error, run database recovery

だめだ。。。。
ここで何気なく、df -hを見てみると/の利用率が100%。。。。
同じサーバでMavenのCentral Repositoryのコピーをrsyncで取得してたのを思い出して、確認してみると61GBあった。。。

やっと突き止めたと思って、Centrar Repositorのコピーを全削除した後に
db_recover -c -v -h /svn/repos/db
]してもなぜか同じエラー。


泣きそうになりながら、いろいろ探してたらSubversionのDBが壊れたときの修復スクリプトという夢のような記事を発見


dbファイルとlogファイルの削除とbdbなファイルのダンプからロードまでやってくれるそうだ。
これを試してからapache再起動で無事解決。


心臓に悪いわ。



参考
Berkeley DB 壊れる。 そして直る!
svnadmin recover
SubversionのDBが壊れたときの修復スクリプト
毎回リポジトリへアクセスする度に、プロセスがハングアップするんだけど、僕のリポジトリが壊れているの?
subversion の BerkleyDBが壊れてハマって復旧
Subversion 覚書
Could not open the requested SVN filesystemCommentsAdd Star