为什么当我创建 1GB 文件时,ZFS RAIDZ2 仅使用 2GB 数据

Pre*_*cks 4 zfs raid6 zpool

我创建了一个 ZFS RAIDZ2 / Raid 6 文件系统,我相信它将在 2 个磁盘上存储奇偶校验。

root@zfs-demo:/data# zpool status
  pool: data
 state: ONLINE
config:

        NAME        STATE     READ WRITE CKSUM
        data        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

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

我有一个 1GB 的文件

root@zfs-demo:/data# ls -alh
total 1023M
drwxr-xr-x  2 root root    3 Dec 17 18:22 .
drwxr-xr-x 19 root root 4.0K Dec 17 18:10 ..
-rw-r--r--  1 root root 1.0G Dec 17 18:22 1GB.bin
Run Code Online (Sandbox Code Playgroud)

我认为两个奇偶校验磁盘意味着我正在存储文件本身 + 两批奇偶校验 = 1 GB 文件总共 3 GB 的存储空间,但只分配了 2GB。

root@zfs-demo:/data# zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
data  39.5G  2.01G  37.5G        -         -     0%     5%  1.00x    ONLINE  -
Run Code Online (Sandbox Code Playgroud)

Zac*_*c67 8

使用四分之二的磁盘进行冗余,您可以简单地将用户数据加倍:两个磁盘存储原始数据,而另外两个磁盘上的相同空间用于冗余数据。奇偶校验实际上使用条带化分布在所有磁盘上,但这不会改变占用的空间。

对于磁盘数量,您可以使用 RAID 1/镜像,具有相同的空间效率,但吞吐量效率更高(并且弹性较低,正如 Romeo Ninov 所评论的那样)。磁盘数量越多,RAID-Z2 或 RAID 6 的效率就越高:总共有 10 个磁盘,其中 8 个可以有效用于数据,但仍然只有 2 个用于冗余。

  • 如果您所说的镜像指的是 RAID10(我们谈论的是 4 个磁盘),如果两个磁盘发生故障并且它们是一个子镜像的一部分,那么您就会遇到麻烦。但 RAID6 可以在 2 个磁盘丢失的情况下正常工作,不会出现任何问题。 (2认同)
  • 虽然奇偶校验 RAID 的效率随着磁盘数量的增加而提高,但有效弹性与码率成反比(IOW,当数据磁盘与总磁盘的比率接近 1 时,一次丢失足够多的磁盘导致整个阵列丢失的概率也接近 1) )。这就是 RAID-Z3 存在的部分原因,也是为什么非常大的 ZFS 池的标准是使用多个较小的阵列而不是一个非常大的阵列。大多数明智的管理员不会考虑在单个 RAID6 阵列中使用十个磁盘,而只会考虑两个五磁盘 RAID5 阵列(甚至两个五磁盘 RAID6 阵列)。 (2认同)
  • @AustinHemmelgarn 与 Romeo 评论中的 RAID10 与 RAID6 类似,对于相同数量的磁盘,RAID50 的弹性不如 RAID6。 (2认同)