壊れやすいと噂には聞いていたけど、SubversionのBerkeley DBが初めて壊れた。

Eclipseでupdate中にこんなエラーがでる。

update -r HEAD C:/develop/europa/initializeScript
    Berkeley DB error
svn: PROPFIND request failed on '/svn/sandbox/initializeScript'
svn: Could not open the requested SVN filesystem

Berkeley DB 壊れる。 そして直る!を参考に直した。

$ svnadmin recover (REPODIR)
$ rm -f (REPODIR)/db/log.*
$ chown -R (REPOOWNER):(REPOOWNER) (REPODIR)

(REPODIR)と(REPOOWNER)は適当に読み替えてください。

・・・やっぱ、fsfsにした方が無難ですかね。


以下具体的な手順。

まずはverify

$ svnadmin verify /work/svnroot/sandbox
svnadmin: ファイルシステム '/work/svnroot/sandbox/db' に対して環境を開いているときに Berkeley DB エラーが起きました

svnadmin: DB_RUNRECOVERY: Fatal error, run database recovery
svnadmin: bdb: PANIC: fatal region error detected; run recovery

やっぱだめ。
次はリカバー

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

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

復旧できたと思いきや、eclipse上で同じエラーが起きる。
手順に従い、ログを消してみる。

$ ll
合計 31280
-rw-r--r--  1 apache apache     1955 10月 27  2006 DB_CONFIG
-rw-r--r--  1 root   apache    16384  8月  1 19:33 __db.001
-rw-r--r--  1 root   apache   278528  8月  1 19:33 __db.002
-rw-r--r--  1 root   apache   393216  8月  1 19:33 __db.003
-rw-r--r--  1 root   apache  1327104  8月  1 19:33 __db.004
-rw-r--r--  1 root   apache    16384  8月  1 19:33 __db.005
-rw-r--r--  1 apache apache   135168  8月  1 19:34 changes
-rw-r--r--  1 apache apache     8192  8月  1 19:34 copies
-r--r--r--  1 apache apache        2  7月 21 19:10 format
-rw-r--r--  1 apache apache        4 10月 27  2006 fs-type
-rw-r--r--  1 apache apache     8192  8月  1 19:34 lock-tokens
-rw-r--r--  1 apache apache     8192  8月  1 19:34 locks
-rw-r--r--  1 apache apache  1048516  8月  1 10:20 log.0000000166
-rw-r--r--  1 apache apache  1048560  8月  1 10:21 log.0000000167
-rw-r--r--  1 apache apache   814994  8月  1 19:34 log.0000000168
-rw-r--r--  1 apache apache   151552  8月  1 19:34 nodes
-rw-r--r--  1 apache apache   151552  8月  1 19:34 representations
-rw-r--r--  1 apache apache     8192  8月  1 19:34 revisions
-rw-r--r--  1 apache apache 27246592  8月  1 19:34 strings
-rw-r--r--  1 apache apache    49152  8月  1 19:34 transactions
-rw-r--r--  1 apache apache     8192  8月  1 19:34 uuids
$ rm log.*
$ ll
合計 28424
-rw-r--r--  1 apache apache     1955 10月 27  2006 DB_CONFIG
-rw-r--r--  1 root   apache    16384  8月  1 19:33 __db.001
-rw-r--r--  1 root   apache   278528  8月  1 19:33 __db.002
-rw-r--r--  1 root   apache   393216  8月  1 19:33 __db.003
-rw-r--r--  1 root   apache  1327104  8月  1 19:33 __db.004
-rw-r--r--  1 root   apache    16384  8月  1 19:33 __db.005
-rw-r--r--  1 apache apache   135168  8月  1 19:34 changes
-rw-r--r--  1 apache apache     8192  8月  1 19:34 copies
-r--r--r--  1 apache apache        2  7月 21 19:10 format
-rw-r--r--  1 apache apache        4 10月 27  2006 fs-type
-rw-r--r--  1 apache apache     8192  8月  1 19:34 lock-tokens
-rw-r--r--  1 apache apache     8192  8月  1 19:34 locks
-rw-r--r--  1 apache apache   151552  8月  1 19:34 nodes
-rw-r--r--  1 apache apache   151552  8月  1 19:34 representations
-rw-r--r--  1 apache apache     8192  8月  1 19:34 revisions
-rw-r--r--  1 apache apache 27246592  8月  1 19:34 strings
-rw-r--r--  1 apache apache    49152  8月  1 19:34 transactions
-rw-r--r--  1 apache apache     8192  8月  1 19:34 uuids

これでも直らない。
で、よくよく見ると

-rw-r--r--  1 root   apache    16384  8月  1 19:33 __db.005

所有者がrootになってる・・・orz

$ chown -R apache:apache sandbox
$ ll sandbox/db
合計 28432
-rw-r--r--  1 apache apache     1955 10月 27  2006 DB_CONFIG
-rw-r--r--  1 apache apache    16384  8月  1 19:35 __db.001
-rw-r--r--  1 apache apache   278528  8月  1 19:35 __db.002
-rw-r--r--  1 apache apache   393216  8月  1 19:35 __db.003
-rw-r--r--  1 apache apache  1327104  8月  1 19:35 __db.004
-rw-r--r--  1 apache apache    16384  8月  1 19:35 __db.005
-rw-r--r--  1 apache apache   135168  8月  1 19:34 changes
-rw-r--r--  1 apache apache     8192  8月  1 19:36 copies
-r--r--r--  1 apache apache        2  7月 21 19:10 format
-rw-r--r--  1 apache apache        4 10月 27  2006 fs-type
-rw-r--r--  1 apache apache     8192  8月  1 19:36 lock-tokens
-rw-r--r--  1 apache apache     8192  8月  1 19:36 locks
-rw-r--r--  1 apache apache     4272  8月  1 19:36 log.0000000001
-rw-r--r--  1 apache apache   151552  8月  1 19:34 nodes
-rw-r--r--  1 apache apache   151552  8月  1 19:34 representations
-rw-r--r--  1 apache apache     8192  8月  1 19:36 revisions
-rw-r--r--  1 apache apache 27246592  8月  1 19:34 strings
-rw-r--r--  1 apache apache    49152  8月  1 19:34 transactions
-rw-r--r--  1 apache apache     8192  8月  1 19:36 uuids

これで直った。

update -r 166 C:/develop/europa/initializeScript
    At revision 166.

よしよしupdateできた。
けど、リビジョン 167, 168 はどこかに消えた(涙