即将创建由 14 个 HDD 磁盘组成的 zpool,我看到了选项:
- 可以简单做
zpool create -f -o ashift=12 DATA raidz2 disk1 disk2 ...
或者
- 可以使用例如
parted
在每个驱动器上创建一个最佳对齐的分区,然后执行zpool create -f -o ashift=12 DATA raidz2 disk1-part1 disk2-part2 ...
在两种情况下,数据都得到了最佳对齐,但哪种方法更(可以这么说)符合 ZFS 的要求?
答案1
不管怎样,这都不重要,但有些事情需要注意:
使用整个磁盘:
- 消除(或减少)对齐问题的可能性
- 您删除了偏移量计算来访问分区(这无疑是可以忽略不计的)
- 我看到有人建议“更好,就是这样“或者争论更好的磁盘缓存使用和其他事情,但几乎没有证据支持它......
- 某些系统(例如:Windows)可能不知道如何处理磁盘并将其显示为“未初始化“,这可能会导致混乱或数据丢失
带分区:
- 你可能更容易遇到对齐问题
- 您可以在磁盘上包含其他数据,例如:
/boot
或小型 FAT 文件系统来识别磁盘(如果它是外部/抓取磁盘) - 您可以稍微减小分区大小(例如:在磁盘末尾保留约 100 MB 未分配空间),以适应“结核病“磁盘实际上将呈现为,这意味着替换磁盘“大小相同“可能更符合”等于或大于“ 要求
据我所知,使用分区唯一真正的好处是,减轻对替换磁盘的担忧。只是太小了“供使用,并允许在磁盘上保存其他少量数据(即:/boot
或标识)。
我尝试过这两种方法,在使用中确实没有明显的区别(尽管诚然没有进行广泛的 A/B 测试)。
请记住(至少在 Linux 上),“全磁盘“安装程序实际上会为你创建一个 GPT 分区表,在磁盘末尾有一个~8MiB 的分区,其中包含“Solaris 保留“类型(以解决上面提到的尺寸变化)。它还会将字段设置whole_disk
为true
(参见zdb -l ${pool}
)。
阅读更多:OpenZFS - 整个磁盘与分区
还需要考虑的一点是,14 个磁盘的 vdev 相当大 - 您可能希望将其分成两个或更多个 vdev。这在很大程度上取决于磁盘的大小、冗余级别和相关的重建时间...计划不要希望那样的事就不会发生。
truncate -s 1G a b c d e f g h i
zpool create TEST raidz2 ${PWD}/a ${PWD}/b ${PWD}/c ${PWD}/d raidz2 ${PWD}/e ${PWD}/f ${PWD}/g ${PWD}/h
zpool add TEST log ${PWD}/i
zpool status TEST
pool: TEST
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
TEST ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
/home/attie/box/tmp/a ONLINE 0 0 0
/home/attie/box/tmp/b ONLINE 0 0 0
/home/attie/box/tmp/c ONLINE 0 0 0
/home/attie/box/tmp/d ONLINE 0 0 0
raidz2-1 ONLINE 0 0 0
/home/attie/box/tmp/e ONLINE 0 0 0
/home/attie/box/tmp/f ONLINE 0 0 0
/home/attie/box/tmp/g ONLINE 0 0 0
/home/attie/box/tmp/h ONLINE 0 0 0
logs
/home/attie/box/tmp/i ONLINE 0 0 0
errors: No known data errors
zpool destroy TEST
rm a b c d e f g h i