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