ZFSのディスク入れ替え

また、8TB*6のRAIDZのディスクが死んでしまった。切ない。

手順としてはZFSのディスク入れ替え - smectic-g’s blogと同様。

まずはdegaredになった状況

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: scrub repaired 0B in 14:31:37 with 0 errors on Sun Feb 11 14:55:38 2024
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-ST8000VN004-2M2101_WSD9LC9T ONLINE 0 0 0
ata-ST8000VN004-2M2101_WKD04ZFV FAULTED 18 0 0 too many errors
cache
nvme-INTEL_SSDPEKKW256G8_BTHH81951F1W256B ONLINE 0 0 0

errors: No known data errors

エラーになっているWKD004ZFVはZFSのディスク入れ替え(Open ZFSの場合) - smectic-g’s blogで交換したディスク。
導入当初(2014/7月)から元気に動いてるディスクもまだ残っていることを考えると、こういうのは本当に確率なんだなとよく分かる。

$ sudo dd if=/dev/zero of=/dev/disk/by-id/ata-ST8000VN004-2M2101_WSDA0PQX bs=1G count=1
$ sudo fdisk /dev/disk/by-id/ata-ST8000VN004-2M2101_WSDA0PQX
$ sudo zpool replace tank 8018796220637990350 ata-ST8000VN004-2M2101_WSDA0PQX

途中のfdiskではg+wでGPTのパーティションテーブルだけ作る。

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 Mar 3 18:59:06 2024
2.68T scanned at 3.10G/s, 658G issued at 761M/s, 41.3T total
104G resilvered, 1.56% done, 15:32:44 to go
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-ST8000VN004-2M2101_WSD9LC9T ONLINE 0 0 0
replacing-5 DEGRADED 0 0 0
8018796220637990350 UNAVAIL 0 0 0 was /dev/disk/by-id/ata-ST8000VN004-2M2101_WKD04ZFV-part1
ata-ST8000VN004-2M2101_WSDA0PQX ONLINE 0 0 0 (resilvering)
cache
nvme-INTEL_SSDPEKKW256G8_BTHH81951F1W256B ONLINE 0 0 0

errors: No known data errors

resilver完了まで祈るのみ

ZFSのディスク入れ替え

また別のディスクが死ぬ。もう全体的にディスクが寿命なのかもしれない。
1回はSATAケーブルをクニュクニュして指し直したら直ったのでまあ気のせいかなとなったのだけど、怪しいなあとzpool scrubをかけたら、すぐに同じディスクが今度はCKSUMエラーを吐いてDEGRADEDになってたので、もうだめだとなる。

zpool scrub直後でまた死んだ時のエラー画面

  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: scrub repaired 2.22M in 14:41:53 with 0 errors on Sat Apr 15 02:00:55 2023
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         FAULTED     84     0     4  too many errors
	    ata-ST8000VN004-2M2101_WKD04ZFV          ONLINE       0     0     0
	cache
	  nvme-INTEL_SSDPEKKW256G8_BTHH81951F1W256B  ONLINE       0     0     0

新しいディスクに入れ替えた直後の画面。by-idのlabelで認識させているので当然再認識は自動ではされない。

  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: scrub repaired 2.22M in 14:41:53 with 0 errors on Sat Apr 15 02:00:55 2023
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
	    12282997723599972799                     UNAVAIL      0     0     0  was /dev/disk/by-id/ata-ST8000VN0022-2EL112_ZA1960WD
	    ata-ST8000VN004-2M2101_WKD04ZFV          ONLINE       0     0     0
	cache
	  nvme-INTEL_SSDPEKKW256G8_BTHH81951F1W256B  ONLINE       0     0     0

これから、以下のコマンドを実行してZFS poolに認識させる。一つ前のディスク交換のときにうっかり変なパーティションを残したまま接続させてしまって痛い目を見たので厳重に消しておく。(一度zpoolに取り込まれると、消そうがなんだろうがもとのパーティションを再生してしまうので絶対に直せなくなる)

dd if=/dev/zero of=/dev/disk/by-id/{new_disk_id} bs=1G count=1
fdisk /dev/disk/by-id/{new_disk_id}
# 中でg→wを押してgpt partation tableだけを作成する
sudo zpool replace tank 12282997723599972799 {new_disk_id}

認識させた直後の画面。resliverが自動で走る。だいたい完了までに1.5日くらいかかる(Seagate IronWolf 8TB)

  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 Sat Apr 15 08:59:53 2023
	977M scanned at 140M/s, 17.7M issued at 2.53M/s, 39.7T 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
	    replacing-4                              DEGRADED     0     0     0
	      12282997723599972799                   UNAVAIL      0     0     0  was /dev/disk/by-id/ata-ST8000VN0022-2EL112_ZA1960WD
	      ata-ST8000VN004-2M2101_WSD9LC9T        ONLINE       0     0     0
	    ata-ST8000VN004-2M2101_WKD04ZFV          ONLINE       0     0     0
	cache
	  nvme-INTEL_SSDPEKKW256G8_BTHH81951F1W256B  ONLINE       0     0     0

errors: No known data errors

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要らない。

OpenZFSへの移行とディスクトラブル

OpenZFSへの移行(方針と予備検討) - smectic-g’s blogで話した内容の詳細。

ハードウェア

HDD、HBA、ケースは続投で、MB, CPUその他を交換(2021-12-23)してファイルサーバとしてまず移行。
その後録画用PCを2022-01-10に移行。
ブログをタイムリーに更新できなかったので、OSのバージョンは2022-08-26現在。

【CPU】Core i5-10400
【M/B】Asrock H470M Pro4
【RAM】DDR4 16GBx2(CFD W4U2666CM-16GR)
【VGAintel 内蔵
【HDD】Samsung MZ-V8V1T0B/IT 1TB, Seagate IronWolf ST8000VN0022*6
【光学】無し
【LAN】MB内蔵(intelチップ)
【その他カード】アースソフト PT3
【HBA】LSI SAS 9207-8i 
【電源】FD-PSU-ION-SFX-500G-BK
【OS】Debian/GNU Linux Bullseye 11.4 (5.10.0-17-amd64)
【ケース】fractal design Node 804

HDDと電源の間のクリアランスが厳しくてケーブルにストレスが掛かってるという問題が合ったので、電源をSFXに変えて隙間を増やしてみた(が、結局同じディスクでトラブルが発生したので頭痛い)
現行ファイルサーバのパフォーマンス - smectic-g’s blog

ZFS関連

以下のマニュアルにある自動でマウントする関係の設定は全部入れたのだけど,再起動するとプールが自動で再マウントされない。
ZFS - ArchWiki
手動で以下のコマンドで再認識させると,sdbが見当たらないとかエラーが出る。とりあえず,
/etc/zfs/zpool.cacheへの登録はうまく動いているらしい。

sudo systemctl start zfs-import-cache.service

FreeBSDの方では,ある程度固有のidで認識された形でプールに登録できてたんだけど,linuxでインポートし直したときに,/dev/sd[a-f]としてしか認識されなかったのが問題らしい。/dev/sd[a-f]は認識順でどう割り振られるかがランダムなので,起動ごとに変わるからおかしいってなるらしい。

とりあえず,以下の記事を参考に,
ALL about Linux: ZFS on Linux の vdev_id

sudo zpool import -d /dev/disk/by-id/ tank

として,なんかしらドライブに固有のidでimportさせてあげると解消した。

ディスクトラブル

  • 2022-08-21 エラー数8件で早朝の定期メールでアラート
  • 2022-08-22 エラー数16件でFAULTEDとして問題のあるディスクを切り離し。
  • 2022-08-26にディスクが切り離されていることを発見。前回(ZFSのディスク交換の備忘録 - smectic-g’s blog)と同じディスクが切り離されていたので、ケーブルの問題と判断。とりあえずケーブルを付けたり外したりして戻す。その後再起動すると、自動でresilverされて終了(5分)。zpool clearは必要なかった。

エラーの状況(2022-08-26朝)

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: scrub repaired 0B in 13:15:56 with 0 errors on Sun Aug 14 13:39:58 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   FAULTED     18     0     0  too many errors
	    ata-ST8000VN0022-2EL112_ZA196HT7  ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA1960WD  ONLINE       0     0     0
	    ata-ST8000VN0022-2EL112_ZA1960VF  ONLINE       0     0     0

errors: No known data errors

OpenZFSへの移行(方針と予備検討)

録画PC(Debian Stretch + Mirakurun + Chinachu)と,ファイルサーバ(FreeBSD + ZFS + Samba)を別々に運用してきたんだけど,冷静に考えて2つのサーバをそれぞれ使うのってきついよなというか,私生活の時間的な余裕が諸事情で少なくなって,2つのOSのメンテをするのが精神的にきつくなってきた。

録画PCはどっちにしろDebianベースになるしかないが,HDDを買い直して色々するのは負担が重いので,今FreeBSDでマウントしているZFSのプールをそのままexportして,DebianのOpenZFSでimportすればそのまますっと移行できるんじゃないかという目論見を立てる。夏頃にマザーボード,CPU,メモリ,NVMe SSDだけは購入したんだけど,全然作業出来てなかったが,ボチボチ作業開始。

とりあえずわかったことを備忘録的にまとめる。

  1. Debian Stretchに普通にOpenZFSを入れると,com.delphix:spacemap_v2に対応していないと言われて,read onlyでのマウントしか出来ない。
  2. 慌ててDebianのバージョンをあげるが,Busterだと同様にNG。com.delphix:spacemap_v2に対応させるには,Bullseyeまで上げる必要がある。
  3. stretchからbullseyeまであげると,
    1. 何故か頻繁に落ちるようになる(調べたらスリープしてるだけだったので,/etc/systemd/sleep.confをいじってAllowSuspendとかその手の設定を全部noにする。どうして勝手にスリープするように設定が変わるのか謎すぎる)
    2. /etc/systemd/network/以下でDHCPにしていたのだけど,何故かネットワークの接続がおかしくなる(どうもGnomeのネットワーク設定で上書きしたらしく(そちらは固定IP運用),久しぶりにディスプレイ,キーボード,マウスをつないで,GUIから設定を直す羽目に。どうしてこういう面白いことになるのか小一時間問い詰めたい
  4. node.jsのインストールにnを使ってた事をすっかり忘れて,最新版(16.x)を入れても絶対にバージョンが10.16から上がらないから,Mirakurunの最新版が入らないと右往左往してた。nを削除して対応。

M1 macでrsyncをすると何故か落ちる

とりあえず備忘録的なメモ
rsyncでUSB HDD or USB SSDから,sambaでつないだネットワークディスクにrsyncでtimestamp付きでバックアップを取る(rsync -rltv)と,30分くらいするとkernel panicを起こして勝手に再起動する現象が頻発して困っている。
ログが文字化けするのでMacPortsrsyncを使っていたのだが,文字化けを諦めて,標準のrsyncでやってみると意外と普通に動くのでrsync側の問題?と頭を抱えている。なんかわかったら追記する。

MacPortsで入れた方のrsync → 30分くらい全力で動かすとkernelがpanicして落ちる。

> /opt/local/bin/rsync
rsync  version 3.2.3  protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, no atimes,
    batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
    symtimes, no prealloc, stop-at, crtimes, file-flags
Optimizations:
    no SIMD, no asm, openssl-crypto
Checksum list:
    xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
    zstd lz4 zlibx zlib none

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

標準で入っている方のrsync → 落ちないが,-vで日本語ファイル名が化けるので辛い。(12時間ほど動かしっぱなしで確かに落ちなかったので落ちないんだと思う)

> /usr/bin/rsync --version
rsync  version 2.6.9  protocol version 29
Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.
http://rsync.samba.org/
Capabilities: 64-bit files, socketpairs, hard links, symlinks, batchfiles,
              inplace, IPv6, 64-bit system inums, 64-bit internal inums

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.


Mac

>sw_vers
ProductName:	macOS
ProductVersion:	11.2.3
BuildVersion:	20D91n

>system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: MacBook Air
      Model Identifier: MacBookAir10,1
      Chip: Apple M1
      Total Number of Cores: 8 (4 performance and 4 efficiency)
      Memory: 16 GB
      System Firmware Version: 6723.81.1
      Serial Number (system): FVFDT1GCQ6LR
      Hardware UUID: 2DFC2375-E077-5F0A-BBF1-627C106F8CE1
      Provisioning UDID: 00008103-001C516102E2001E
      Activation Lock Status: Disabled

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