创建一个带有 4k 磁盘的 zfs raidz2

创建一个带有 4k 磁盘的 zfs raidz2

我想创建一个有 4 个磁盘的 zfs raidz2。我知道这会“浪费”至少 50% 的空间,但我的目标是对磁盘故障具有较高的容忍度。不建议为 raidz2 使用 5 个磁盘,而 6 个磁盘对我来说太昂贵且没有必要。我将有 3 TB(或可能是 4 TB)磁盘,它们都有 4k 扇区和 512 字节模拟。

我已经阅读了很多关于 zfs 和 raidz2 的文章,我开始感到困惑。

我应该对磁盘进行分区吗? 我读到,创建分区是让操作系统知道磁盘不为空的好主意。分区还可以帮助对齐 4k 扇区。

GPT 还是 MBR?据我所知,GPT 对于 3 TB 磁盘(及更大)是必需的。

我应该如何创建分区?这会给我一个正确对齐的分区吗? sudo parted --align optimal /dev/sdX mklabel gpt mkpart primary 1 0% 3TB

附加问题:创建的分区将mkpart primary 1 0% 3TB有多大?会有多大3*10^12 - 4096 byte

我的目的是不使用磁盘的全部大小,而是将其限制为 3 TB,以便能够用不同型号的驱动器替换故障的驱动器。

ashift=12如果我有对齐的分区,我还需要吗?它没用吗?它会对我造成伤害吗?

条带尺寸怎么样?我需要修改吗?如果我使用 5 个磁盘而不是 4 个磁盘会怎样?

还有什么我应该考虑的吗?

答案1

如果您的磁盘报告了错误的值,您需要手动设置 ashift,过渡期内的所有磁盘都是这种情况(内部为 4K,逻辑上为 512)- 较早的磁盘报告正确的 512,较晚的磁盘报告正确的 4k。当然,您可以随时指定它,它只会覆盖磁盘本身向系统报告/建议的内容。

如果您不确定,您也可以创建一个池,记下可用大小,然后销毁它,将所有磁盘上的 ashift 设置为 12,再次创建它并比较大小。如果大小相等,则表明您的磁盘内容是真实的。

仅当您的磁盘无法正确识别或您想要获得比可能更小的磁盘大小时,才需要对磁盘进行分区。

答案2

Linux 上的 ZFS 将自动对磁盘进行分区。以前,它没有这样做。它看起来像这样:

Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 2E55AB8A-8B22-494E-A971-B6D639BA14B1

Device          Start        End    Sectors   Size Type
/dev/sdb1        2048 1953507327 1953505280 931.5G Solaris /usr & Apple ZFS
/dev/sdb9  1953507328 1953523711      16384     8M Solaris reserved 1

此外,它可能会ashift自动使用正确的值。我的 SSD 有 13,上面的 HDD 有 12,正如预期的那样。

只需执行以下操作:

zpool create tank raidz2 sda sdb sdc sdd

然后检查zdb是否ashift正确。

相关内容