ZFS 按 id 替换磁盘

T. *_*ess 2 zfs

偶然地,我使用/dev/sda等创建了一个 zpool 。我知道这是个坏主意;我只是想测试我的设置。原来,它的工作这么好,我忘了设备名称,并开始使用我的zpool作为NAS,仍与sdasdbsdcsdd。我的操作系统从sde. 所以我的 zpool 已经充满了一些数据,准确地说是 16?TB 左右。所以我想知道是否可以修改现有池以按 id 而不是按名称使用磁盘?sdX

我的 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                        -
Run Code Online (Sandbox Code Playgroud)

我试图用 挂载它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%
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 6

如果磁盘名称更改,则 zpool 不会被破坏。池很可能不会自动导入,但不应破坏数据。除非有一个脚本或机制可以在块设备和路径上做事,比如/dev/sda硬编码,并且事情在没有健全性检查的情况下运行。但通常您的数据是安全的。

导入池zpool import -d /dev/disk/by-id <pool-name>也可以保存使用。不需要重新同步,据我所知,/ etc/zfs/zpool.cache文件已更新为新路径和磁盘元数据。