はじめに

ある日の朝、ファイルサーバから「ジー」という異音がするようになりました。仕事で外出したのち、家に帰るとさらに音が大きくなってきたので、本格的に故障を確信しました。
我が家のファイルサーバは、ZFSのRAIDZによる冗長化(RAID5相当:3台以上のHDDに対し1台のHDDの故障まで耐性あり)をしていますので、すぐにデータが消失することはないですが、早急に交換が必要となりました。
しばらくメンテしていない自宅サーバのため、ドキュメントなどを特に残していないことから一つずつ思い出し確認をしてHDD交換をしましたので、その記録となります。

情報収集

基本情報

まずは基本的な情報を記載します。なお、今回のZFSシステムは、非ブートディスクとなっています。なお、このファイルサーバに使用しているHDDは、後に示すS.M.A.R.T.の情報によれば稼働時間が5万時間以上(≒約6年)を超えておりましたので、特に短命でもなく、天寿を全うしたと思います。

ファイルサーバのH/W

  • 基本仕様
    • MSI H110M Gaming
    • Intel Pentium G4400
    • ADATA DDR4-2133 8GB×2
  • ストレージ
    • OS用SSD×1台(ADATA)
    • データ用HDD×3台(Seagete)

ファイルサーバのS/W

  • Ubuntu 20.04.6 LTS (Focal Fossa)
  • ZFS
  • Nextcloud

HDD / zpoolの状態

まず、ZFSの状態を調べるため、zpool statusを見ます。pool 名は mypoolであり、mypoolに含まれる1台のHDDがUNAVAILになっています。なお、poolに含まれるHDDの表示には、sdaのようなデバイス名、下記のようなデバイスIDを使用することができます。私は、デバイス名で指定することで一意にHDDを特定できるようにしています。
$ sudo zpool status -v
 pool: mypool
 state: DEGRADED
(略)
config:

        NAME                                 STATE     READ WRITE CKSUM
        mypool                               DEGRADED     0     0     0
          raidz1-0                           DEGRADED     0     0     0
            ata-ST4000DM004-(HDDのシリアル1)  ONLINE       0     0     0
            ata-ST4000DM004-(HDDのシリアル2)  UNAVAIL      0     0     0 (略)
            ata-ST4000DM004-(HDDのシリアル3)  ONLINE       0     0     0

errors: No known data errors


次は、HDDのデバイス名を調べます。HDDのシリアルでgrepして該当する/dev/sd*を調べます。今回は、/dev/sdaでした。

$ ls -lA /dev/disk/by-id/ |grep (HDDのシリアル2)
lrwxrwxrwx 1 root  9 Oct 17 18:58 ata-ST4000DM000_(HDDのシリアル2) -> ../../sda
lrwxrwxrwx 1 root  9 Oct 17 18:58 scsi-0ATA_ST4000DM000_(HDDのシリアル2) -> ../../sda
lrwxrwxrwx 1 root  9 Oct 17 18:58 scsi-1ATA_ST4000DM000_(HDDのシリアル2) -> ../../sda
lrwxrwxrwx 1 root  9 Oct 17 18:58 scsi-SATA_ST4000DM000_(HDDのシリアル2) -> ../../sda


一応、HDDの健康状態を調べます。S.M.A.R.T.を調べるため、smartctlコマンドを使用します。下記で示されている通り、4TBのHDDなのに137GBと表示されたり、そもそも S.M.A.R.T.情報が表示されていないなど、HDDの異常が分かります。

$ sudo smartctl --all /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-216-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Device Model:     ST4000DM000
Serial Number:    (HDDのシリアル2)
LU WWN Device Id: (略)
Firmware Version: CC54
User Capacity:    137,438,952,960 bytes [137 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    7200 rpm
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 3.0, 6.0 Gb/s
Local Time is:    Sun Oct 19 07:01:48 2025 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Read SMART Data failed: scsi error badly formed scsi parameters

=== START OF READ SMART DATA SECTION ===
SMART Status command failed: scsi error badly formed scsi parameters
SMART overall-health self-assessment test result: UNKNOWN!
SMART Status, Attributes and Thresholds cannot be read.

Read SMART Log Directory failed: scsi error badly formed scsi parameters

Read SMART Error Log failed: scsi error badly formed scsi parameters

Read SMART Self-test Log failed: scsi error badly formed scsi parameters

Selective Self-tests/Logging not supported 

HDD交換

設置

まずは、サーバをシャットダウンして、対象のシリアル番号を持つHDDを目視し、交換します。
次に、新しいHDDのデバイスIDを調べます。新しく追加するHDDのシリアル番号を使用して、「ls -lA /dev/disk/by-id/ |grep (新しいシリアル番号2)」のようにコマンドを打つことで取得できます。今回は、「/dev/disk/by-id/ata-ST4000DM004-2U9104_(新しいシリアル番号2)」となっていました。

ZFSのコマンド処理

ZFSのpoolに登録されているHDDを交換するコマンドを発行します。なお、HDD3にエラーがDEGRADEDになっており、too many errorを発しています。HDDを交換するまでの間にエラーが蓄積したようです。
sudo zpool replace mypool ata-ST4000DM004-(旧HDDのシリアル2) /dev/disk/by-id/ata-ST4000DM004-2U9104_(新しいシリアル番号2)
すると、resilver処理が走り始めます。これは、新しいHDDにデータを移行する処理です。私の環境では、約1日かかりました。
sudo zpool status -v
  pool: mypool
 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 Thu Nov  6 20:06:13 2025
        528G scanned at 35.2G/s, 3.55M issued at 242K/s, 4.62T total
        0B resilvered, 0.00% done, no estimated completion time
config:

        NAME                                   STATE     READ WRITE CKSUM
        mypool                                 DEGRADED     0     0     0
          raidz1-0                             DEGRADED     0     0     0
            ata-ST4000DM004-2CV104_(HDDのシリアル1)    ONLINE       0     0     0
            replacing-1                        DEGRADED     0     0     0
              ata-ST4000DM004-2U9104_(旧HDDのシリアル2)  UNAVAIL      0     0     0
              ata-ST4000DM004-2U9104_(新HDDのシリアル2)  ONLINE       0     0     0
            ata-ST4000DM004-2CV104_(HDDのシリアル3)    DEGRADED     0     0     0  too many errors

errors: No known data errors
replace完了。
  pool: mypool
 state: DEGRADED
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-9P
  scan: scrub repaired 0B in 0 days 03:26:18 with 0 errors on Fri Nov  7 16:00:48 2025
config:

        NAME                                 STATE     READ WRITE CKSUM
        mypool                               DEGRADED     0     0     0
          raidz1-0                           DEGRADED     0     0     0
            ata-ST4000DM004-2CV104_(HDDのシリアル1)  ONLINE       0     0     0
            ata-ST4000DM004-2U9104_(新HDDのシリアル2)  ONLINE       0     0     0
            ata-ST4000DM004-2CV104_(HDDのシリアル3)  DEGRADED     0     0     0  too many errors

errors: No known data errors

ZFSのDEGRADEDのtoo many errorsについて調べたのですが、新たな故障が発生している可能性のほか、SATAケーブル・SATAポートの異常、他のHDDが故障したことによりHDDが高負荷となったなどが理由にあるようです。ここでは、いったんエラー情報をクリアにして様子を見てみます。また、scrubコマンドにより、データが読み込めない状態にないか確認します。

$ sudo zpool clear mypool

 

$ sudo zpool scrub mypool

エラーがクリアされ、読み込めないデータもないようです。しばらく様子を見てみます。 

 $ sudo zpool status -v

[sudo] password for rosev:

  pool: mypool

 state: ONLINE

  scan: scrub repaired 0B in 0 days 03:26:18 with 0 errors on Fri Nov  7 16:00:48 2025

config:


        NAME                                 STATE     READ WRITE CKSUM

        mypool                               ONLINE       0     0     0

          raidz1-0                           ONLINE       0     0     0

            ata-ST4000DM004-2CV104_(HDDのシリアル1)  ONLINE       0     0     0

            ata-ST4000DM004-2U9104_(新HDDのシリアル2)  ONLINE       0     0     0

            ata-ST4000DM004-2CV104_(HDDのシリアル3)  ONLINE       0     0     0


errors: No known data errors

まとめ

急に異音がして焦りましたが、何とか復旧できてよかったです。記事を作成している2025年の暮れでは、4TBのHDDが13,000~15,000円もします。とても高くなりました。。。
しかし、サーバ本体は、10年ほど使用し、HDDも5~6年稼働しているため、そろそろ全交換を考えねばならない状況になってきました。

なにか気になることがあれば@rosev838まで。