cappuccinoのコンピタブログ

cappmac.exblog.jp
ブログトップ

実家に帰ったらHDD死んでた

去年から東京暮らしになっていたんですが、お盆休みで実家に帰省しました。
1年中稼働しているサーバが実家にあるんですが、そのサーバのHDDがお亡くなりになっていました。

HDDがお亡くなりになっても、うちのサーバはSolarisによるソフトRAID(正確にはミラー)がしてあるのでデータ的には問題はありません。

ただ、起動時に問題が出たり、HDD交換時にはハードウェアRAIDみたいなお手軽さはなかったのでちょっとしたメモとして本エントリを記載します。

ちなみに前回のZFSについての紹介記事はここに記載しています。

【運用状況】
ヘッドレス状態でリモート管理
HDDは4台搭載し、2台メイン、2台ミラーで運用。

【発生状況】
sshがたまにログイン失敗するようになり、再起動を掛けたが、サーバ機能が不全(ping以外反応せず)。
モニターをつないで確認した結果。disk 2がアクセスリトライの規定値に達して動作しない旨のメッセージを出し続けていた。(詳細メッセージは取りこぼしたため未掲載)
HDDのどれかが、アクセス時に異音を発生させていた。どれか1台が壊れたもよう。

【障害対応記録】
■障害発生ディスク特定
DELLのPCだとBIOSでデバイスを停止(PC上から認識できないようにする)ことができるが、NECの安いサーバにはそのような機能はなかった。
そのため、1台1台電源を抜いて異音のするディスクを確かめる。特定完了。今回はSamsungさんでした。
障害発生ディスクを抜くとSolarisは正常起動した。
逆に言えば障害が発生するとSolarisは起動しないとも言える。可用性としてはどうなのだろう。

障害が発生したプールはDEGRADEDと表示される。今回はrpoolが死んでいることが分かる。
そして、障害が発生したディスクはc9d0s0ということも確認できる。
c0064553_13345557.png


ちなみにrpoolプールはシステム用のプールのため、バックアップ側にもgrubを入れる必要がある。

■ディスク入れ替え
HDDを近くのPCショップで購入し、入れ替え。

■ディスク認識
入れ替えただけでは認識はしてくれない。
まず、formatコマンドでパーティションを作成する必要がある。

cappmac@opensolaris:‾# format
Searching for disks...done


Total disk size is 60800 cylinders
Cylinder size is 16065 (512 byte) blocks

Cylinders
Partition Status Type Start End Length %
========= ====== ============ ===== === ====== ===


パーティションの作成はこの中のfdiskで行う。
作成方法は前回の記事と同じだが、作成後、パーティション情報を見ると、パーティション2にデータの大部分が格納されるように作られてしまっている。
format> partition


PARTITION MENU:
0 - change `0' partition
1 - change `1' partition
2 - change `2' partition
3 - change `3' partition
4 - change `4' partition
5 - change `5' partition
6 - change `6' partition
7 - change `7' partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
! - execute , then return
quit
partition> print
Current partition table (original):
Total disk cylinders available: 60797 + 2 (reserved cylinders)

Part Tag Flag Cylinders Size Blocks
0 unassigned wm 0 0 (0/0/0) 0
1 unassigned wm 0 0 (0/0/0) 0
2 backup wu 0 - 60796 465.73GB (60797/0/0) 976703805
3 unassigned wm 0 0 (0/0/0) 0
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 unassigned wm 0 0 (0/0/0) 0
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 alternates wm 1 - 2 15.69MB (2/0/0) 32130


たぶん、パーティション0に設定することができればそのままresilver(RAIDでいうところのリビルド)が始まると思うのだが、やってくれなかった。

そのため、パーティション0とパーティション2を入れ替える処理を動かして、リビルドさせるよう修正した。
cappmac@opensolaris:‾# zpool replace rpool c9d0s0 c9d0s2
invalid vdev specification
use '-f' to override the following errors:
/dev/dsk/c9d0s2 overlaps with /dev/dsk/c9d0s0


どうもうまくいかない。強制的実行オプションをつけてやれといっているのでやってみる。

cappmac@opensolaris:‾# zpool replace -f rpool c9d0s0 c9d0s2
Please be sure to invoke installgrub(1M) to make 'c9d0s2' bootable.
Make sure to wait until resilver is done before rebooting.


できた。あとは前回と同様にgrubをインストールする。

cappmac@opensolaris:‾# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c9d0s2
raw device must be a root slice (not s2)


また怒られた。
rootパーティションに設定しないとダメみたいだ。なのでパーティション0に設定した。

cappmac@opensolaris:‾# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c9d0s0
stage1 written to partition 0 sector 0 (abs 16065)
stage2 written to partition 0, 273 sectors starting at 50 (abs 16115)


今度はうまくいった。

リビルド進行中は進捗状況が示される。
300GB近くあるので結構かかる。
c0064553_1349459.png


いったん、resilveredされるとあとは通常と同様にミラー化されて運用できる。ためしに今回障害が発生しなかったHDDを抜いたが、特に問題は起きていない。
replaceされる前のパーティションが名称として残っているのが少し気持ち悪いが運用はできているのでとりあえず良しとした。
(修正)と思ったら消えていました。replace後はそのパーティションだけになるようです。
[PR]
by cappuccino_mac | 2011-08-15 12:25 | 雑感 | Comments(0)