長らくFreeBSDのZFSでファイルサーバは運用しているのだけど,RAIDを運用している場必ず発生するディスク異常と,それに伴うディスク交換で,とりあえず落ち着いたけど嵌りそうになったので,備忘録。
環境は以下
$uname -a FreeBSD copper 12.1-STABLE FreeBSD 12.1-STABLE r353437 NO_DEBUG amd64
構成は基本的には現行ファイルサーバのパフォーマンス - smectic-g’s blogの記事のとおりなんだけど,ディスクのみSeagateのIronWolf 8TB(ST8000VN0022-2EL)に交換してある。8TB*6diskという今思うとかなりリスク高めの構成。
2020-1-12 23:00
200GBのファイルをコピーしようとしたら,妙に遅いので,zpool statusを見ていたらDegradedしていることを発見。
毎日0500時にzpool statusの結果はメールさせてたのだけど,1/12のそのタイミングでは異常がなかったので,幸いかなり発見は速かったっぽい。
diskid/DISK-ZA196HVLでエラー発生。一部のディスクがdiskidじゃない形態でマウントされているのは,なんかよくわからないけど最初の段階で登録していたdiskidが吹っ飛んだため。
NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 diskid/DISK-ZA196HJA ONLINE 0 0 0 diskid/DISK-ZA17B2GK ONLINE 0 0 0 diskid/DISK-ZA196HVL FAULTED 2 2.51K 0 too many errors da3 ONLINE 0 0 0 diskid/DISK-ZA1960WD ONLINE 0 0 0 da1 ONLINE 0 0 0
2020-1-12 23:20
当該ドライブをofflineにして,ファイルサーバをシャットダウン。
2020-1-13 11:00
秋葉原に行って,ディスク(Seagate IronWolf 8TB ST8000VN004-2M21)を購入。
今入っている玉は全く同じ時期に購入したHDDだったので,resilver中にトラブったらやだなと2台購入したんだけど,冷静に考えればresilver中に残りがトラブったら予備が何台あろうとデータ吹っ飛ぶから関係ない。アホ。
2020-1-13 12:05 当該ドライブ(ZA196HVL)を物理的に交換。
なんかケーブルのあたりがねじれていて,HDD自体ではなくケーブルの問題では?という気もよぎる。
2020-1-13 12:21
交換後の初起動
交換したドライブはシステムからは無事認識されてるけど,イマイチzfsからは認識されていない。
抜いた方のドライブはunavailableだけどuuid名で認識されてて,不思議な感じ。
$ zpool status pool: tank 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://illumos.org/msg/ZFS-8000-2Q scan: resilvered 8.94G in 0 days 00:01:48 with 0 errors on Sat Oct 12 14:42:43 2019 config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 diskid/DISK-ZA196HJA ONLINE 0 0 0 diskid/DISK-ZA17B2GK ONLINE 0 0 0 9841001617872436185 UNAVAIL 0 0 0 was /dev/diskid/DISK-ZA196HVL da3 ONLINE 0 0 0 diskid/DISK-ZA1960WD ONLINE 0 0 0 da1 ONLINE 0 0 0 errors: No known data errors
以下みたいな感じでraidzを復旧させようとしても上手く行かない。
$ zpool online tank
よくわからないけど,とりあえず,
$ sudo gpart create -s gpt /dev/da5 $ sudo glabel label DISK-WKD06BMA /dev/da5
ってな感じで,同じようにSNをディスクラベルにつけておく。
2020-1-13 12:53
色々眺めた結果,disk labelでzfs poolを構成していると,違うuuidをもつディスクは違うディスク扱いになるので,同じポートに差し込んでも明示的にzpool replaceしないと上手く行かないことが判明。
以下のようなコマンドを打ち込んでなんとかする。(多分,前半は元々のdiskidでも行けるかもしれないけど,幽霊のように認識されているuuidを正確に打ち込んだほうが楽そう)
sudo zpool replace tank 9841001617872436185 /dev/diskid/DISK-WKD06BMA
resilverに半日〜1日くらい必要。(最初23日くらい必要とか言われて頭を抱えたが,最終的に半日くらいに落ち着く)
pool: tank 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 Jan 13 12:50:24 2020 2.87T scanned at 1.34G/s, 1.80T issued at 862M/s, 32.9T total 307G resilvered, 5.47% done, 0 days 10:30:03 to go config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 diskid/DISK-ZA196HJA ONLINE 0 0 0 diskid/DISK-ZA17B2GK ONLINE 0 0 0 replacing-2 UNAVAIL 0 0 0 9841001617872436185 UNAVAIL 0 0 0 was /dev/diskid/DISK-ZA196HVL diskid/DISK-WKD06BMA ONLINE 0 0 0 da3 ONLINE 0 0 0 diskid/DISK-ZA1960WD ONLINE 0 0 0 da1 ONLINE 0 0 0 errors: No known data errors
2020-1-14 0:23
終わった。
pool: tank state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(7) for details. scan: resilvered 5.48T in 0 days 11:31:41 with 0 errors on Tue Jan 14 00:22:05 2020 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 diskid/DISK-ZA196HJA ONLINE 0 0 0 diskid/DISK-ZA17B2GK ONLINE 0 0 0 diskid/DISK-WKD06BMA ONLINE 0 0 0 da3 ONLINE 0 0 0 diskid/DISK-ZA1960WD ONLINE 0 0 0 da1 ONLINE 0 0 0 errors: No known data errors
追記
diskid表示になっていないディスクがあるのか気持ち悪かったので修復した。
まずは,/dev/diskid以下に表示されるようにゴニョゴニョする。
どうも,glabel label
sudo glabel create DISK-ZA196HT7 /dev/da3
glabel listできちんと表示されていることを確認して,rebootすると,/dev/diskid以下に所望のディスクが全部出てくるはず。
その状態で,
sudo zpool import -d /dev/diskid/ tank
を実施すると,以下のようにきちんと全部がdiskidでインポートされる。
pool: tank state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(7) for details. scan: resilvered 5.48T in 0 days 11:31:41 with 0 errors on Tue Jan 14 00:22:05 2020 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 diskid/DISK-ZA196HJA ONLINE 0 0 0 diskid/DISK-ZA17B2GK ONLINE 0 0 0 diskid/DISK-WKD06BMA ONLINE 0 0 0 diskid/DISK-ZA196HT7 ONLINE 0 0 0 diskid/DISK-ZA1960WD ONLINE 0 0 0 diskid/DISK-ZA1960VF ONLINE 0 0 0 errors: No known data errors