Почему ZFS RAIDZ2 использует только 2 ГБ данных, когда я создаю файл размером 1 ГБ?

Почему ZFS RAIDZ2 использует только 2 ГБ данных, когда я создаю файл размером 1 ГБ?

Я создал файловую систему 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

У меня есть файл размером 1 ГБ

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

Я думал, что два диска четности будут означать, что я храню сам файл + два лота четности = 3 ГБ хранилища в общей сложности для файла размером 1 ГБ, но выделено только 2 ГБ.

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/зеркалирование с той же эффективностью использования пространства, но с более высокой эффективностью пропускной способности (и меньшей устойчивостью, как прокомментировал Ромео Нинов). RAID-Z2 или RAID 6 становятся более эффективными с большим количеством дисков: при общем количестве в десять дисков восемь могут эффективно использоваться для данных, и только два по-прежнему будут использоваться для избыточности.

решение2

Ситуация такова (объясняю для понимания, очень упрощенно):

Предположим, что ZFS использует блоки по 512 МБ. Таким образом, вы сохраняете на диске 1 512 МБ (первую часть файла), на диске 2 вы сохраняете следующие 512 МБ, на четности 1 вы сохраняете следующий блок размером 512 МБ (так что вы можете восстановить файл только с помощью диска 1 и четности 1, например), на четности 2 вы сохраняете еще 512 МБ, так что вы можете восстановить файл с помощью диска 1 и четности 2.

Вот что вам нужно, чтобы получить полный файл:

  • д1+д2
  • д1+п1
  • д1+п2
  • д2+п1
  • д2+п2
  • п1+п2

Если у вас, например, 5 дисков (RAIDZ2) и есть блок 333 МБ, то такие блоки будут на диске 1, 2, 3, четность 1 и 2. В сумме 1666 МБ

Связанный контент