ZFS 通过 id 替换磁盘

ZFS 通过 id 替换磁盘

偶然,我使用/dev/sda等等创建了一个zpool。我知道这是一个坏主意;我只是想测试我的设置。事实证明,它运行得非常好,我忘记了设备名称并开始使用我的 zpool 作为 NAS,仍然使用sdasdb和。我的操作系统运行于.所以我的 zpool 已经充满了一些数据,准确地说大约是 16 TB。所以我想知道是否可以修改现有池以按 ID 而不是按名称使用磁盘?sdcsddsdesdX

我的NAS已经连续运行了大约1年,并且从未重启过。如果我现在重新启动并且某些磁盘名称会更改,我的 zpool 是否会被破坏? (例如,因为我后来添加了一些新磁盘)

我读到可以使用 zpool exportzpool 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%

答案1

如果磁盘名称更改,zpool 不会被破坏。池很可能不会自动导入,但数据不应被破坏。除非有一个脚本或机制可以在块设备和路径上执行诸如/dev/sda硬编码之类的操作,并且运行时无需进行健全性检查。但通常您的数据是安全的。

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

相关内容