Zfs

ZFS 按 id 替換磁碟

  • July 14, 2019

偶然地,我創建了一個 zpool 使用/dev/sda等等。我知道這是個壞主意。我只是想測試我的設置。事實證明它執行得很好,我忘記了設備名稱並開始使用我的 zpool 作為 NAS,仍然使用sda,sdb和. 我的作業系統從. 所以我的 zpool 已經充滿了一些數據,準確地說大約 16 TB。所以我想知道是否可以修改現有池以通過 id 使用磁碟,而不是通過它們的名稱?sdc``sdd``sde``sd*X*

我的 NAS 已經連續執行了大約 1 年,而且我從未重新啟動過。如果我現在重新啟動並且某些磁碟名稱會更改,我的 zpool 會被破壞嗎?(例如,因為我後來添加了一些新磁碟)

我讀到有可能使用 zpool export and zpool import -d /dev/disk/by-id。這會導致一些重新同步開始,或者當我導出和導入時究竟會發生什麼?由於它有很多數據,如果我不必複製我的數據,我會更喜歡。這實在是太多了,需要幾天的時間。我的 zpool 在 raidz2 配置下執行,作業系統是 Debian。


這就是我得到的zfs list all

root@pve:~# zfs get all
NAME                                           PROPERTY                VALUE                    SOURCE
tank                                          type                    filesystem               -
tank                                          creation                Sat May 12 15:22 2018    -
tank                                          used                    1.00T                    -
tank                                          available               4.26T                    -
tank                                          referenced              981G                     -
tank                                          compressratio           1.02x                    -
tank                                          mounted                 no                       -
tank                                          quota                   none                     default
tank                                          reservation             none                     default
tank                                          recordsize              128K                     default
tank                                          mountpoint              /tank                    default
tank                                          sharenfs                off                      default
tank                                          checksum                on                       default
tank                                          compression             lz4                      local
tank                                          atime                   off                      local
tank                                          devices                 on                       default
tank                                          exec                    on                       default
tank                                          setuid                  on                       default
tank                                          readonly                off                      default
tank                                          zoned                   off                      default
tank                                          snapdir                 hidden                   default
tank                                          aclinherit              restricted               default
tank                                          createtxg               1                        -
tank                                          canmount                on                       default
tank                                          xattr                   on                       default
tank                                          copies                  1                        default
tank                                          version                 5                        -
tank                                          utf8only                off                      -
tank                                          normalization           none                     -
tank                                          casesensitivity         sensitive                -
tank                                          vscan                   off                      default
tank                                          nbmand                  off                      default
tank                                          sharesmb                off                      default
tank                                          refquota                none                     default
tank                                          refreservation          none                     default
tank                                          guid                    18018951160716445859     -
tank                                          primarycache            all                      default
tank                                          secondarycache          all                      default
tank                                          usedbysnapshots         100M                     -
tank                                          usedbydataset           981G                     -
tank                                          usedbychildren          47.5G                    -
tank                                          usedbyrefreservation    0B                       -
tank                                          logbias                 latency                  default
tank                                          dedup                   off                      default
tank                                          mlslabel                none                     default
tank                                          sync                    standard                 default
tank                                          dnodesize               legacy                   default
tank                                          refcompressratio        1.02x                    -
tank                                          written                 0                        -
tank                                          logicalused             1004G                    -
tank                                          logicalreferenced       997G                     -
tank                                          volmode                 default                  default
tank                                          filesystem_limit        none                     default
tank                                          snapshot_limit          none                     default
tank                                          filesystem_count        none                     default
tank                                          snapshot_count          none                     default
tank                                          snapdev                 hidden                   default
tank                                          acltype                 off                      default
tank                                          context                 none                     default
tank                                          fscontext               none                     default
tank                                          defcontext              none                     default
tank                                          rootcontext             none                     default
tank                                          relatime                off                      default
tank                                          redundant_metadata      all                      default
tank                                          overlay                 off                      default
tank@zfs-auto-snap_monthly-2019-05-13-1847    type                    snapshot                 -
tank@zfs-auto-snap_monthly-2019-05-13-1847    creation                Mon May 13 20:47 2019    -
tank@zfs-auto-snap_monthly-2019-05-13-1847    used                    0B                       -
tank@zfs-auto-snap_monthly-2019-05-13-1847    referenced              953G                     -
tank@zfs-auto-snap_monthly-2019-05-13-1847    compressratio           1.01x                    -
tank@zfs-auto-snap_monthly-2019-05-13-1847    devices                 on                       default
tank@zfs-auto-snap_monthly-2019-05-13-1847    exec                    on                       default
tank@zfs-auto-snap_monthly-2019-05-13-1847    setuid                  on                       default
tank@zfs-auto-snap_monthly-2019-05-13-1847    createtxg               6244379                  -
tank@zfs-auto-snap_monthly-2019-05-13-1847    xattr                   on                       default
tank@zfs-auto-snap_monthly-2019-05-13-1847    version                 5                        -

我嘗試使用 掛載它zfs mount -a,但由於目錄/tank不為空而失敗 - 其他 ZFS 數據集在那裡……

root@pve:~# zpool list -v
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
tank   5.44T   987G  4.47T         -     1%    17%  1.00x  ONLINE  -
 ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M1KZNLPE  1.81T   326G  1.49T         -     1%    17%
 ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M1YV1ADT  1.81T   329G  1.49T         -     1%    17%
 ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M2CE10DJ  1.81T   332G  1.49T         -     1%    17%

如果磁碟名稱更改,zpool 不會被破壞。池很可能不會自動導入,但不應破壞數據。除非有一個腳本或機制在塊設備和路徑上做事/dev/sda是硬編碼的,並且事情在沒有健全性檢查的情況下執行。但通常您的數據是安全的。

導入池zpool import -d /dev/disk/by-id <pool-name>也可以保存使用。不需要重新同步,據我所知,/etc/zfs/zpool.cache文件已更新為新路徑和磁碟元數據。

引用自:https://unix.stackexchange.com/questions/519653