ZFS RAID-Z2 需要多少个驱动器?

15 raid hard-drive zfs

如果我想使用 RAID-Z2,需要多少存储空间?我正在构建一个家庭服务器,它将运行带有 ZFS 文件系统的 FreeNAS,目前计划安装 3 个 3TB 硬盘。

  • RAID-Z2 可以解决这个问题吗?
  • 我需要降级到 RAID-Z1 吗?
  • RAID-Z2 需要多少个驱动器?

use*_*ser 23

RAID-Z2 的工作原理是将提供给 vdev 的驱动器使用其中的两个来存储冗余数据,以便在出现问题时进行恢复。

因此,RAID-Z2 vdev 中驱动器的绝对最小数量是两个冗余驱动器加一个,即三个驱动器。

但是,通过这样做,您可以:

  • 仅获得其中一个驱动器的有效存储容量
  • 可以丢失所涉及的三个驱动器中的任意两个而不会丢失数据(在一般情况下,您可以在 N 驱动器 RAID-Z2 vdev 中丢失任何 2 个驱动器中幸存下来)
  • 强制系统计算 RAID-Z2 的奇偶校验数据

如果您想要一个包含三个驱动器的 vdev,或者如果您有三个并且想要两个驱动器的冗余,那么将它们设置为镜像可能会更好。这样,你:

  • 仅获得一个驱动器的有效存储容量(无论镜像设备的数量如何)
  • 可以承受所涉及的三个驱动器中的任何两个丢失而不会丢失数据(在一般情况下,您可以在 N 驱动器镜像 vdev 中的任何 N-1 个驱动器丢失中幸存下来)
  • 避免奇偶校验数据计算,因为镜像是彼此位相同的副本;将相同的数据写入多个磁盘比计算单独的奇偶校验数据并将其写入磁盘便宜得多

驱动器的最小数,其中RAID-Z2是有道理的是四,它给你的两个驱动器的有效存储容量,使失去任何驱动器中的两个。这比在 2x2 镜像设置中使用相同的四个驱动器更有优势,因为如果您有两个镜像 vdev,每个镜像 vdev 并且丢失了两个驱动器的某些组合,则该 vdev 已死,并在其火热消亡时带走了池。在 2x2 镜像 vdev 池中,每个镜像对中至少有一个驱动器必须保持正常运行,池才能保持可用。然而,镜子很可能有更好的性能。与往常一样,这是不同选择之间的权衡,系统管理员工作描述的一部分是针对每种特定情况做出适当的权衡。

因此,虽然 RAID-Z2 在技术上可能适用于您描述的设置,但与简单的三向镜像配置相比,它没有任何优势,甚至有一些缺点。

如果 ZFS 允许我们动态更改 RAID-Zn vdev中设备的冗余级别或增加设备数量,情况会有所不同,但事实并非如此。实际增加池的唯一方法是添加更多 vdev 或增加现有设备的大小,而不是将设备添加到现有 vdev。(您可以在镜像 vdev 中添加和删除设备,但这只会更改冗余量,而不是可用存储容量。)

您还可以将三个驱动器设置为 RAID-Z(1) vdev,这将使您能够在任何一个驱动器丢失之前幸免于难,如果出现任何进一步问题,则减少 CPU与 RAID-Z2 相比,工作负载更大(因为 RAID-Z1 奇偶校验计算的计算密集度较低),并为您提供两个驱动器组合的有效存储容量。

请始终记住,如果出现任何问题,完整的 ZFS 重新同步对于剩余磁盘来说是一个艰巨的过程,另一个磁盘出现问题甚至在压力下死亡也并非闻所未闻。出于这个原因,特别是对于当今常见尺寸的旋转驱动器,如果您真的很偏执,双冗余应该是默认选择,三冗余是一个选项。应仅对可以容忍停机时间的不太重要的数据考虑单一冗余。但是,对于 SSD 支持的池,单冗余可能是可以接受的。

因此我的建议是:如果您想要三个驱动器 ZFS,并且想要冗余,请将它们设置为三向镜像 vdev。如果您想要 RAID-Z2,请至少使用四个驱动器,但请记住,您在创建 vdev 时锁定了 vdev 中的驱动器数量。目前,增加 ZFS 池的唯一方法是添加额外的 vdev,或增加构成 vdev 的设备的大小,或创建新池并传输数据。您无法通过向现有 vdev 添加设备来增加池的存储容量。

您还需要确保保留备份这对于 ZFS 来说是双重重要的,因为在使池低于其冗余阈值的实际故障之后,ZFS 恢复非常困难。ZFS 有一个非常复杂的磁盘格式,我不知道任何常见的现成数据恢复软件的理解,所以即使你可以读取磁盘上的大部分数据,如果 ZFS 无法弄清楚那么除非你愿意在这个问题上花费数万美元,否则你很可能不走运。备份更便宜。

作为三路镜像的替代方案,您也可以运行带有备用的双向镜像,但大多数情况下,当然在您描述的情况下,这没有优势也有一些劣势

顺便说一句,与恢复问题相关,您应该强烈考虑在任何运行校验和自修复文件系统(包括 ZFS)的系统中使用 ECC RAM。其他人同意。

显示具有三个设备的 RAID-Z2 是可能的(这是 Linux 0.6.4 上的 ZFS)。请注意,在硬删除三个支持文件中的两个后,“存在足够的副本供池继续在降级状态下运行。” 而 vdev 是DEGRADED,不是FAULTED

# truncate -s 1G /root/d1 /root/d2 /root/d3
# zpool create tank raidz2 /root/d1 /root/d2 /root/d3
# zpool status tank
  pool: tank
 state: ONLINE
  scan: none requested
config:

        NAME          STATE     READ WRITE CKSUM
        tank          ONLINE       0     0     0
          raidz2-0    ONLINE       0     0     0
            /root/d1  ONLINE       0     0     0
            /root/d2  ONLINE       0     0     0
            /root/d3  ONLINE       0     0     0

errors: No known data errors
# zpool export tank
# rm /root/d1 /root/d2
# zpool import tank -d /root
# zpool scrub tank
# zpool status tank
  pool: tank
 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://zfsonlinux.org/msg/ZFS-8000-2Q
  scan: scrub repaired 0 in 0h0m with 0 errors on Tue Mar 29 11:00:23 2016
config:

        NAME                      STATE     READ WRITE CKSUM
        tank                      DEGRADED     0     0     0
          raidz2-0                DEGRADED     0     0     0
            18130982121682915530  UNAVAIL      0     0     0  was /root/d1
            18289483070703159278  UNAVAIL      0     0     0  was /root/d2
            /root/d3              ONLINE       0     0     0

errors: No known data errors
# 
Run Code Online (Sandbox Code Playgroud)