ZFS で初めて HDD 障害に出くわし、その対処したメモ

# ZFS それって美味しいの🤔
兼ねてから HDD が不穏は動きをしていたが、気が付いたら小人さんの手による detached されていたので、google 先生に聞きながら再構築をした記録である。
# 対象
FreeBSD のデーモン使いで、MBR も GPT も GEOM でエイヤッって出来る人🤫
# ざっくり状況説明を
当該 HDD は何時の世代のか判らんぐらいご老体の
**`SEAGATE ST3250310NS`**
コイツが /dev/ada1 /dev/pass1 で OS 上からは認識されていたのだが、如何せん寄せ集めででっち上げたテスト環境じゃけ、費用は最小限に留めたい思いで、廃 PC からの寄せ集めって事。
価格.com じゃとこの HDD 初回登録日が 2008 年 7 且 7 日と凡そ 24 年前の七夕なんと💦
hostname は NEC 製の `N8100-2488Y`
ZFS のプール名は `ZFS`
構成は HDD 4 台で `raidz1`
HDD は取替前は以下の通り
```text:どれもこれも産廃レヴェル✌
ada0: <Maxtor 6B250S0 BANC1BM0> ATA-7 SATA 1.x device
ada1: <ST3250310NS SN06> ATA-7 SATA 1.x device
ada2: <Hitachi HDP725025GLA380 GM2OA52A> ATA8-ACS SATA 2.x device
ada3: <Hitachi HDT725025VLA380 V5DOA52A> ATA-7 SATA 2.x device
```
# では幕開け
余談はこのぐらいにして、構築して程なく次のメッセージが syslog に現れてきだした。
```text:smatrd の出力
Jul  2 00:29:13 N8100-2488Y smartd[1352]: Device: /dev/ada1, 9 Currently unreadable (pending) sectors
Jul  2 00:29:13 N8100-2488Y smartd[1352]: Device: /dev/ada1, 9 Offline uncorrectable sectors
```
コイツの出力とほぼ同時期から HDD 躯体からも異音がし始める。→この時点で交換しろよって突っ込みは右から左に受け流す✌

程なく 3 日後には「イイ」感じのメッセージが出始めた💦
```text:kernel の悲鳴
Jul  5 07:52:13 N8100-2488Y kernel: (ada1:ahcich1:0:0:0): READ_FPDMA_QUEUED. ACB: 60 01 db 03 10 40 00 00 00 00 00 00
Jul  5 07:52:13 N8100-2488Y kernel: (ada1:ahcich1:0:0:0): CAM status: Auto-Sense Retrieval Failed
Jul  5 07:52:13 N8100-2488Y kernel: (ada1:ahcich1:0:0:0): Error 5, Unretryable error
Jul  5 07:52:13 N8100-2488Y kernel: (ada1:ahcich1:0:0:0): WRITE_FPDMA_QUEUED. ACB: 61 06 e0 56 88 40 06 00 00 00 00 00
Jul  5 07:52:13 N8100-2488Y kernel: (ada1:ahcich1:0:0:0): CAM status: Auto-Sense Retrieval Failed
Jul  5 07:52:13 N8100-2488Y kernel: (ada1:ahcich1:0:0:0): Error 5, Unretryable error
```
[♪ガッツだぜ!!／ウルフルズ](https://youtu.be/ATU0gXzMsLw "よーつべなリンクw")の歌詞で替え歌を思いつく状況w
「読めない書けない、出来そうもない」ガッツだぜぇ～

ZFS も饒舌に語りだす始末✌
```text:devd が ZFS の苦情を受け止めてくれていた😿
Jul  5 07:52:13 N8100-2488Y devd[782]: Processing event '!system=ZFS subsystem=ZFS type=ereport.fs.zfs.io  class=ereport.fs.zfs.io ena=7775126908043264001 pool=ZFS pool_guid=6277837498995304236 pool_state=0 pool_context=0 pool_failmode=wait vdev_guid=5217777784400537384 vdev_type=disk vdev_path=/dev/ada1p4 vdev_ashift=9 vdev_complete_ts=1274052334028321 vdev_delta_ts=256078 vdev_read_errors=0 vdev_write_errors=0 vdev_cksum_errors=0 vdev_delays=0 parent_guid=656513824515157060 parent_type=raidz vdev_spare_guids= zio_err=5 zio_flags=721089 zio_stage=33554432 zio_pipeline=34603008 zio_delay=255405 zio_timestamp=1274052333772243 zio_delta=256078 zio_priority=0 zio_offset=270336 zio_size=8192 time=00000017201335330000000087057673 eid=2'
```
この時点でも、まだ HDD を交換しようとせず、なにやら小人さんがデタッチ操作した模様。
```text:ワシがした記憶が無い
Jul  5 08:21:28 N8100-2488Y kernel: ada1 at ahcich1 bus 0 scbus1 target 0 lun 0
Jul  5 08:21:28 N8100-2488Y kernel: ada1: <ST3250310NS SN06> s/n 9SF02GMB detached
Jul  5 08:21:28 N8100-2488Y kernel: (ada1:ahcich1:0:0:0): Periph destroyed
```
# 本格的なプロの仕上がり(大嘘)
detach と切り離されているので仕方なく、数日後に母艦を強制停止(電源ブチィ～)を断腸の思いで決行(大袈裟)

当該 HDD を抜き出す→御代わりと差替える。
復電→どきどき、わくわく
```text:smartd は新しい HDD を認識した!(♪ドラクエのファンファーレ)
Jul  8 22:41:35 N8100-2488Y smartd[1625]: Device: /dev/ada1, opened
Jul  8 22:41:35 N8100-2488Y smartd[1625]: Device: /dev/ada1, WDC WD2500AAKX-75U6AA0, S/N:WD-WCC2F00*****, WWN:5-0014ee-**1d**d*7, FW:19.01H19, 250 GB
Jul  8 22:41:35 N8100-2488Y smartd[1625]: Device: /dev/ada1, found in smartd database 7.3/5528: Western Digital Blue
Jul  8 22:41:35 N8100-2488Y smartd[1625]: Device: /dev/ada1, no Attribute 231, ignoring -R 231
Jul  8 22:41:35 N8100-2488Y smartd[1625]: Device: /dev/ada1, is SMART capable. Adding to "monitor" list.
```
おー👏
差替えた HDD は、この時点ではチャンと OS 上で認識してくれていたので、ZFS のリビルドを施工する。
<ぼそ>-R 231 が無効って言われてるのは後回しでおねしゃすm(__)m</ぼそ>

:::note info
作業は全て wheel グループに所属してるアカウントで root 権限で操作の事
:::
```text:zpool コマンドで状況確認
# zpool status -v
  pool: ZFS
 state: DEGRADED
status: One or more devices has experienced an error resulting in data
        corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
        entire pool from backup.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-8A
  scan: resilvered 2.65M in 00:00:04 with 0 errors on Thu Jan  1 00:00:21 1970
config:

        NAME        STATE     READ WRITE CKSUM
        ZFS         DEGRADED     0     0     0
          raidz1-0  DEGRADED     0     0     0
            ada0p4  ONLINE       0     0     0
            ada1p4  UNAVAIL      0     0     0  cannot open
            ada2p4  ONLINE       0     0     0
            ada3p4  ONLINE       0     0     0
```
既に差替えた側の HDD は zero で GPT エリアとか綺麗サッパリと消されていたので、他の生きている HDD から GPT テーブルを見ながら構築してみる。
```text:gpart コマンドで他のテーブル見てみる
# gpart show ada3
=>       40  488397088  ada3  GPT  (233G)
         40     532480     1  efi  (260M)
     532520       1024     2  freebsd-boot  (512K)
     533544    4194304     3  freebsd-swap  (2.0G)
    4727848  483669280     4  freebsd-zfs  (231G)
```
何故 ada0 じゃないかってのは、野暮な事は聴くんじゃないよw
```text:gpart コマンドで区画作るよ
# gpart create -s gpt ada1
ada1 created
# gpart add -i 1 -t efi -b 40 -s 260M ada1
ada1p1 added
# gpart add -i 2 -t freebsd-boot -s 512k ada1
ada1p2 added
# gpart add -i 3 -t freebsd-swap -s 2g ada1
ada1p3 added
# gpart add -i 4 -t freebsd-zfs ada1
ada1p4 added
```
完成したか一応確認を💦
```text:gpart コマンドで確認✌
# gpart show ada1
=>       40  488397088  ada1  GPT  (233G)
         40     532480     1  efi  (260M)
     532520       1024     2  freebsd-boot  (512K)
     533544    4194304     3  freebsd-swap  (2.0G)
    4727848  483669280     4  freebsd-zfs  (231G)
```
テーブルが整ったのでリプレイス開始！
```text:zpool コマンドで再生命令を発令!
# zpool replace ZFS ada1p4
```
ここは ZFS のプール名 パーティション ってな具合で記述する事。
リプレイスが頑張っとるか偵察してみるw
```text:zpool コマンドで頑張りを監視w
# zpool status -v ZFS
  pool: ZFS
 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 Jul  8 23:42:42 2024
        47.8G / 65.4G scanned at 388M/s, 11.1G / 65.0G issued at 90.1M/s
        2.69G resilvered, 17.04% done, 00:10:13 to go
config:

        NAME              STATE     READ WRITE CKSUM
        ZFS               DEGRADED     0     0     0
          raidz1-0        DEGRADED     0     0     0
            ada0p4        ONLINE       0     0     0
            replacing-1   DEGRADED     0     0     0
              ada1p4/old  UNAVAIL      0     0     0  cannot open
              ada1p4      ONLINE       0     0     0  (resilvering)
            ada2p4        ONLINE       0     0     0
            ada3p4        ONLINE       0     0     0
```
二回目の偵察
```text:zpool コマンドで頑張りを監視その2 scan 項目に現在の進捗状況がパーセント表示されちょる
# zpool status -v ZFS
  pool: ZFS
 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 Jul  8 23:42:42 2024
        47.8G / 65.4G scanned at 312M/s, 13.4G / 65.0G issued at 87.6M/s
        3.26G resilvered, 20.64% done, 00:10:03 to go
config:

        NAME              STATE     READ WRITE CKSUM
        ZFS               DEGRADED     0     0     0
          raidz1-0        DEGRADED     0     0     0
            ada0p4        ONLINE       0     0     0
            replacing-1   DEGRADED     0     0     0
              ada1p4/old  UNAVAIL      0     0     0  cannot open
              ada1p4      ONLINE       0     0     0  (resilvering)
            ada2p4        ONLINE       0     0     0
            ada3p4        ONLINE       0     0     0
```
三回目の偵察(間隔遅っ)
```text:zpool コマンドで頑張りを確認w
# zpool status -v ZFS
  pool: ZFS
 state: ONLINE
  scan: resilvered 16.1G in 00:13:12 with 0 errors on Mon Jul  8 23:55:54 2024
config:

        NAME        STATE     READ WRITE CKSUM
        ZFS         ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            ada0p4  ONLINE       0     0     0
            ada1p4  ONLINE       0     0     0
            ada2p4  ONLINE       0     0     0
            ada3p4  ONLINE       0     0     0

errors: No known data errors
```
ざっくり完了🎊🎉👏

:::note alert
ada1 を置き換えた例となったが、不具合発生時は冷静に対応しんちゃいよ。
さもなきゃ、治るもんも治らんくなりよるけん✌
:::
# swap パーティションの処理
boot 時、HDD 差替え直後に swap のパーティションが無いって文句言われていたのだが、この作業完了後に母体を通常再起動(計画外w)を行ったら、出なくなったけんそういうもんなんじゃろな💦
ってか、/etc/fstab に記述有ったよのぉ🤪
```text:dmesg
Jul  8 22:41:31 N8100-2488Y kernel: swapon: /dev/ada1p3: No such file or directory
```
# ミッションコンプリート(か)
これで ZFS で HDD がめげた時の対処法を、忘備録的に書いてみたが、いくつか課題は残ってる(と思う)。
# 心残り
efi のブートイメージは区画を作ったダケで一切、手を入れてれないトコ。
多分、mount_msdosfs で他の HDD をマウントして cp -a 位でだいじょうばない？
# おまけ🥰
```text:HDD の偏り癖w
ada0: <Maxtor 6B250S0 BANC1BM0> ATA-7 SATA 1.x device
ada1: <WDC WD2500AAKX-75U6AA0 19.01H19> ATA8-ACS SATA 3.x device
ada2: <Hitachi HDP725025GLA380 GM2OA52A> ATA8-ACS SATA 2.x device
ada3: <Hitachi HDT725025VLA380 V5DOA52A> ATA-7 SATA 2.x device
```

お粗末様でしたm(__)m