現実的に正しいreiserfsの復旧方法

日曜のたびにサーバが落ちてるわけだが…

もう慣れてしまったので、落ちても大丈夫。ということを散々経験したところで会得した、今のところの多分間違いのないreiserfsの復旧方法を紹介する。

まずサーバが落ちた時のfsckなのだけど、reiserfsckのオプションは、

–fix-fixable

だけを知っておけばいい。これ以外のオプションはいらない。

オプションなしで起動した場合、–checkを指定したとみなされるのだけど、これでは何も修復してくれない。あくまでもチェックだけだ。だから、これは時間のムダでしかない。「復旧」は急ぐわけなので、異常を発見するためだけにfsckを走らせるのは馬鹿げている。なので、いきなり–fix-fixableで走らせる。

これで特に致命的なエラーが出なかったら、それで完了。普通にサーバを起動すればいい。

致命的っぽいメッセージが出て「復旧出来るのは–rebuild-treeだけだ」みたいなことを言われても、

これはスルー

だ。とは言え、復旧しないわけには行かないので、

  1. 新しい領域を確保してmkfs
  2. 元の領域を-r付きでmount(read only mount)
  3. cp -aでまるっと新しい領域に複写
  4. 古い領域を捨てて新しい領域を現用に

ということをやる。なぜなら、

–rebuild-treeは失敗したら何も出来なくなる

からだ。

運が良ければ–rebuild-treeで問題なく復旧出来るのだけど、運が悪いとfsckが異常終了してしまう。その時に出来るのは、–rebuild-tree付きのfsckだけだ。他のことは一切出来なくなってしまう。しかも、これはreiserfsckのバグのせいで、しばしば起きる。私も何度か経験していることは、ここで書いている。

そこで、–rebuild-treeが必要になったら、その領域は潔く捨ててしまう。

–fix-fixableが正常終了すれば、仮に致命的な問題があっても、read only mountは出来るようになる。逆に、–fix-fixableが終了してないと、read only mountは出来ない。生きているファイルを救出する時に、何かおかしなことが起きても困るので、最低限のfsckは完了してread only mountは出来るようにしておきたい。ということを合わせると、この手順しかないということになる。

–rebuild-treeはもう他に何の手もなくて、–fix-fixableした後にread only mountも出来ないとか、lost&foundにアホみたいに落ちてどうしようもないとか、そういった

本当にどうしようもない時に、一か八か

で使うオプションだと思っておいた方がいい。本当はもうちょっとマシな見方が出来るはずなんだけど、–rebuild-treeの失敗具合からすると、そう思っておいた方が良いようだ。

問題はこれを可能にするということは、ディスク領域が倍必要になってしまうということ。実際にはそうならないように、ディスク領域は分割しておいた方がいい。このためにはlvmを使うわけだけど、Debian etchでXenだと、どうも動きが微妙っぽいというところが、頭が痛い。ただ、–rebuild-treeに頼ると復旧不可能ということが起きかねないので、領域の使い回しを考えておくか、reiserfsを使うのを諦めるかすることになる。本当はreiserfsは捨ててしまいたいところなんだけど、意外にも安定で結構パフォーマンスが良いので、なかなか捨てられないのだよね。