0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

私的サーバー構築日誌:ZFS HDD交換・Ubuntu 24.04 LTS in MicroServer N54L

Posted at

能書き

私的サーバー構築日誌:仕切り直しからの自宅サーバー構築の続きです。

前回Ubuntu24.04LTSをインストールしてZFSで使うように設定したのですが、そのHDDの内の1台がお亡くなりになってしまいました。というわけでHDDを交換します。今回はその作業の記録になります。

ぐぐってみると、LinuxでRAID-Z2のHDD交換記事はあまり見当たりませんな。皆さんFreeBSDのようで。

作業準備

電源を入れてimport

HDDの1台がお亡くなりになった事が分かった日に、念のため電源を切ってしまっていました。そのため電源を入れる所からの作業になります。

  • 電源を入れる
  • 普段使いのマシンからssh接続
$ sudo zpool import
   pool: tank
     id: 2891006712653798077
  state: ONLINE
status: Some supported features are not enabled on the pool.
        (Note that they may be intentionally disabled if the
        'compatibility' property is set.)
 action: The pool can be imported using its name or numeric identifier, though
        some features will not be available without an explicit 'zpool upgrade'.
 config:

        tank        ONLINE
          raidz2-0  ONLINE
            sdb     ONLINE
            sdc     ONLINE
            sdd     ONLINE
            sda     ONLINE
            sde     ONLINE

インポートします。マウント先は/mnt/tankにします。

sudo zpool import -R /mnt -f tank

結果確認。

$ zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
tank  2.26T  1.32T   960G        -        8G    37%    58%  1.00x    ONLINE  /mnt
$ zpool status
  pool: tank
 state: ONLINE
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: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-9P
  scan: resilvered 1.52M in 00:00:05 with 0 errors on Sat Nov 16 16:19:56 2024
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sda     ONLINE       0     0     0
            sde     ONLINE       1     0     0

errors: No known data errors

バックアップ

バックアップ大事。超大事。

前回作業時にバックアップをとっていますが、念の為に、今回作業直前に取り直します。

まずは事前に、USB接続ストレージを確認。

$ ls -l /dev/disk/by-id | grep usb
lrwxrwxrwx 1 root root  9 Nov 16 16:13 usb-Verbatim_STORE_N_GO_0710584F1A3C7F51-0:0 -> ../../sdf
lrwxrwxrwx 1 root root 10 Nov 16 16:13 usb-Verbatim_STORE_N_GO_0710584F1A3C7F51-0:0-part1 -> ../../sdf1
lrwxrwxrwx 1 root root 10 Nov 16 16:13 usb-Verbatim_STORE_N_GO_0710584F1A3C7F51-0:0-part2 -> ../../sdf2
lrwxrwxrwx 1 root root 10 Nov 16 16:13 usb-Verbatim_STORE_N_GO_0710584F1A3C7F51-0:0-part3 -> ../../sdf3

これは起動用のUSBメモリ?ですね。
ここで外付け4TBのHDDをUSB接続して、再度確認します。

$ ls -l /dev/disk/by-id | grep usb
lrwxrwxrwx 1 root root  9 Nov 16 16:42 usb-Logitec_LGB_USB_Device_2B3100000000033E-0:0 -> ../../sdg
lrwxrwxrwx 1 root root 10 Nov 16 16:42 usb-Logitec_LGB_USB_Device_2B3100000000033E-0:0-part1 -> ../../sdg1
lrwxrwxrwx 1 root root 10 Nov 16 16:42 usb-Logitec_LGB_USB_Device_2B3100000000033E-0:0-part2 -> ../../sdg2
lrwxrwxrwx 1 root root  9 Nov 16 16:13 usb-Verbatim_STORE_N_GO_0710584F1A3C7F51-0:0 -> ../../sdf
lrwxrwxrwx 1 root root 10 Nov 16 16:13 usb-Verbatim_STORE_N_GO_0710584F1A3C7F51-0:0-part1 -> ../../sdf1
lrwxrwxrwx 1 root root 10 Nov 16 16:13 usb-Verbatim_STORE_N_GO_0710584F1A3C7F51-0:0-part2 -> ../../sdf2
lrwxrwxrwx 1 root root 10 Nov 16 16:13 usb-Verbatim_STORE_N_GO_0710584F1A3C7F51-0:0-part3 -> ../../sdf3

増えたのはsdgのようですな。これをマウントします。まずはマウントポイントを作成。

$ sudo mkdir /mnt/backup

マウント。

$ sudo mount /dev/sdg /mnt/backup
mount: /mnt/backup: wrong fs type, bad option, bad superblock on /dev/sdg, missing codepage or helper program, or other error.
       dmesg(1) may have more information after failed mount system call.
$ sudo mount /dev/sdg1 /mnt/backup
mount: /mnt/backup: wrong fs type, bad option, bad superblock on /dev/sdg1, missing codepage or helper program, or other error.
       dmesg(1) may have more information after failed mount system call.

あれあれ…?
そうか、zfsフォーマットしたのかも知れません。

$ sudo zpool import
   pool: extra1
     id: 10279878555798217878
  state: ONLINE
status: Some supported features are not enabled on the pool.
        (Note that they may be intentionally disabled if the
        'compatibility' property is set.)
 action: The pool can be imported using its name or numeric identifier, though
        some features will not be available without an explicit 'zpool upgrade'.
 config:

        extra1      ONLINE
          sdg       ONLINE

   pool: tank
     id: 18233389827505880159
  state: DEGRADED
status: One or more devices contains corrupted data.
 action: The pool can be imported despite missing or damaged devices.  The
        fault tolerance of the pool may be compromised if imported.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J
 config:

        tank                                            DEGRADED
          mirror-0                                      DEGRADED
            ata-Hitachi_HTS723232A7A364_E3834263EDYUAD  UNAVAIL
            zd0                                         ONLINE

pool: tankが良く分かりませんが、とりあえず放置。pool: extra1をimportします。
先に、さっき作ってしまったマウントポイントを削除しましょう。

sudo rmdir /mnt/backup

それからimport。

sudo zpool import -R /mnt extra1

確認。

$ zpool list
NAME     SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
extra1  3.62T  1.83T  1.80T        -         -    27%    50%  1.00x    ONLINE  /mnt
tank    2.26T  1.32T   960G        -        8G    37%    58%  1.00x    ONLINE  /mnt

前回のバックアップ場所は、多分、下記です。

$ ls -dl /mnt/extra1/bak_tank
drwxr-xr-x 6 root root 6 Jun  6 19:10 /mnt/extra1/bak_tank

空き容量は何とかなりそうなので、tankの1.32TB(?)をextra1cp -R -pします。

$ sudo cp -R -p /mnt/tank /mnt/extra1/bak_tank2 &
[1] 2883
$ ps -ax | grep tank
   2883 pts/0    S      0:00 sudo cp -R -p /mnt/tank /mnt/extra1/bak_tank2
   2884 pts/1    Ss+    0:00 sudo cp -R -p /mnt/tank /mnt/extra1/bak_tank2
   2885 pts/1    D      0:07 cp -R -p /mnt/tank /mnt/extra1/bak_tank2
   2891 pts/0    S+     0:00 grep --color=auto tank

後はcpコマンドが完了するまで待ちます。外付けUSB接続ストレージが止まったのを見計らって確認。

$ ps -ax | grep tank
  19681 pts/0    S+     0:00 grep --color=auto tank

cp -R -pプロセスが無くなったので、完了したようです。バックアップ完了を確認できたので、外付けUSB接続ストレージをexportします。

sudo zpool export extra1

一応確認。

$ zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
tank  2.26T  1.32T   960G        -        8G    37%    58%  1.00x  DEGRADED  /mnt

無事にexportできたようです。そうしたらバックアップ用の外付けUSB接続ストレージを物理的に取り外します。

交換用新ディスクの準備

交換用新ディスクを外付けUSB接続ストレージとして繋ぎます。そして確認。

$ ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0 Nov 19 15:31 /dev/sda
brw-rw---- 1 root disk 8,  1 Nov 19 15:31 /dev/sda1
brw-rw---- 1 root disk 8,  2 Nov 19 15:34 /dev/sda2
brw-rw---- 1 root disk 8, 16 Nov 19 15:31 /dev/sdb
brw-rw---- 1 root disk 8, 17 Nov 19 15:31 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Nov 19 15:34 /dev/sdb2
brw-rw---- 1 root disk 8, 32 Nov 19 15:31 /dev/sdc
brw-rw---- 1 root disk 8, 33 Nov 19 15:31 /dev/sdc1
brw-rw---- 1 root disk 8, 34 Nov 19 15:34 /dev/sdc2
brw-rw---- 1 root disk 8, 48 Nov 19 15:31 /dev/sdd
brw-rw---- 1 root disk 8, 49 Nov 19 15:31 /dev/sdd1
brw-rw---- 1 root disk 8, 50 Nov 19 15:34 /dev/sdd2
brw-rw---- 1 root disk 8, 64 Nov 19 15:31 /dev/sde
brw-rw---- 1 root disk 8, 65 Nov 19 15:31 /dev/sde1
brw-rw---- 1 root disk 8, 66 Nov 19 15:34 /dev/sde2
brw-rw---- 1 root disk 8, 80 Nov 19 15:31 /dev/sdf
brw-rw---- 1 root disk 8, 81 Nov 19 15:31 /dev/sdf1
brw-rw---- 1 root disk 8, 82 Nov 19 15:31 /dev/sdf2
brw-rw---- 1 root disk 8, 83 Nov 19 15:31 /dev/sdf3
brw-rw---- 1 root disk 8, 96 Nov 19 15:36 /dev/sdg

新ディスクは/dev/sdgですね。これをbadblocksします。HDD上のデータが消えるので注意。時間も掛かります。

cd
sudo badblocks -w -o badblocks_sdg.txt /dev/sdg &

コマンドの終了は、例によってpsコマンドで確認します。

$ ps -ax | grep badblocks
   1913 pts/0    S      0:00 sudo badblocks -w -o badblocks_sdg.txt /dev/sdg
   1914 pts/1    Ss+    0:00 sudo badblocks -w -o badblocks_sdg.txt /dev/sdg
   1915 pts/1    D      0:02 badblocks -w -o badblocks_sdg.txt /dev/sdg
   1917 pts/0    S+     0:00 grep --color=auto badblocks

数日掛かって完了しました。

$ ps -ax | grep badblocks
  20720 pts/0    S+     0:00 grep --color=auto badblocks

バッドブロックの記録は無しです。新品のHDDなので明らかではあります。badblocksコマンド、要らなかったかも。

$ ls -l badblocks_sdg.txt
-rw-r--r-- 1 root root 0 Nov 19 15:42 badblocks_sdg.txt

マウントしてないデバイスなので、このまま取り外します。大丈夫だよね…

HDD交換

状況確認

現状を確認します。

$ zpool status
  pool: tank
 state: ONLINE
status: Some supported and requested 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 1.26M in 00:00:05 with 0 errors on Tue Nov 19 15:34:13 2024
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sda     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

sdeが逝ってしまったはずなんですが、エラーが表示されません。念の為にscrubして確認します。

$ sudo zpool scrub tank
$ 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: scrub repaired 4.86M in 01:54:45 with 0 errors on Sat Nov 23 17:49:39 2024
config:

        NAME        STATE     READ WRITE CKSUM
        tank        DEGRADED     0     0     0
          raidz2-0  DEGRADED     0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sda     ONLINE       0     0     0
            sde     FAULTED    121     0     0  too many errors

errors: No known data errors

間違いありませんね、sdeがお亡くなりです。上記で準備した1TBのHDDと交換します。
そうなんです、1TBです。コスパ(バイト単価)は2TBの方が上なのは承知してますが、小遣いの都合でして… 号泣。

因みにこのscrubは2時間近くで完了しました。

該当HDDをオフラインにする

前節でFAULTEDになっていたsdeをオフラインにします。が、うまくいきません。

$ sudo zpool offline tank sde
cannot offline sde: no such device in pool

デバイスのGUIDを指定する必要があるようです。

$ zpool status -g
  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 4.86M in 01:54:45 with 0 errors on Sat Nov 23 17:49:39 2024
config:

        NAME                      STATE     READ WRITE CKSUM
        tank                      DEGRADED     0     0     0
          5887850977561855789     DEGRADED     0     0     0
            15916779478375754287  ONLINE       0     0     0
            1891343347815713878   ONLINE       0     0     0
            17447701145463039710  ONLINE       0     0     0
            17420523610300470783  ONLINE       0     0     0
            4054386367982837609   FAULTED    121     0     0  too many errors

errors: No known data errors
$ sudo zpool offline tank 4054386367982837609

確認。

$ 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: scrub repaired 4.86M in 01:54:45 with 0 errors on Sat Nov 23 17:49:39 2024
config:

        NAME        STATE     READ WRITE CKSUM
        tank        DEGRADED     0     0     0
          raidz2-0  DEGRADED     0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sda     ONLINE       0     0     0
            sde     FAULTED    121     0     0  too many errors

errors: No known data errors

あれ、FAULTEDのままですね。良いのかな…いいや、放置して次の作業へ進みましょう。

該当HDDの特定

1台づつ抜いて状況確認して当たりを探す、のが通常手順でしょうか。調べたらhdparmというコマンドを発見しました。型番やシリアルナンバーなども表示されるようです。

$ sudo hdparm -i /dev/sde

/dev/sde:

 Model=Hitachi HDS721010CLA332, FwRev=JP4OA3MA, SerialNo=JP9960HZ1Y9RGU
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=56
 BuffType=DualPortCache, BuffSize=29999kB, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=1953525168
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4
 DMA modes:  mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
 AdvancedPM=yes: disabled (255) WriteCache=disabled
 Drive conforms to: unknown:  ATA/ATAPI-2,3,4,5,6,7

 * signifies the current active mode

HDD交換

型番とシリアルナンバーをメモして電源を落とします。

sudo shutdown -h now

電源が切れたら、1台づつHDDを抜いて型番とシリアルナンバーを確認します。型番は一致するデバイスがあったのですが、S/Nは一致しなかったですね… 正確には、hdparmコマンドで表示されたSerialNoの後半だけが、HDDに貼付されているシールに印刷されていました(S/N:HZ1Y9RGU)

ついでにマシンの中を掃除。

該当のHDDを抜いて、ここで一旦電源を入れて様子を見てみます。

$ sudo zpool import
   pool: tank
     id: 2891006712653798077
  state: DEGRADED
status: One or more devices are offlined.
 action: The pool can be imported despite missing or damaged devices.  The
        fault tolerance of the pool may be compromised if imported.
 config:

        tank        DEGRADED
          raidz2-0  DEGRADED
            sdb     ONLINE
            sdc     ONLINE
            sdd     ONLINE
            sda     ONLINE
            sde     OFFLINE

お、sdeドライブがOFFLINEになりました!そうです、これを確認したかったんです。確認できて満足したので、もう一度シャットダウン。

sudo shutdown -h now

新しいHDDを入れて電源を入れます。そしてzpool importコマンドで状況を確認。

$ sudo zpool import
   pool: tank
     id: 2891006712653798077
  state: DEGRADED
status: One or more devices are offlined.
 action: The pool can be imported despite missing or damaged devices.  The
        fault tolerance of the pool may be compromised if imported.
 config:

        tank        DEGRADED
          raidz2-0  DEGRADED
            sdb     ONLINE
            sdc     ONLINE
            sdd     ONLINE
            sda     ONLINE
            sde     OFFLINE

新しいデバイスを入れてもsdeはOFFLINEのままですな。

まずはzpool import tankします。

$ sudo zpool import -R /mnt -f tank
$ sudo zpool import
   pool: tank
     id: 18233389827505880159
  state: DEGRADED
status: One or more devices contains corrupted data.
 action: The pool can be imported despite missing or damaged devices.  The
        fault tolerance of the pool may be compromised if imported.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J
 config:

        tank                                            DEGRADED
          mirror-0                                      DEGRADED
            ata-Hitachi_HTS723232A7A364_E3834263EDYUAD  UNAVAIL
            zd0                                         ONLINE
$ zpool status
  pool: tank
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: scrub repaired 4.86M in 01:54:45 with 0 errors on Sat Nov 23 17:49:39 2024
config:

        NAME        STATE     READ WRITE CKSUM
        tank        DEGRADED     0     0     0
          raidz2-0  DEGRADED     0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sda     ONLINE       0     0     0
            sde     OFFLINE      0     0     0

errors: No known data errors

デバイスの置換の為にzpool replaceコマンドを実行…の前に、念のため、/dev/sdeが新しいデバイスである事を確認してみましょう。

$ sudo hdparm -i /dev/sde

/dev/sde:

 Model=ST1000VN008-3CW10C, FwRev=SC60, SerialNo=WWD1E4QZ
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
 BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=16
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=1953525168
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4
 DMA modes:  mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
 AdvancedPM=no WriteCache=disabled
 Drive conforms to: unknown:  ATA/ATAPI-5,6,7

 * signifies the current active mode

今度はModel、SerialNoともに、HDD(に貼付のシール)に印刷してあるものと一致しました。

ではお待ちかねのzpool replaceを。

$ zpool status -g
  pool: tank
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: scrub repaired 4.86M in 01:54:45 with 0 errors on Sat Nov 23 17:49:39 2024
config:

        NAME                      STATE     READ WRITE CKSUM
        tank                      DEGRADED     0     0     0
          5887850977561855789     DEGRADED     0     0     0
            15916779478375754287  ONLINE       0     0     0
            1891343347815713878   ONLINE       0     0     0
            17447701145463039710  ONLINE       0     0     0
            17420523610300470783  ONLINE       0     0     0
            4054386367982837609   OFFLINE      0     0     0

errors: No known data errors
$ sudo zpool replace tank 4054386367982837609 /dev/sde

さて確認。

$ 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 Nov 24 16:44:56 2024
        387G / 1.32T scanned at 1.83G/s, 1.23G / 1.32T issued at 5.98M/s
        235M resilvered, 0.09% done, no estimated completion time
config:

        NAME             STATE     READ WRITE CKSUM
        tank             DEGRADED     0     0     0
          raidz2-0       DEGRADED     0     0     0
            sdb          ONLINE       0     0     0
            sdc          ONLINE       0     0     0
            sdd          ONLINE       0     0     0
            sda          ONLINE       0     0     0
            replacing-4  DEGRADED     0     0     0
              sde        OFFLINE      0     0     0
              sde        ONLINE       0     0     0  (resilvering)

errors: No known data errors

おお、順調にresilverしています。そしておよそ数時間で終了しました。

$ zpool status
  pool: tank
 state: ONLINE
status: Some supported and requested 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 267G in 08:26:09 with 0 errors on Mon Nov 25 01:11:05 2024
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sda     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

これにてHDD交換完了です!

仕舞い

Ubuntu 24.04 LTS 上の zfs RAID-Z2 を構成するHDDを1台、実際に交換しました。その手順は以上になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?