9
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

おうちサーバー構築報告:デバイス交換・Raspberry Pi 5 でNAS構築

Posted at

能書き

おうちサーバー構築報告:予告の流れとは違う、我が家のラズパイNASです。

以前ちょっと触れた通り、2TBのHDDを5台いただきました。現状のHDDは500GBなので、これを戴き物に置き換えます。ZFSのデバイス交換の機能を使います。5台全部となると時間と手間が掛かりますが。

これをやりたいが為に前回バックアップを取ったとも言えますな。

目標

  • デバイスすべてを2TBの3.5インチHDDに置き換える
    • ZFSのデバイス交換の機能を利用し、1台ずつ5回置き換える

参考文献

交換用デバイスの準備

まずは現状のデバイスを確認します。

lsblk

こんな表示になりました。

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0  44.3M  1 loop /snap/snapd/24724
loop1         7:1    0  44.2M  1 loop /snap/snapd/25205
sda           8:0    0 465.8G  0 disk
├─sda1        8:1    0     2G  0 part
└─sda2        8:2    0 463.8G  0 part
sdb           8:16   0 931.5G  0 disk
├─sdb1        8:17   0 931.5G  0 part
└─sdb9        8:25   0     8M  0 part
sdc           8:32   0 465.8G  0 disk
├─sdc1        8:33   0     2G  0 part
└─sdc2        8:34   0 463.8G  0 part
sdd           8:48   0 465.8G  0 disk
├─sdd1        8:49   0     2G  0 part
└─sdd2        8:50   0 463.8G  0 part
sde           8:64   0 465.8G  0 disk
├─sde1        8:65   0     2G  0 part
└─sde2        8:66   0 463.8G  0 part
mmcblk0     179:0    0  28.9G  0 disk
├─mmcblk0p1 179:1    0   512M  0 part /boot/firmware
└─mmcblk0p2 179:2    0  28.4G  0 part /
zd0         230:0    0     2T  0 disk
├─zd0p1     230:1    0     2T  0 part
└─zd0p9     230:9    0     8M  0 part

sdasdeの5台は、現在の外付けUSBデバイスですね。zfsを構成しているストレージデバイスです。

mmcblk0はラズパイの起動用SDカードです。

zd0はZFSの事らしいです。

現状を確認出来たら交換用デバイスを物理的に接続し、それからlsblkを再確認します。

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0  44.3M  1 loop /snap/snapd/24724
loop1         7:1    0  44.2M  1 loop /snap/snapd/25205
sda           8:0    0 465.8G  0 disk
├─sda1        8:1    0     2G  0 part
└─sda2        8:2    0 463.8G  0 part
sdb           8:16   0 931.5G  0 disk
├─sdb1        8:17   0 931.5G  0 part
└─sdb9        8:25   0     8M  0 part
sdc           8:32   0 465.8G  0 disk
├─sdc1        8:33   0     2G  0 part
└─sdc2        8:34   0 463.8G  0 part
sdd           8:48   0 465.8G  0 disk
├─sdd1        8:49   0     2G  0 part
└─sdd2        8:50   0 463.8G  0 part
sde           8:64   0 465.8G  0 disk
├─sde1        8:65   0     2G  0 part
└─sde2        8:66   0 463.8G  0 part
sdf           8:80   0   1.8T  0 disk
└─sdf1        8:81   0   1.8T  0 part
mmcblk0     179:0    0  28.9G  0 disk
├─mmcblk0p1 179:1    0   512M  0 part /boot/firmware
└─mmcblk0p2 179:2    0  28.4G  0 part /
zd0         230:0    0     2T  0 disk
├─zd0p1     230:1    0     2T  0 part
└─zd0p9     230:9    0     8M  0 part

増えたのはsdfですね、これが新しい交換用デバイスでしょう。

これをbadblocksします。badblocksするとHDD上のデータが全部消えるので注意。時間も掛かります。

cd
sudo badblocks -w -o badblocks_sdf.txt /dev/sdf &

コマンドの終了は、交換用デバイスのアクセスランプが落ち着いたのを見計らって、psコマンドで確認します。

ps -ax | grep badblocks

badblocksが動いていると、こんな感じの出力になります。

$ ps -ax | grep badblocks
   2529 pts/0    S      0:00 sudo badblocks -w -o badblocks_sdf.txt /dev/sdf
   2530 pts/1    Ss+    0:00 sudo badblocks -w -o badblocks_sdf.txt /dev/sdf
   2531 pts/1    D      0:00 badblocks -w -o badblocks_sdf.txt /dev/sdf
   2533 pts/0    S+     0:00 grep --color=auto badblocks

badblocksが完了して止まったら、出力されるのはgrepコマンドだけになります。

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

時間的にはおおよそ3日半くらいでしたでしょうか。

完了したら、ホームディレクトリに作成されているbadblocks_sdf.txtを確認しましょう。

cd
ls -l badblocks_sdf.txt

ファイルサイズは0バイト。つまり不良セクタが発生していない事になります。綺麗なもんですな。

$ cd
$ ls -l badblocks_sdf.txt
-rw-r--r-- 1 root root 0 Sep 25 15:07 badblocks_sdf.txt

念の為シャットダウンしてから、デバイスを外します。

sudo shutdown -h now

交換用デバイスを外したらまた電源を入れます。

HDD交換

対象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: scrub repaired 0B in 98 days 23:10:49 with 0 errors on Sun Jun 15 23:35:42 2025
config:

        NAME                                                STATE     READ WRITE CKSUM
        tank                                                ONLINE       0     0     0
          raidz2-0                                          ONLINE       0     0     0
            usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4  ONLINE       0     0     0
            usb-WDC_WD50_00AACS-00ZUB0_DD20250313009D-0:3   ONLINE       0     0     0
            usb-Hitachi_HDT725050VLA360_DD20250313009D-0:2  ONLINE       0     0     0
            usb-Hitachi_HDT725050VLA360_DD20250313009D-0:0  ONLINE       0     0     0
            ata-ST1000VN008-3CW10C_WWD1E4QZ                 ONLINE       0     0     0

errors: No known data errors

どうやら/dev/by-idで見られる名前を出力しているようです。

$ cd /dev/disk/by-id
$ ls -l usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4 usb-WDC_WD50_00AACS-00ZUB0_DD20250313009D-0:3 usb-Hitachi_HDT725050VLA360_DD20250313009D-0:2 usb-Hitachi_HDT725050VLA360_DD20250313009D-0:0 ata-ST1000VN008-3CW10C_WWD1E4QZ
lrwxrwxrwx 1 root root 9 Sep 30 13:47 ata-ST1000VN008-3CW10C_WWD1E4QZ -> ../../sdb
lrwxrwxrwx 1 root root 9 Sep 30 13:47 usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4 -> ../../sde
lrwxrwxrwx 1 root root 9 Sep 30 13:47 usb-Hitachi_HDT725050VLA360_DD20250313009D-0:0 -> ../../sda
lrwxrwxrwx 1 root root 9 Sep 30 13:47 usb-Hitachi_HDT725050VLA360_DD20250313009D-0:2 -> ../../sdc
lrwxrwxrwx 1 root root 9 Sep 30 13:47 usb-WDC_WD50_00AACS-00ZUB0_DD20250313009D-0:3 -> ../../sdd

どれから交換してもいいんですが、zpool status表示の上から順にやっていきますか。
まずはusb-Hitachi_HDP725050GLA360_DD20250313009D-0:4です。

対象HDDを特定

hdparm -Iコマンドでモデルとシリアル番号を確認し、メモしておきます。

以前hdparm-iオプションを付けたのですが、SATAだと-Iオプションを付けないといけないらしいですな。Copilotありがとう。

$ sudo hdparm -I /dev/disk/by-id/usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4 | head
SG_IO: bad/missing sense data, sb[]:  70 00 0b 00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

/dev/disk/by-id/usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4:

ATA device, with non-removable media
        Model Number:       Hitachi HDP725050GLA360
        Serial Number:      GEC534RF2GGNEE
        Firmware Revision:  0969
Standards:
        Supported: 7 6 5 4
        Likely used: 7

対象HDDをオフラインにする

対象HDDをオフラインにします。

$ sudo zpool offline tank usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4
cannot offline usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4: no such device in pool
$ sudo zpool offline tank /dev/disk/by-id/usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4
cannot offline /dev/disk/by-id/usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4: no such device in pool

そういえばGUIDを指定しないといけないのでした。

$ sudo zpool status -g
  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: scrub repaired 0B in 98 days 23:10:49 with 0 errors on Sun Jun 15 23:35:42 2025
config:

        NAME                      STATE     READ WRITE CKSUM
        tank                      ONLINE       0     0     0
          5887850977561855789     ONLINE       0     0     0
            15916779478375754287  ONLINE       0     0     0
            1891343347815713878   ONLINE       0     0     0
            17447701145463039710  ONLINE       0     0     0
            17420523610300470783  ONLINE       0     0     0
            7633794097079579966   ONLINE       0     0     0

errors: No known data errors

しまった。どれがどれやらわからんちん。Copilotによるとzdbというコマンドで対応がわかるらしいですが、これはかなり危険なコマンドのようですな

$ zdb
tank:
    version: 5000
    name: 'tank'
    state: 0
    txg: 39718843
    pool_guid: 2891006712653798077
    errata: 0
    hostid: 1895377482
    hostname: '~~~'
    com.delphix:has_per_vdev_zaps
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 2891006712653798077
        create_txg: 4
        children[0]:
            type: 'raidz'
            id: 0
            guid: 5887850977561855789
            nparity: 2
            metaslab_array: 35
            metaslab_shift: 33
            ashift: 12
            asize: 2489776865280
            is_log: 0
            create_txg: 4
            com.delphix:vdev_zap_top: 504
            children[0]:
                type: 'disk'
                id: 0
                guid: 15916779478375754287
                path: '/dev/disk/by-id/usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4-part2'
                whole_disk: 1
                DTL: 559
                create_txg: 4
                com.delphix:vdev_zap_leaf: 505
            children[1]:
                type: 'disk'
                id: 1
                guid: 1891343347815713878
                path: '/dev/disk/by-id/usb-WDC_WD50_00AACS-00ZUB0_DD20250313009D-0:3-part2'
                whole_disk: 1
                DTL: 558
                create_txg: 4
                com.delphix:vdev_zap_leaf: 506
            children[2]:
                type: 'disk'
                id: 2
                guid: 17447701145463039710
                path: '/dev/disk/by-id/usb-Hitachi_HDT725050VLA360_DD20250313009D-0:2-part2'
                whole_disk: 1
                DTL: 557
                create_txg: 4
                com.delphix:vdev_zap_leaf: 507
            children[3]:
                type: 'disk'
                id: 3
                guid: 17420523610300470783
                path: '/dev/disk/by-id/usb-Hitachi_HDT725050VLA360_DD20250313009D-0:0-part2'
                whole_disk: 1
                DTL: 556
                create_txg: 4
                com.delphix:vdev_zap_leaf: 508
            children[4]:
                type: 'disk'
                id: 4
                guid: 7633794097079579966
                path: '/dev/disk/by-id/ata-ST1000VN008-3CW10C_WWD1E4QZ-part1'
                devid: 'ata-ST1000VN008-3CW10C_WWD1E4QZ-part1'
                phys_path: 'pci-0000:00:11.0-ata-4.0'
                whole_disk: 1
                DTL: 446
                create_txg: 4
                com.delphix:vdev_zap_leaf: 445
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data

これによるとusb-Hitachi_HDP725050GLA360_DD20250313009D-0:4のGUIDは15916779478375754287のようです。

これをオフラインにします。

sudo zpool offline tank 15916779478375754287

うむ、usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4がオフラインになりました。

$ 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 0B in 98 days 23:10:49 with 0 errors on Sun Jun 15 23:35:42 2025
config:

        NAME                                                STATE     READ WRITE CKSUM
        tank                                                DEGRADED     0     0     0
          raidz2-0                                          DEGRADED     0     0     0
            usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4  OFFLINE      0     0     0
            usb-WDC_WD50_00AACS-00ZUB0_DD20250313009D-0:3   ONLINE       0     0     0
            usb-Hitachi_HDT725050VLA360_DD20250313009D-0:2  ONLINE       0     0     0
            usb-Hitachi_HDT725050VLA360_DD20250313009D-0:0  ONLINE       0     0     0
            ata-ST1000VN008-3CW10C_WWD1E4QZ                 ONLINE       0     0     0

errors: No known data errors

HDD交換

交換用HDDの準備が出来ました。
対象HDDをオフラインにしました。
対象HDDのモデルやシリアル番号を取得しました。

これからラズパイNASをシャットダウンして、物理的にHDDを交換します。

sudo shutdown -h now

探してみると型番は一致するデバイスがあったのですが、S/Nは一致しなかったですね。正確には、hdparmコマンドで表示されたシリアル番号の後半だけが、HDDに貼付されているシールに印刷されていました(S/N:RF2GGNEE) これ、日立の特徴なんでしょうか。謎。

ともあれ、新しいHDDと交換して電源を入れます。

まず、新しいHDDを特定します。

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0  44.3M  1 loop /snap/snapd/24724
loop1         7:1    0  44.2M  1 loop /snap/snapd/25205
sda           8:0    0 465.8G  0 disk
├─sda1        8:1    0     2G  0 part
└─sda2        8:2    0 463.8G  0 part
sdb           8:16   0 931.5G  0 disk
├─sdb1        8:17   0 931.5G  0 part
└─sdb9        8:25   0     8M  0 part
sdc           8:32   0 465.8G  0 disk
├─sdc1        8:33   0     2G  0 part
└─sdc2        8:34   0 463.8G  0 part
sdd           8:48   0 465.8G  0 disk
├─sdd1        8:49   0     2G  0 part
└─sdd2        8:50   0 463.8G  0 part
sde           8:64   0   1.8T  0 disk
mmcblk0     179:0    0  28.9G  0 disk
├─mmcblk0p1 179:1    0   512M  0 part /boot/firmware
└─mmcblk0p2 179:2    0  28.4G  0 part /
zd0         230:0    0     2T  0 disk
├─zd0p1     230:1    0     2T  0 part
└─zd0p9     230:9    0     8M  0 part

この1.8TBの奴ですな。/dev/sde
念の為hdparm -Iコマンドでシリアル番号を見て照合します。

$ sudo hdparm -I /dev/sde | head
SG_IO: bad/missing sense data, sb[]:  70 00 0b 00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

/dev/sde:

ATA device, with non-removable media
        Model Number:       ST32000542AS
        Serial Number:      5XW17B1B
        Firmware Revision:  0969
Standards:
        Supported: 7 6 5 4
        Likely used: 7

照合できたら、この/dev/sdeのIDを求めます。

$ ls -l /dev/disk/by-id | grep sde
lrwxrwxrwx 1 root root  9 Sep 30 15:22 ata-ST32000542AS_5XW17B1B -> ../../sde
lrwxrwxrwx 1 root root  9 Sep 30 15:22 usb-ST320005_42AS_DD20250313009D-0:4 -> ../../sde

このIDを指定してzpool replaceします。

$ zpool status -g
  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 Tue Sep 30 15:29:39 2025
        1.17T / 1.33T scanned at 1.09G/s, 0B / 169G issued
        0B resilvered, 0.00% done, no estimated completion time
config:

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

errors: No known data errors
$ sudo zpool replace tank 15916779478375754287 usb-ST320005_42AS_DD20250313009D-0:4

状況を確認しましょう。

$ 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 Tue Sep 30 15:55:27 2025
        823G / 1.33T scanned at 9.36G/s, 7.70G / 1.33T issued at 89.6M/s
        1.52G resilvered, 0.57% done, 04:17:44 to go
config:

        NAME                                                  STATE     READ WRITE CKSUM
        tank                                                  DEGRADED     0     0     0
          raidz2-0                                            DEGRADED     0     0     0
            replacing-0                                       DEGRADED     0     0     0
              usb-Hitachi_HDP725050GLA360_DD20250313009D-0:4  OFFLINE      0     0     0
              usb-ST320005_42AS_DD20250313009D-0:4            ONLINE       0     0     0  (resilvering)
            usb-WDC_WD50_00AACS-00ZUB0_DD20250313009D-0:3     ONLINE       0     0     0
            usb-Hitachi_HDT725050VLA360_DD20250313009D-0:2    ONLINE       0     0     0
            usb-Hitachi_HDT725050VLA360_DD20250313009D-0:0    ONLINE       0     0     0
            ata-ST1000VN008-3CW10C_WWD1E4QZ                   ONLINE       0     0     0

errors: No known data errors

時間的には3時間強といった所です。

繰り返し

以上を繰り返してHDD5台全部を2TBのデバイスに交換します。

全部交換が終わってzpool statusを確認した結果が下記です。

$ 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 268G in 03:29:16 with 0 errors on Sat Jan 17 15:26:46 2026
config:

        NAME                                                STATE     READ WRITE CKSUM
        tank                                                ONLINE       0     0     0
          raidz2-0                                          ONLINE       0     0     0
            usb-ST320005_42AS_DD20250313009D-0:4            ONLINE       0     0     0
            usb-ST320005_42AS_DD20250313009D-0:3            ONLINE       0     0     0
            usb-ST320005_42AS_DD20250313009D-0:2            ONLINE       0     0     0
            usb-Hitachi_HDS722020ALA330_DD20250313009D-0:0  ONLINE       0     0     0
            usb-ST320005_42AS_DD20250313009D-0:1            ONLINE       0     0     0

errors: No known data errors

何やらzpool upgradeしろって指示が見えますが、それは次回にしましょう。

サイズの確認はzpool listで出来ます。

$ zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
tank  9.09T  1.33T  7.76T        -         -     9%    14%  1.00x    ONLINE  -

約9TBのようですね。しまった、交換開始前のzpool listを取ってませんでした。確か、2TBと少しだった気がします。デバイス全部2TBにしたので圧倒的に増えました。

仕舞い

我が家のNASもこれで当分は安泰でしょう。良かった良かった。

9
17
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
9
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?