具有混合磁盘大小的 ZFS RAID 10 池

具有混合磁盘大小的 ZFS RAID 10 池

我有 4 个磁盘:2x2TB 和 2x1TB。所有磁盘的 RPM 和制造商都相同,均为 7200。操作系统是 Ubuntu 16.04。我想创建一个 RAID 10 池,但我听说混合磁盘大小对 ZFS 来说不是一个好方法 - 如果我错了请纠正我... 那么这 3 个选项中哪个更好(“m”表示镜像):

  1. 整个磁盘镜像:(2TB m 2TB)+(1TB m 1TB)。
  2. 将 2TB 磁盘分成 1TB 分区:(1TB m 1TB) + (1TB m 1TB) + (1TB m 1TB)。
  3. 两个独立的池:(2TB m 2TB)和(1TB m 1TB)。

我个人不太喜欢第三个选项,但也许它是最稳定的?我是 ZFS 的新手,请提出建议。

我制作了一张图片来说明第二种选择:

选项 2 的图片

答案1

在回答您的问题之前,先声明一下:显然,使用重复的硬件是最简单的。值得注意的是,即使您的设备来自同一制造商并且具有相同数量的 RPM,对于给定的 IO 大小,它们之间的吞吐量也会有所不同(因为 2TB 驱动器可能具有更高的每环字节密度),并且 IOPS 数量在它们之间将是相同的,即使 2TB 驱动器在随机读取情况下的命中频率是 2 倍。基本上,您无论如何都会获得不对称的性能,其中 2TB 磁盘在大型 IO 上的表现要好约 2 倍,而 1TB 磁盘在短随机 IO 上的表现要好约 2 倍。

我将假设您不想出售 1TB 硬盘来购买另一个 2TB 硬盘,然后回答这个问题。从您的问题中,我无法真正判断出您想要的复制级别是多少?无论如何,您都应该尝试遵循以下两个准则:

  1. 最好让 ZFS 配置完整的磁盘zpool,因为一个驱动器发生故障时的故障语义比两个分区同时发生故障(当它们所在的磁盘都发生故障时)要简单得多。
  2. 如果池中的顶级节点是条带化的,则稍后将新磁盘添加到池中是最容易的vdev。这样,您始终可以同时添加重复的新设备组,而它们的大小是否与池中现有设备的大小匹配并不重要。

如果您想要一个 2 磁盘镜像,那么选项 1 对我来说似乎是最好的。如果您购买了另一块磁盘,请购买第二块相同类型的磁盘,并将它们都添加为此树中的条带节点下的新镜像:

striped
    mirror
        2TB
        2TB
    mirror
        1TB
        1TB

如果您想要一个 3 磁盘镜像,您可以像这样进行镜像,但稍后添加设备会更难(将它们添加为另一个镜像?将它们添加为 1TB 区域下的另一个条带?):

mirror
    2TB
    2TB
    striped
        1TB
        1TB

如果您想做 RAID-Z,我建议不要使用不同大小的设备,或者您可以购买更多的 2TB 和 1TB 设备并跨多个 RAID-Z 组进行条带化。

在 ZFS 中复制数据的另一种方法是copies=N在池中的文件系统上设置。这可能对您的用例很有吸引力,但请注意,它并不能解决所有数据丢失问题——设备​​级故障仍会导致无法使用整个池。(这种方法的主要用例是磁盘内的损坏。)

答案2

我建议使用 raid10:mirror-0 2TB & 1TB mirror-1 2TB & 1TB

为了实现这一点,您需要先创建一个具有 1TB 的 raid0,然后执行两次 zpool attachment 以将每个 2TB 驱动器附加到每个 1TB 驱动器。这可以均衡两个镜像上的负载。确保设置自动扩展以供将来扩展。您最终将获得大约 ~2TB 的空间。

相关内容