ZFSのディスク入れ替え(Open ZFSの場合)

切ないことにまたディスクにREAD/WRITE ERRORが起きてDEGRADEDになった。家のファイルサーバのRAIDZがDEGRADEDになると不安で夜も眠れない(そんなことはない)ので対応。
とりあえず前回と同様にケーブルつけ外しをしたが同じディスクからエラーが発生して速攻でDEGRADEDに戻ってしまったので、諦めて交換することに。
FAULTEDが出てたディスクが一番エアフローが良くなかったディスクで一番高温に晒されてたからしゃあないかなあと(エアフローはちょっと前に改善したので温度はかなり下がったので再発はしない気がするがまあわからん)。

$ sudo zpool status
  pool: tank
 state: DEGRADED
status: One or more devices are faulted in response to persistent errors.
	Sufficient replicas exist for the pool to continue functioning in a
	degraded state.
action: Replace the faulted device, or use 'zpool clear' to mark the device
	repaired.
  scan: resilvered 25.8G in 00:07:48 with 0 errors on Sat Dec 10 13:22:06 2022
config:

	NAME                                         STATE     READ WRITE CKSUM
	tank                                         DEGRADED     0     0     0
	  raidz1-0                                   DEGRADED     0     0     0
	    ata-ST8000VN0022-2EL112_ZA196HJA         ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA17B2GK         ONLINE       0     0     0
	    ata-ST8000VN004-2M2101_WKD06BMA          ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA196HT7         ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA1960WD         ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA1960VF         FAULTED     20     4     0  too many errors
	cache
	  nvme-INTEL_SSDPEKKW256G8_BTHH81951F1W256B  ONLINE       0     0     0

errors: No known data errors

ディスクを物理的に交換した直後には以下のようになる。

$ sudo zpool status
  pool: tank
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
	invalid.  Sufficient replicas exist for the pool to continue
	functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J
  scan: resilvered 25.8G in 00:07:48 with 0 errors on Sat Dec 10 13:22:06 2022
config:

	NAME                                         STATE     READ WRITE CKSUM
	tank                                         DEGRADED     0     0     0
	  raidz1-0                                   DEGRADED     0     0     0
	    ata-ST8000VN0022-2EL112_ZA196HJA         ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA17B2GK         ONLINE       0     0     0
	    ata-ST8000VN004-2M2101_WKD06BMA          ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA196HT7         ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA1960WD         ONLINE       0     0     0
	    6595942405659626133                      UNAVAIL      0     0     0  was /dev/disk/by-id/ata-ST8000VN0022-2EL112_ZA1960VF
	cache
	  nvme-INTEL_SSDPEKKW256G8_BTHH81951F1W256B  ONLINE       0     0     0

errors: No known data errors

/dev//disk/by-id以下のディレクトリから認識させているので、ディスク交換すると絶対にパスが変わってしまうので、replaceは以下のコマンドで対応する。

$ sudo zpool replace tank 6595942405659626133 ata-ST8000VN004-2M2101_WKD04ZFV

replace後の結果はこれ。

$ sudo zpool status
  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 Sun Dec 11 08:45:41 2022
	819G scanned at 1.46G/s, 1.84G issued at 3.36M/s, 36.9T total
	0B resilvered, 0.00% done, no estimated completion time
config:

	NAME                                         STATE     READ WRITE CKSUM
	tank                                         DEGRADED     0     0     0
	  raidz1-0                                   DEGRADED     0     0     0
	    ata-ST8000VN0022-2EL112_ZA196HJA         ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA17B2GK         ONLINE       0     0     0
	    ata-ST8000VN004-2M2101_WKD06BMA          ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA196HT7         ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA1960WD         ONLINE       0     0     0
	    replacing-5                              DEGRADED     0     0     0
	      6595942405659626133                    UNAVAIL      0     0     0  was /dev/disk/by-id/ata-ST8000VN0022-2EL112_ZA1960VF
	      ata-ST8000VN004-2M2101_WKD04ZFV        ONLINE       0     0     0
	cache
	  nvme-INTEL_SSDPEKKW256G8_BTHH81951F1W256B  ONLINE       0     0     0

errors: No known data errors

最初、異様にresilverが遅くて、嫌な予感がしたけど(ディスクエラーを検知して並列してるっぽいresilverのどれかが止まってるとかでなんか止まる。最初にケーブルだけ直して、zpool clear tankで誤魔化したときはそうだった)、少し待ったら復活した。

ちなみに、全然関係ないのだけど、lm-sensorsをインストールして、ちゃんとMBをsensors-detectで認識させておくと、適切なファイル(例えば、nct6775の場合は、/sys/class/hwmon/hwmon(¥d+)/pwm(¥d+)_auto_point(¥d+)_pwm(¥d+)_(pwm|temp) )の内容をちょこちょこいじるとBIOS画面通さなくてもMBのPWMファンの回転数の設定を変えられるので便利(サーバ用だと画面つながってないのでBIOS画面出すのが手間だから)。
この設定をいじって異様に低い回転数になってたHDD側のファンを少し早く回すようにしたので10℃くらい温度を下げることに成功。単に回転数をちょこっと上げるだけなら、fancontrol要らない。