偶然,我使用/dev/sda
等等创建了一个zpool。我知道这是一个坏主意;我只是想测试我的设置。事实证明,它运行得非常好,我忘记了设备名称并开始使用我的 zpool 作为 NAS,仍然使用sda
、sdb
和。我的操作系统运行于.所以我的 zpool 已经充满了一些数据,准确地说大约是 16 TB。所以我想知道是否可以修改现有池以按 ID 而不是按名称使用磁盘?sdc
sdd
sde
sdX
我的NAS已经连续运行了大约1年,并且从未重启过。如果我现在重新启动并且某些磁盘名称会更改,我的 zpool 是否会被破坏? (例如,因为我后来添加了一些新磁盘)
我读到可以使用
zpool export
和
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%
答案1
如果磁盘名称更改,zpool 不会被破坏。池很可能不会自动导入,但数据不应被破坏。除非有一个脚本或机制可以在块设备和路径上执行诸如/dev/sda
硬编码之类的操作,并且运行时无需进行健全性检查。但通常您的数据是安全的。
导入池zpool import -d /dev/disk/by-id <pool-name>
也可以节省使用。不需要重新同步,据我所知/etc/zfs/zpool.cache文件也会使用新路径和磁盘元数据进行更新。