
私は 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
2 つのパリティ ディスクは、ファイル自体と 2 つのパリティ = 1 GB のファイルに対して合計 3 GB のストレージを保存することを意味すると考えていましたが、割り当てられているのは 2 GB だけです。
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
4 つのディスクのうち 2 つを冗長性のために使用すると、ユーザー データを単純に 2 倍にすることができます。つまり、2 つのディスクに元のデータを保存し、同じスペースを他の 2 つのディスクの冗長データに使用します。パリティは実際にはストライピングを使用してすべてのディスクに分散されますが、占有されるスペースは変わりません。
ディスクの数に応じて、同じスペース効率でスループット効率が向上する RAID 1/ミラーリングを使用できます (Romeo Ninov がコメントしているように、回復力は低くなります)。RAID-Z2 または RAID 6 は、ディスクの数が増えるほど効率が上がります。合計 10 個のディスクのうち、8 個はデータに効果的に使用でき、冗長性に使用できるのは 2 個だけです。
答え2
状況は(理解しやすいように非常に簡略化して説明すると)次のようになります。
ZFS が 512MB のブロックを使用すると仮定します。したがって、ディスク 1 に 512MB (ファイルのパート 1) を保存し、ディスク 2 に次の 512MB を保存し、パリティ 1 に次の 512MB のブロックを保存し (したがって、たとえば、ディスク 1 とパリティ 1 のみでファイルを復元できます)、パリティ 2 に別の 512MB を保存し、ディスク 1 とパリティ 2 でファイルを復元できるようにします。
ファイル全体を取得するには、次のものが必要です。
- d1+d2
- d1+p1
- d1+p2
- d2+p1
- d2+p2
- p1+p2
たとえば、5つのディスク(RAIDZ2)があり、ブロックが333MBある場合、ディスク1、2、3、パリティ1、2にそのようなブロックがあります。合計1666MB