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

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

我已经创建了一个 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

我有一个 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

我以为两个奇偶校验磁盘意味着我存储了文件本身 + 两批奇偶校验 = 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  -

答案1

使用四块磁盘中的两块实现冗余,您可以简单地将用户数据翻倍:两块磁盘存储原始数据,而其他两块磁盘上的相同空间用于冗余数据。奇偶校验实际上是使用条带化分布在所有磁盘上的,但这不会改变占用的空间。

有了这些磁盘,您可以使用 RAID 1/镜像,空间效率相同,但吞吐效率更高(Romeo Ninov 曾评论过,但弹性更低)。RAID-Z2 或 RAID 6 的磁盘越多,效率就越高:总共十个磁盘,其中八个可以有效用于数据,而只有两个用于冗余。

答案2

情况是这样的(解释一下,非常简单):

假设 ZFS 使用 512MB 块。因此,您在磁盘 1 上存储 512MB(文件的第一部分),在磁盘 2 上存储下一个 512MB,在奇偶校验 1 上存储下一个 512MB 块(因此,例如,您只能使用磁盘 1 和奇偶校验 1 来恢复文件),在奇偶校验 2 上存储另一个 512MB,因此,您可以使用磁盘 1 和奇偶校验 2 来恢复文件。

以下是获取整个文件所需的启动和运行情况:

  • d1+d2
  • d1+p1
  • d1+p2
  • d2+p1
  • d2+p2
  • 点1+点2

例如,如果您有 5 个磁盘(RAIDZ2),并且有 333MB 的块,那么您将在磁盘 1、2、3、奇偶校验 1 和 2 上有这样的块。总计 1666MB

相关内容