サーバ(Solaris11)のDISKが壊れた!!!

お家で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-9P

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  DEGRADED     0     0    20  too many errors
c3t3d0  ONLINE       0     0     0

errors: No known data errors
pool: rpool
state: ONLINE
scan: none requested
config:
NAME        STATE     READ WRITE CKSUM

rpool       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,0

1. c3t1d0 <ATA-WDC WD20EARS-00M-AB51-1.82TB>
/pci@0,0/pci1734,10e0@1f,2/disk@1,0

2. c3t2d0 <ATA-Hitachi HDS72302-A580-1.82TB>
/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
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 2015

98.9G scanned out of 1.63T at 19.8M/s, 22h32m to go
33.0G resilvered, 5.92% done

config:
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     0

errors: 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     0

errors: No known data errors

だいたい丸一日くらいで終わりましたので、結構優秀なスピードだったのではないでしょうか。
スキャン速度:20MB/s

Comments are closed.