日曜のたびにサーバが落ちてるわけだが…
もう慣れてしまったので、落ちても大丈夫。ということを散々経験したところで会得した、今のところの多分間違いのないreiserfsの復旧方法を紹介する。
まずサーバが落ちた時のfsckなのだけど、reiserfsckのオプションは、
–fix-fixable
だけを知っておけばいい。これ以外のオプションはいらない。
オプションなしで起動した場合、–checkを指定したとみなされるのだけど、これでは何も修復してくれない。あくまでもチェックだけだ。だから、これは時間のムダでしかない。「復旧」は急ぐわけなので、異常を発見するためだけにfsckを走らせるのは馬鹿げている。なので、いきなり–fix-fixableで走らせる。
これで特に致命的なエラーが出なかったら、それで完了。普通にサーバを起動すればいい。
致命的っぽいメッセージが出て「復旧出来るのは–rebuild-treeだけだ」みたいなことを言われても、
これはスルー
だ。とは言え、復旧しないわけには行かないので、
- 新しい領域を確保してmkfs
- 元の領域を-r付きでmount(read only mount)
- cp -aでまるっと新しい領域に複写
- 古い領域を捨てて新しい領域を現用に
ということをやる。なぜなら、
–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は捨ててしまいたいところなんだけど、意外にも安定で結構パフォーマンスが良いので、なかなか捨てられないのだよね。