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