ZFSのディスク交換の備忘録

長らくFreeBSDZFSでファイルサーバは運用しているのだけど,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 /dev/daXだとダメらしく,以下にすると上手くいく。

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