お家でSolaris11(x86版)とかいうOSを使って、家庭内SEとして色々なITサービスを提供しています。
嘘です。全てワタクシ専用です。パソコンとかワタクシしか触りません。
システムディスクとは別に準備した、2TB x 3本の大容量DISKを活かした
ファイルサーバとしても利用しており、
日々ゲーム音楽のCDとかと取り込んでは溜め込んでおります。
2TB x 3本でRAID5の4TBなZFSプールとして構成されており・・・
・WD 2TB
・HITACHI 2TB
・ST 2TB
以上のような構成になっています。
タイトルで云ってるとおり、この中の1本が壊れたので交換しましたというエントリです。はい。
昔はまったく情報なかったけど、今はSolaris以外にもZFSが搭載されるから情報が多くてありがたいですね。
異常の発見
600MBくらいのmp3ファイルを一時的に格納したところ、そこからのコピーや移動が全然できない。
サーバからrmコマンドで直接消そうとしたところ、プロンプトが全然帰ってこない。(kill -9でも止まらない)
/var/adm/message を見ると以下のようなログが大量に・・・
Jun 23 12:11:52 TERADRIVE ahci: [ID 693748 kern.warning] WARNING: ahci0: ahci port 2 task_file_status = 0x4051
Jun 23 12:11:52 TERADRIVE ahci: [ID 657156 kern.warning] WARNING: ahci0: error recovery for port 2 succeed
Jun 23 12:11:57 TERADRIVE ahci: [ID 296163 kern.warning] WARNING: ahci0: ahci port 2 has task file error
Jun 23 12:11:57 TERADRIVE ahci: [ID 687168 kern.warning] WARNING: ahci0: ahci port 2 is trying to do error recovery
どうみてもI/O ERROR。port 2ってなんやねん。
しかし、健全性の確認コマンド「 zpool status 」を投入しても特に異常を示す表示はなし。
とりあえず寝ることに。
対象の確認
朝起きてもう一度 zpool status を投入するとDEGRADED表示に!
# zpool status
pool: raidpool
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://www.sun.com/msg/ZFS-8000-9Pscan: scrub repaired 0 in 1h0m with 0 errors on Sat Aug 6 17:24:02 2011
config:
NAME STATE READ WRITE CKSUM
raidpool DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
c3t1d0 ONLINE 0 0 0
c3t2d0 DEGRADED 0 0 20 too many errors
c3t3d0 ONLINE 0 0 0errors: No known data errors
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUMrpool ONLINE 0 0 0
c3t0d0s0 ONLINE 0 0 0
おおー、ちゃんとRAID5が機能してた!
c3t2d0が壊れていますね。
何気にディスク障害を起こすのは初めてです。
そして何より構築時、交換試験してないのでDISK交換も初めてです。
※「scrub」は前にやった名残なので本エントリとは無関係です。
Solarisのディスク名はc0t0d0 みたいな、シリンダ番号、ターゲット番号、ディスク番号を組み合わせた、
分かりやすいんだか、分からないんだか、という表現がされるのですが、
これではWDなのか日立なのか、Seagateなのか分かりませんので、
分かりやすい表示が出る format コマンドを用いて調べます。
# format
Searching for disks…done
AVAILABLE DISK SELECTIONS:
0. c3t0d0 <ATA-OCZ-OCTANE S2-4.13 cyl 9965 alt 2 hd 224 sec 56>
/pci@0,0/pci1734,10e0@1f,2/disk@0,01. c3t1d0 <ATA-WDC WD20EARS-00M-AB51-1.82TB>
/pci@0,0/pci1734,10e0@1f,2/disk@1,02. c3t2d0 <ATA-Hitachi HDS72302-A580-1.82TB>
/pci@0,0/pci1734,10e0@1f,2/disk@2,03. c3t3d0 <ATA-ST2000DL003-9VT1-CC32-1.82TB>
/pci@0,0/pci1734,10e0@1f,2/disk@3,0
Specify disk (enter its number):
上記の結果からc0t2d0に該当するのは3つめの日立のディスクになります。
あ、このコマンドはCntl + Cとか聞かないので、適当にディスク選んでq>qで抜けましょう。
しかし最初に日立が壊れるとは。堅牢なイメージがあったのでびっくりです。
交換
該当のディスクを論理的にOFFLINEにし、プールから切り離します。
# zpool status | grep c3t2d0
c3t2d0 DEGRADED 0 0 20 too many errors
↑DEGRADE状態
# zpool offline raidpool c3t2d0
↑OFFLINE化
# zpool status | grep c3t2d0
c3t2d0 OFFLINE 0 0 20
↑OFFLINEになった
シャットダウンします。
# shutdown -i5 -g0 -y
電源入れっぱなしでも交換できた気がするのですが、
DISK名がズレると面倒なので念のため電源OFF後、交換します。
まかり間違っても、違うDISKを交換しないように。
今回取り出した日立のディスクですが、異常に発熱していました。
聞いたよね、早めの交換。
OS起動
起動してきたら、まずDISKが認識しているかを確認します。
# format
AVAILABLE DISK SELECTIONS:
0. c3t0d0 <ATA-OCZ-OCTANE S2-4.13 cyl 9965 alt 2 hd 224 sec 56>
/pci@0,0/pci1734,10e0@1f,2/disk@0,0
1. c3t1d0 <ATA-WDC WD20EARS-00M-AB51-1.82TB>
/pci@0,0/pci1734,10e0@1f,2/disk@1,0
2. c3t2d0 <ATA-TOSHIBA MD04ACA2-FP2A cyl 60798 alt 2 hd 255 sec 252>
/pci@0,0/pci1734,10e0@1f,2/disk@2,0
3. c3t3d0 <ATA-ST2000DL003-9VT1-CC32-1.82TB>
/pci@0,0/pci1734,10e0@1f,2/disk@3,0
おお、見えてる見えてる。
ここでのDISK名を控えます。(一緒のはず。)
# zpool status
pool: raidpool
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using ‘zpool online’.
see: http://www.sun.com/msg/ZFS-8000-2Q
scan: scrub repaired 0 in 1h0m with 0 errors on Sat Aug 6 17:24:02 2011
config:NAME STATE READ WRITE CKSUM
raidpool DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
c3t1d0 ONLINE 0 0 0
c3t2d0 UNAVAIL 0 0 0 cannot open
c3t3d0 ONLINE 0 0 0
DISKは非活性化されており、UNAVAIL状態になっています。(正常)
つまり、物理的な交換自体は済んでいるのですが、zpool replaceコマンドを投入して、
システムにDISKが交換された旨を通知してあげる必要があります。
zpool onlineはおそらく不要です。
入れたらなんか怒られました。
# zpool online raidpool c3t2d0
: cannot relabel ‘c3t2d0s0’: unable to read disk capacity
warning: device ‘c3t2d0’ onlined, but remains in faulted state
use ‘zpool replace’ to replace devices that are no longer present
「はよreplace入れろボケ」(意訳)
RAIDの再構築
replace [pool名] コマンドを投入し、DISKが交換された旨をシステムに教えてあげます。
# zpool replace raidpool c3t2d0
→ 再構築がスタート
再構築の確認
# zpool status
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 Wed Jun 24 22:39:07 201598.9G scanned out of 1.63T at 19.8M/s, 22h32m to go
33.0G resilvered, 5.92% doneconfig:
NAME STATE READ WRITE CKSUM
raidpool DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
c3t1d0 ONLINE 0 0 0
replacing-1 DEGRADED 0 0 0
c3t2d0/old FAULTED 0 0 0 corrupted data
c3t2d0 ONLINE 0 0 0 (resilvering)
c3t3d0 ONLINE 0 0 0errors: No known data errors
先ほどは「交換しろ」というメッセージでしたが、
replaceコマンド投入後は再構築が実行中の表示になります。
ちなみにRAID5と表現していましたが、本当はZFS上で実装されているRAID5相当の
「RAID-Z」を使用しています。
なんでもRAID5とかと違って「使った分の同期」だけで済むらしく、
再構築が短時間なのだそうです。
再構築完了
無事にRAIDの再構築が完了しました。
pool: raidpool
state: ONLINE
scan: resilvered 557G in 24h29m with 0 errors on Thu Jun 25 23:09:05 2015
config:
NAME STATE READ WRITE CKSUM
raidpool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
c3t1d0 ONLINE 0 0 0
c3t2d0 ONLINE 0 0 0
c3t3d0 ONLINE 0 0 0errors: No known data errors
だいたい丸一日くらいで終わりましたので、結構優秀なスピードだったのではないでしょうか。
スキャン速度:20MB/s