![添加更多 vdev](https://linux22.com/image/157477/%E6%B7%BB%E5%8A%A0%E6%9B%B4%E5%A4%9A%20vdev.png)
我正在规划一个存储服务器,用户将在其中存储多达 20 TB 的数据。由于我在 Linux 上使用 ZFS 取得了一些良好的经验,因此我想使用它。但是,我知道数据量每年会增长数百 GB,因此在某些时候,我需要增加池大小。由于数据量如此之多,想要彻底销毁zpool并重新创建恐怕会相当麻烦;所以我想知道是否可以通过添加更多磁盘并保留现有磁盘来增加池容量。该池至少是 RAIDZ-1。或者是否真的需要一个接一个地移除磁盘并更换为更大的磁盘?不,我不敢相信。比我的服务器更大的服务器如何应对日益增长的存储容量需求?
答案1
增长 ZFS 池基本上有两种方法。
添加更多 vdev
这是什么user1133275 在他们的答案中建议。它已经完成zpool add
(它的语法与指定存储的语法基本相同zpool create
),并且它的工作效果很好。
ZFS 不会自动重新平衡您存储的数据,但它会开始将任何新数据写入新的 vdev,直到新 vdev 的使用情况与现有 vdev 大致相同。
将 vdev 添加到池后,如果不从头开始重新创建池,则基本上无法将其删除。
池中的所有 vdev 都需要高于其各自的冗余阈值,池才能导入。换句话说,每个 vdev 至少需要DEGRADED
保证池才能正常运行。
更换更大的磁盘
这就是你在问题中讨论的内容。当您拥有满意的池布局时,这是扩展 ZFS 池的正常方法。
要更换新设备,新设备至少需要与旧设备一样大。
在操作上,您可以将新磁盘与旧磁盘连接起来,然后将zpool replace
旧磁盘与新磁盘连接起来。 (这将创建一个临时replacing
设备,该设备将成为旧磁盘和新磁盘的父级;当重新同步完成时,该replacing
设备将从设备树中删除,并且看起来新设备一直在那里。)重新同步完成后,旧设备将被删除。磁盘可以从系统中删除。
一旦 vdev 中的所有磁盘都被更大的磁盘替换,您可以通过运行zpool online -e
或将autoexpand
属性设置为 来扩展池on
(尽管我并不真正推荐后者;池扩展应该是一个有意识的决定)。
那么哪种方式更好呢?
这基本上取决于你的池。如前所述,拥有多个 vdev 的缺点是它们都需要正常运行,因此从某种意义上来说,添加 vdev 实际上会降低安全裕度。不过,好处是,零碎地扩大泳池要容易得多。就地更换设备基本上是相反的;您不需要保持尽可能多的 vdev 正常运行,但零散地扩展池并不那么容易。
对我来说,坦率地说,假设您使用的是旋转硬盘(因为这看起来像大容量存储),对于单个 vdev 池来说 20 TB 仍然是合理的。针对你的情况我的建议是获得 6 个 8 TB 类型的驱动器,并将它们设置在单个 raidz2 vdev 中。这样做可以为您提供约 32 TB 的净存储容量,从而为您留下约 35% 的初始可用空间,并且可以在任何数据面临重大风险之前丢失任何两个驱动器。您还可以考虑运行八个 6 TB 驱动器,以获得约 36 TB 的净存储容量,并以 45% 的免费空间开始。 (我认为 6-8 个驱动器对于 raidz1 来说稍微有点大,但对于 raidz2 来说还不错。)然后计划按照 4-5 年计划(由于磨损)或每当池超出时更换这些驱动器大约 80% 已满(因为当 ZFS 拥有良好的空间时,它会非常非常高兴)。如果您的数字准确,您应该在池开始变满之前更换因磨损而导致的驱动器,同时仍然允许存储需求出现合理数量的意外增长。更换驱动器时,您可以根据当时的使用情况决定是否对现有的池大小感到满意,或者是否想要获得更大的驱动器并扩展池。
答案2
除了上面优秀答案中的选项之外,很快就会有另一个选项。
OpenZFS 项目(Linux 上的 ZFS、FreeBSD 上的 ZFS)正在开发一项功能,允许向现有 RAID-Z vdev 添加新的物理设备。例如,这将允许将 6 驱动器 RAID-Z2 vdev 扩展为 7 驱动器 RAID-Z2 vdev。这将在文件系统在线时发生,并且在扩展完成后可重复(例如,7 驱动器 vdev → 8 驱动器 vdev)。
截至 2020 年 9 月,此功能仍在开发中:https://github.com/openzfs/zfs/pull/8853截至 2022 年 10 月,此功能仍在开发中:https://github.com/openzfs/zfs/pull/12225截至 2023 年 7 月,此功能仍在开发中:https://github.com/openzfs/zfs/pull/15022截至 2023 年 11 月,此功能已合并到 main 中,并计划在 OpenZFS 2.3 中发布:https://github.com/openzfs/zfs/pull/15022
答案3
在 zfs(以及 btrfs 和 lvm2)中添加空间很容易
zpool add $POOL mirror $A $B
https://docs.oracle.com/cd/E53394_01/html/E54801/gayrd.html#scrolltoc