我已经创建了一个 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 -
使用四分之二的磁盘进行冗余,您可以简单地将用户数据加倍:两个磁盘存储原始数据,相同的空间用于其他两个磁盘上的冗余数据。奇偶校验实际上使用条带化分布在所有磁盘上,但这不会改变占用的空间。
有了磁盘数量,您可以使用 RAID 1/镜像,具有相同的空间效率,但吞吐量效率更高(并且弹性更低,正如 Romeo Ninov 评论的那样)。RAID-Z2 或 RAID 6 的磁盘数量越多,效率越高:总共有 10 个磁盘,其中 8 个可以有效地用于数据,只有 2 个用于冗余。
情况是(解释明白了,非常简单)是这样的:
假设 ZFS 使用 512MB 块。因此,您在磁盘 1 上存储 512MB(文件的第一部分),在磁盘 2 上存储下一个 512MB,在奇偶校验 1 上存储下一个 512MB 块(例如,您只能使用磁盘 1 和奇偶校验 1 恢复文件),在奇偶校验上2 您存储了另外 512MB,以便您可以使用磁盘 1 和奇偶校验 2 恢复文件。
这是您需要启动并运行以获取整个文件的内容:
例如,如果您有 5 个磁盘 (RAIDZ2) 和块 333MB,您将在磁盘 1、2、3、奇偶校验 1 和 2 上有这样的块。总计 1666MB