気づいたら年が明けた。
twitterやfacebookやらに情報を投げるようにしていると全然blogがかけなくなってしまうのは良くない傾向、ちょっとアウトプット先について見直したりするべきかもしれない。
さて、昨年末からうちのNASがそろそろ不調だなぁと思っていたところ、突然panicで落ちてしまって上がらなくなってきてしまった。シングルユーザモードでなら起動したので、dumpadmでクラッシュログを出すようにしてもう一度クラッシュするのを待って、クラッシュした後再度シングルユーザモードで/var/crash/マシン名/vmdump.0 (0のところは数字) ができているのを確認。savecore -vf /var/crash/マシン名/vmdump.0 /var/crash/ 的なことをしてvmcore.0とunix.0を生成する。
vmcore.0とunix.0ができたら、mdb -k vmcore.0 unix.0などしてmdbを起動してログを見る。シングルユーザモードだとmdbのページャが動かないので、頭に TERM=vt100;などとつけてやると良い感じ。
ログを一通りあさってみると、どうもrecursive mutex_enterなどというログが出ているのを見つける。調べてみると、
http://dlc.sun.com/osol/on/downloads/b136/on-changelog-b136.html
このあたりで、
BUG/RFE:6786704recursive mutex_enter from si3124:si_tran_reset_dport caused by bus reset
と、これっぽい問題が解決されている様子。うちのNASはopensolaris snv_134でそのままにしていたせいでこの問題を見事に踏み抜いたようだ。
ここからが面倒で、opensolaris snv_134などという古いものをそのままにしていたせいで、opensolaris.orgはもう無くなっているし、openindianaのhow to upgradeの通りに試してみてもpython関係の依存関係かエラーでアップグレードもできない。
そこで、大変おすすめできないのだけど、下記の方法でドライバを差し替えた。
** 以下の方法はうっかりすべてのデータを失うおそれもあります。 **
1. とりあえずopenindianaのlive DVDを落としてくる
2. VMWareでそのlive DVDから起動する
3. /kernel/drv/amd64/si3124をどうにかして取り出す(私は自分のサーバにアップロード)
4. シングルユーザモードで起動した状態で、壊れたサーバの/kernel/drv/amd64/si3124に書き込む。元ファイルは念のためバックアップを取る
5. 再起動
ちなみに、openindiana147のドライバで置き換えたところ、クラッシュまで一瞬時間が延びた気がするがやはり駄目。そこで最新のopenindiana151a8のドライバで置き換えたところ、クラッシュしなくなりアクセスできるようになった。つまり、si3124のドライバは最新のものでどうやらこの辺のバグをついにfixしきったということのようだ。
おそろしいことに、そのあとscrubをかけたところ、チェックサムエラーが山のように・・・。片っ端からディスクがDEGRADEしていって、最終的に全部の玉がDEGRADEしてしまったときの体調の悪さといったら、思い出すだに恐ろしい。
それでもzfsは全部のディスクからがんばってパリティを再生成してどうにかこうにかファイルを保全しようとしてくれる。もちろん欠損したファイルもすべてわかる。
欠損したファイルはzpool status -v tankと-vオプションをつければ一覧で得ることができるので、こういうことになった方はチェックしてみると良いだろう。
・・新年そうそうものすごく胃の痛い思い、ちょっとお祓いにでも行ってくることを検討したくなる。
そんなこんなで、全然更新していませんがunos.bizは死んだわけではないです。
今年もよろしくお願いいたします。