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

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

関連情報