这是关于 Linux (CentOS 7) 上的 zfs 的问题。我有一个非常简单的设置,有两个 8 TB 磁盘,一个磁盘镜像另一个。
zpool create -f -o ashift=12 $zpoolName 镜像 $disksById
根据 zpool 手册页,如果需要更换其中一个磁盘,则替换磁盘的大小必须等于或大于配置中两个磁盘中最小的一个。据我了解,不同品牌和型号(和型号修订)的驱动器之间的确切大小通常会有所不同,即使它们都标记为 8 TB。但是,我希望能够用任何其他 8 TB 磁盘替换它,不一定要使用相同的品牌和型号。
我如何实现这一目标?
我本来希望 zpool create 命令有一个选项,以便不是整个磁盘都用于池,而是留下一些松弛,但是我找不到这样的选项。我看到的唯一建议是在创建池之前对磁盘进行分区,创建一个“池”分区和一个“松弛”分区,但我读过这会影响磁盘性能,因为磁盘缓存无法正确使用zfs,所以我想我想避免这种情况。
这是正确的答案。
这是一种误解。如果分区未对齐,则使用分区而不是完整磁盘只会影响性能,如果您使用模糊的现代分区编辑器,这通常需要用户做出一些真正的决定。Linux 和 BSD fdisk、sfdisk 和 gparted 都了解分区边界并在其中工作,除非完全被迫不这样做。
此外,如果您仔细查看已被整个馈送到 zfs 的磁盘,您会注意到zfs实际上已经对其自身进行了分区。例子:
如您所见,ZFS 已经对池中的原始磁盘进行了分区。池使用分区 1;分区 9 保持松弛。
sdd9
是 16384 个扇区。这是一个 4K 磁盘,因此大小为 64M,并且任何比现有磁盘小不超过 63M 的磁盘都可以作为该磁盘的替代品,如果它发生故障的话。这确实是处理它的唯一解决方案。您不必创建第二个小分区,该空间可以保持未分区。由于磁盘之间的差异通常很小,因此您只会丢失几兆字节,这在 8TB 磁盘上没有问题。
另一种选择是只购买完全相同型号的磁盘(通常不建议,因为制造中的系列故障仅影响一个型号);或者从最小的磁盘开始,只用更大的磁盘替换,但这会花费你更多的空间,并且可能在一段时间后就不可能了。