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