- WD RED 4TB X5、パリティ一発の構成
- メンバディスクは2014年頃に購入してからこれまでは安定
- たびたび自宅のブレーカー断 が発生。その仮定でディスクに損傷がおきている可能性はありそう
- ESXi に SATA ポート経由で接続し、 RAW デバイスマッピングを介して OpenIndiana VM に接続
はじめに現れた症状
VMware 上の OpenIndiana で動く ZFS ストレージをその ESXi 自体で NFS データストアとしてマウントしているが、そこで動く BIND が落ちて自宅のネットワークが不調になった。原因なんだろうなーと思ったが、どうやら ZFS アレイのデグレが原因の模様。root@vm230:~# zpool status pool: array3 state: DEGRADED status: One or more devices has experienced an unrecoverable error. An attempt was made to correct the error. Applications are unaffected. action: Determine if the device needs to be replaced, and clear the errors using 'zpool clear' or replace the device with 'zpool replace'. see: http://illumos.org/msg/ZFS-8000-9P scan: scrub repaired 523M in 22h40m with 0 errors on Sun Feb 14 07:48:45 2016 config: NAME STATE READ WRITE CKSUM array3 DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 c3t1d0 ONLINE 0 0 0 c3t5d0 ONLINE 0 0 0 c3t4d0 DEGRADED 0 0 8.15K too many errors c3t2d0 ONLINE 0 0 0 c3t3d0 DEGRADED 0 0 1.36K too many errors logs c3t8d0 ONLINE 0 0 0 cache c3t9d0 ONLINE 0 0 0
Feb 16 10:26:55 vm230 scsi: [ID 107833 kern.warning] WARNING: /pci@0,0/pci15ad,1976@10/sd@3,0 (sd4): Feb 16 10:26:55 vm230 disk not responding to selection
この状態における zpool scrub の必要性
色々試してみてわかったんだけど、ディスクを交換するつもりなら事前に scrub する必要はなかった。まず、DEGRADED となっているメンバはドライブ障害が発生している旨フラグが立っているものの、まだ ZFS が見捨てたわけではなく、稼働中だということを示している。ここが UNAVAIL もしくは REMOVED だとドライブがそもそも応答しないかパス障害になっているので、もうひとつドライブが見えなくなった時点でこの ZFS プールはオフラインになるだろう。だが今回は DEGRADED ステートになりつつも、障害が起きているドライブ2台はまだ辛うじてオンラインのまま。
ここで zpool scrub を行えばアレイ全体を検査と自動修復を行えるけども、のちに実行する zpool replace コマンド中でも事実上スクラブ相当の処理が行われる。一時的にディスクが UNAVAIL になったためアレイセットのなかで置いて行かれた状態などであれば scrub する意味があるだろうけど、今回は辛うじて全ドライブがオンラインのままだし、ディスク交換前に scrub を繰り返してとどめを刺しても仕方ないので、結果論としてスクラブを試す強い理由はなかった。せいぜいディスクのエラーカウンタをリセットした後にスクラブしてみて不良かを再判断できる程度。
交換用ディスクを調達、 VM に接続
今回は東芝製MD04ACA6 (6TB)をメンバディスクとして使ってみる。RAID-Zなので不具合が出たディスクだけ6TBのディスクにしなくとも、4TB前後で十分なのだが、これから数年後に4TBクラスのディスクが大量に転がっているのは避けたいし。 先の zpool status の状況からディスク2台に障害がおきていると想定し、交換用のディスクは2台準備した。問題のディスクは SUPERMICRO 社製 X9SRA の SATA ポートに接続されている。残念ながら SATA ポート自体は ZFS プールのメンバ群などで埋まっているので、相手いる SAS ポートに今回用意した SATA ディスクを接続して復旧作業を進める。(一般的にSASポートはSATAディスクも扱える)
横着だがマシンが稼働した状態のまま SATA ケーブルでシステムボードの SAS ポートとMD04ACA6を接続し、SATA電源ケーブルを慎重にプラグし活性接続。ディスクトラブルが起きているときはマシンの電源を切りたくないし、可能ならマウント(インポート)している仮想マシンの電源も落としたくない。 vSphere Client を介して VMware ESXi に対しストレージのリスキャンをかけると接続したディスクが認識されていたので ESXi の再起動なしに先に進めそう。
ESXi 上で ls -l /vmfs/devices/ を実行してみると、新しく接続したディスクが naa.50000396aba018c8 として認識されていたので、このディスクを RAW マッピングする VMDK ファイルを生成する。
/vmfs/volumes/(snip)/vm230b # vmkfstools -z \ /vmfs/devices/disks/naa.50000396aba018c8 \ array3f_50000396aba018c8.vmdk残念ながら仮想マシンを止めないと OpenIndiana に対して仮想ディスクを追加できない(と思う)。 ZFS プールは DEGRADED 状態だがメンバが足りていないわけではないし、仮想マシンを起動しなおした時点で今みえている仮想ディスクが見えなくなることも考えづらい。 DEGRADED 状態でも辛うじて I/O はできているようなので、なんとかなるだろうと判断(でもこわい。慎重を期すならここで別のファイルシステムにバックアップをとったほうがいい)。再起動後もきちんと戻ってくると信じて VM シャットダウン、仮想ディスクを追加して OI 再起動。
root@vm230:~# format Searching for disks...done c3t6d0: configured with capacity of 5589.03GB AVAILABLE DISK SELECTIONS: 0. c3t0d0 <VMware-Virtualdisk-1.0 cyl 2085 alt 2 hd 255 sec 63> /pci@0,0/pci15ad,1976@10/sd@0,0 1. c3t1d0 <VMware-Virtual disk-1.0-3.64TB> /pci@0,0/pci15ad,1976@10/sd@1,0 2. c3t2d0 <VMware-Virtual disk-1.0-3.64TB> /pci@0,0/pci15ad,1976@10/sd@2,0 3. c3t3d0 <VMware-Virtual disk-1.0-3.64TB> /pci@0,0/pci15ad,1976@10/sd@3,0 4. c3t4d0 <VMware-Virtual disk-1.0-3.64TB> /pci@0,0/pci15ad,1976@10/sd@4,0 5. c3t5d0 <VMware-Virtual disk-1.0-3.64TB> /pci@0,0/pci15ad,1976@10/sd@5,0 6. c3t6d0 <ATA-TOSHIBA MD04ACA6-FS2A-5.46TB> /pci@0,0/pci15ad,1976@10/sd@6,0 7. c3t8d0 <VMware-Virtual disk-1.0-1.00GB> /pci@0,0/pci15ad,1976@10/sd@8,0 8. c3t9d0 <VMware-Virtual disk-1.0-200.00GB> /pci@0,0/pci15ad,1976@10/sd@9,0
新しく接続したディスクは c3t6d0 として認識されている。なお、仮想ディスクの構成はこうなっていた(ずっと前に適当に構築したので完全に忘れていた)
- c3t0d0 (SCSi 0:0): OSイメージ
- c3t1d0 (SCSi 0:1): データ用ZFSプールのメンバディスク 1
- c3t2d0 (SCSi 0:2): データ用ZFSプールのメンバディスク 2
- c3t3d0 (SCSi 0:3): データ用ZFSプールのメンバディスク 3 (エラーが発生)
- c3t4d0 (SCSi 0:4): データ用ZFSプールのメンバディスク 4 (エラーが多く発生)
- c3t5d0 (SCSi 0:5): データ用ZFSプールのメンバディスク 5
- c3t8d0 (SCSi 0:8): データ用ZFSプールのslog
- c3t9d0 (SCSi 0:9): データ用ZFSプールのL2ARC
- c3t6d0 (SCSi 0:6): データ用ZFSプールの交換用メンバデバイス
いざリプレース
zpool replace でエラーが多数発生しているメンバディスクを新ディスクに置き換える。root@vm230:~# zpool replace array3 c3t4d0 c3t6d0 root@vm230:~# zpool status pool: array3 state: DEGRADED status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Mon Feb 15 06:14:01 2016 51.9M scanned out of 17.4T at 5.76M/s, (scan is slow, no estimated time) 9.94M resilvered, 0.00% done config: NAME STATE READ WRITE CKSUM array3 DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 c3t1d0 ONLINE 0 0 0 c3t5d0 ONLINE 0 0 0 replacing-2 DEGRADED 0 0 0 c3t4d0 DEGRADED 0 0 0 too many errors c3t6d0 ONLINE 0 0 0 (resilvering) c3t2d0 ONLINE 0 0 0 c3t3d0 DEGRADED 0 0 0 too many errors logs c3t8d0 ONLINE 0 0 0 cache c3t9d0 ONLINE 0 0 0 errors: No known data errors
約21時間後に zpool replace が完了。死んだディスクをリプレースしたディスクで置き換えたが、現在接続されている SAS ポートから SATA ポートへ新ディスクを移動させると VMware の RAW マッピングがきれる事が想定される。このため一度 zpool export した状態で VM を停止する。
SAS ポートに接続していた新ドライブを死んだドライブの位置に移動し ESXi でデバイススキャンをかけると vmfs/devices/disks/t10.ATA_____TOSHIBA_MD04ACA600__(snip)Y5C7K3SERIAL というパスで認識された。やっぱりパスが変わった。SERIAL の部分は実際にはディスクのシリアル番号が入っている。先に作成した RAW デバイスマッピングを削除して作り直し。
# rm array3f_50000396aba018c8* # vmkfstools -z \ /vmfs/devices/disks/t10.ATA_____TOSHIBA_MD04ACA600__(snip)Y5C7K3SERIAL \ array3f_Y5C7K3SERIAL.vmdk
仮想マシンの構成変更。リプレースされて不要になった c3td40 = SCSI 0:4 およびパスが変わってしまった c3t6d0 = SCSI0:6 を VM から削除。新たに作成した array3f_Y5C7K3SERIAL.vmdk を SCSI 0:4 として追加。
VM を起動し zpool import array3 する。これで1台目の重傷ドライブが交換完了となりアレイのステータスは ONLINE に。
ただ、重傷だったオリジナルの c3t4d0 のほかに c3t3d0 でもエラーが出ていた。
重傷ドライブのせいで同時にデグレったかのように見えたのかも??と思いつつも、とりあえず軽傷なほうも zpool replace してみることにする。やることはさっきと同じ。 SAS ポートに次のドライブを接続して RAW デバイスマッピングを作成し、 SCSI 0:6 として追加して、 zpool replace で c3t3d0 から置き換える。
しばらくは順調だったけども、 resilver が 20% 越えたあたりからチェックサムエラーが出たり dmesg に下記メッセージがでたので、このディスクもやっぱりハードウェアレベルで異常があることは間違いなさそう。
Feb 16 10:26:55 vm230 scsi: [ID 107833 kern.warning] WARNING: /pci@0,0/pci15ad,1976@10/sd@3,0 (sd4): Feb 16 10:26:55 vm230 disk not responding to selection
24時間もたてば replace は終わっているだろう。そうしたらいったん zpool export して VM を落としておき、古い c3t3d0 を取り外して、 SAS ポートに接続されている新ディスクを c3t3d0 として改めて追加し zpool import しなおせばディスク交換終了の見込み。
0 件のコメント:
コメントを投稿