メインコンテンツ | メニュー

Main Contents

2006年11月27日

修羅場 - FreeBSDとRAID1とmountと

悪いことというのは重なるもので。。

ぎちぎちスケジュールの中、想定外に作業に手間どり。。

「仕様と違う」
「期待通りの動作をしない」

よくあることだけど、他のメンバーに作業を振れない。
仕様を説明して、修正ポイントを説明してってやってると、余計に手間どる。
しゃあないから僕がやる。。。

そんなこんなで、あちらこちらに、しわ寄せがいって、スケジュール狂いまくり。
しかし、もう延ばせないし。。

現実逃避に、 Emacs のアイコン作ってたら、サーバーのディスクがお亡くなりになられた(苦笑)
RAID1 で2重化してあるので、死んだディスクを交換したらOK。。のはずだったのだけど、ディスクのマウントポイントを見ようと、 mount って入力した瞬間。

Segmentation fault (core dumped)

悪夢。。。。。。。。
mount が死んだ。

そのままサーバーは固まり、リセットする羽目に。
もちろん、サーバーは起動不能。
RAIDである ar0 をマウントしようとするところでこける。

ufs:/dev/ar0s1a って直接入力してもマウントしてくれない。
ufs:/dev/ad0s1a とか、 ufs:/dev/ad0s1a って直接ATAデバイスを叩いてもだめ。

打つ手なし。
シングルユーザーモードでも起動せず。

ミラーリングした RAID1 のディスクが2台とも死んだ。。
このサーバーは、顧客用ホスティングサーバーなので、大切なお客様の HP やら、メールのデータがたくさん。。。

悪夢。

しかし、バニックになっていても解決しないので、解決方法を探す。
別のサーバーにバックアップはあるけど、10時間ほど前のもの。
更新が激しいサイトもあるので、これを使うのは最終手段
1時間ごとにとってあるものは亡くなったディスクの中。

とりあえず、予備のサーバーを動かすことを考えるが、肝心のディスクが死んでるのでセットアップに時間がかかりすぎる。

そして、サーバー落ちてるぞーとの電話がかかりまくってきた(汗)

とりあえず謝る。申し訳ございません。

無理矢理冷静になって考えると、、、

mount って入力して、 mount が死んだのだから、他のデータは生きているだろうという推測を立てる。

起動ディスクで起動して、何とかして生きているデータを救出することを試みる。

すぐ手元にあるのは、 FreeBSD6.0-RELEASE のインストールディスク。
しかし、該当サーバーは FreeBSD 4.11-RELEASE。
データだけ出せれば良いので、このディスクでも大丈夫だろうと強引に作業を進めることに。

しかし、このサーバー、 CDドライブがない。
FD 専門やん(失笑)

今は FD なんて使わないので、10年くらい前のフロッピーをひっぱり出してきて起動ディスクを作る。
しかし、セクタエラー連発。撃沈。。だめやん。。

仕方がないので、他のマシンの CDドライブをはずし、サーバーに無理矢理つける。
そして、 FreeBSD6.0-RELEASE を起動!

見事起動!
Fixed mode で起動!
コンソールに Good Luck! のメッセージ(汗)

問題はここからだ。
ad0 は完全にお亡くなりになっていたので、 ad2 に賭ける!

とりあえず、 fsck をすべてのスライスで走らせる。
/usr 以外は、ちゃんと修復してくれたらしい。
しかし、 /usr である /dev/ad2s1h で hard error でまくり。

# fsck -y -b 32 /dev/ad2s1h

と、頑張ってみるが、 hard error 消えず。
起動ディスクの mount はちゃんと仕事してくれて、他のスライスはマウントできる模様。

ad2s1h はマウントできず。
しかも、 ad2 の mount は、起動時に Root Mount failed: 16 とおっしゃる。

6.1-RELEASE のインストーラの Fixed mode には atacontrol まで入ってるのね。
ar0 が残ったままでは気持ちが悪いので、 atacontrol delete ar0 して削除。

しかし、どうやって mount してやろうか。。
と、荒療治を思いついた。
他のマシンから mount を持ってくる(笑)

セクタエラーの出る FD でも、 mount くらいならコピーできるだろうと、別の 4.11-RELEASE の mount をコピー。
FD につっこんで、例のマシンへ mount をコピー。

そして、おそるおそる mount /dev/ad2s1h /mnt と入力・・・。
したけど、 fsck しないと mount できねーぞとおっしゃる。
ごもっとも。(失笑)

でもね。 hard error って言われて、 fsck おわらないの。
何度やっても修復してくれないの。

しかし、僕は躊躇することなく、強引に入力したのでした。

# mount -f /dev/ad2s1h /mnt

すると、素直にマウントしてくれた(笑)
不幸中の幸い。奇跡。泣けてきた(涙)
しかし良い子は真似しないように。こういう時は、ro つけて、 read only でマウントするべきよ。。

ここまできたら、なんとか起動させるしかない。
セクタエラーを出していた領域は狭いので、起動さえしてしまえば、そのまま RAID1 をリビルドして、稼動させながらやった方がいいと判断。
お客様のサイトがたくさん入っているので、長時間停止させておくわけにはいかないのです。。

しかし、ふつうに mount させようと思うと、 fsck ちゃんとしろと怒られる。
でも、 mount 強制コピーのおかげで、起動時には mount できるようになったので、シングルユーザーモードで起動して、 /dev/ad2s1h を -f で強制マウント。

# shutdown -r now とやって、無理矢理 clean flag を立てることに成功!

リブートしたら、一旦 PIO モードに落ちるものの、なんとか正常に mount してくれました(汗)

現在、RAID1 をリビルド中。
PIO モードなので激遅いけど、とりあえず動いてくれてるし。
リビルドが終るまで持ってくれればよい。。

ということで、とりあえず一件落着。かな?
完全に復旧するまでは気が抜けないけど。。

最悪な状況でも、頑張ればなんとかなるもんだ。。
ほとんど1日つぶれたけど、頑張ればなんとかなるよな。

2006年11月 4日

Eclipse から GWT を起動する for Mac

GWT が Mac OS X にネイティブ対応 したので、早速導入。
基本的には projectCreator で Eclipse のプロジェクトを作って、 Terminal から applicationCreator でデバックしながら開発という感じになるんでしょうけど、これだと Eclipse の デバックモードが使えず、ちょっと不便。
ということで、 Eclipse から起動させる方法を模索。
最初は、googlipse というプラグインを使ってみたのだけど、--XstartOnFirstThread の引数がないと怒られる。
あいにく、googlipse は、 任意の引数を与えることができないらしい。

試行錯誤のあげく、起動構成から直接 GWTShell をたたくことで成功。
具体的には、

1. 実行→構成および実行を選択。
2. メインタブで任意のプロジェクト(GWTTest)を選択、メインクラスは com.google.gwt.dev.GWTShell を指定
3. 引数のタブで、 プログラムの引数に下記を追加

 -port 8888 -out "www"   jp.example.GWTTest/GWTTest.html

4. VM引数に下記を追加
-XstartOnFirstThread

5. クラスパスのタブで、拡張をクリック、プロジェクトのディレクトリである src と bin をクラスパスに追加

これで実行をクリックすると、 Eclipse から GWT の hosted mode が立ち上がります!

さあ、ばりばりやるぞー

  • by みそ
  • at 09:39
  • in Ajax

Copyright © here.Creative Commons LicenseThis weblog is licensed under a Creative Commons License.