RAID-Z представляет собой схему организации данных и четности, подобную RAID-5, но использующую динамический размер сегмента. По сути, каждый логический блок файловой системы – это сегмент RAID-Z, независимо от размера блока. Это значит, что каждая запись RAID-Z – это запись полного сегмента. Добавьте к этому копирование при записи в транзакционной семантике ZFS, и вы полностью избавитесь от “окна уязвимости” RAID. Кроме этого, RAID-Z быстрее обычного RAID, так как здесь не требуется читать данные, менять их, а потом снова записывать.
Такая возможность появилась в версии Solaris 10 от 11/06 или в ZFS Pool версии 3.
Примечание 1.
В Solaris 11 добавлена возможность создавать raidz3 – аналогично как и raidz2, но уже с 3-мя дисками.
То есть по сути это RAID-5, но с некоторыми особенностями самой ZFS. Этот рейд может выдержать выход из строя только одного носителя. Для того, что бы использоваться возможность работоспособности при выходе 2-х носителей, используйте технологию raidz2. Это так сказать аналог RAID-6. Ну и конечно для любителей зеркал (RAID-1) существует технология mirror.
Так же хочу заметить, что текущая реализация ZFS поддерживает добавления дисков в рейд массивы, использовать hot spare диски, но не позволяет изменять тип рейда. К примеру, нельзя перейти с типа raidz2 в mirror.
Примечание 2.
Начиная с FreeBSD 12.2 вместо oracle ZFS используется OpenZFS, поэтому, есть некоторые свойства zpool/zfs могут отличаться. К примеру, в версии OpenZFS 2.1 появился новый тип RAID’a – draid. По сути это RAIDZ, но гораздо быстрее и оптимизированнее за счет логического разбиения блоков по всем дискам.
И так, приступим к созданию массивов. Создадим к примеру raidz2:
1) Создание рейда
# zpool create tank raidz2 c1t0d0 c2t0d0 c3t0d0
# zpool status -v tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz2 ONLINE 0 0 0
c1t0d0 ONLINE 0 0 0
c2t0d0 ONLINE 0 0 0
c3t0d0 ONLINE 0 0 0
errors: No known data errors
Если нужно создать raidz1 или “зеркало” то вместо raidz2 пишет raidz1 (или можно просто raidz) или mirror соответственно.
2) Добавление дисков в массив
# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t2d0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
errors: No known data errors
# zpool add tank mirror c0t3d0 c1t3d0
# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t2d0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t3d0 ONLINE 0 0 0
c1t3d0 ONLINE 0 0 0
errors: No known data errors
При этом можно использовать параметр ‘-n’ для выполнение пробного прогона (ставится параметр ‘-n’ после слова ‘add’)
3) Добавление hot spare дисков.
# zpool status
pool: rz2pool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
rz2pool ONLINE 0 0 0
raidz2 ONLINE 0 0 0
c1t9d0 ONLINE 0 0 0
c1t10d0 ONLINE 0 0 0
c1t12d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
c2t2d0 ONLINE 0 0 0
errors: No known data errors
# zpool add rz2pool spare c2t3d0
pool: rz2pool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
rz2pool ONLINE 0 0 0
raidz2 ONLINE 0 0 0
c1t9d0 ONLINE 0 0 0
c1t10d0 ONLINE 0 0 0
c1t12d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
c2t2d0 ONLINE 0 0 0
spares
c2t3d0 AVAIL
errors: No known data errors
4) Замена дисков
# zpool status -v
pool: myzfs
state: ONLINE
scrub: resilver completed with 0 errors on Tue Sep 11 13:47:14 2007
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
errors: No known data errors
Заменить один диск в пуле другим (например, при сбое диска):
# zpool replace myzfs /disk1 /disk3
# zpool status -v
pool: myzfs
state: ONLINE
scrub: resilver completed with 0 errors on Tue Sep 11 13:25:48 2007
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk3 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
errors: No known data errors
5) Переход от RAIDZ к mirror
Очень неплохо описан метод перехода с разных уровней рейда с сохранением данных
Примечание.
Рекомендуется делать zpool scrub время от времени.
6 коментарів “Рейд массивы в ZFS”
zpool create tank raidz2 c1t0d0 c2t0d0 c3t0d0
c1t0d0 – Это имена новых дисков, физических? как получить такое имя?
и у вас указанно их три это так понимаю при raidz2? если я делаю миррор то указываю zpool create tank raidz2 c1t0d0 c2t0d0 так? т.е два?
Посмотреть имена дисков можно или через iostat -En или через команду format.
Для mirror: zpool create tank mirror c1t0d0 c2t0d0
root@fatherbot:/# iostat -EN
Usage: iostat [ options ] [ [ ] ]
Options are:
[ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ]
[ [ [ -T ] -g ] { […] | ALL } ]
[ -p [ [,…] | ALL ] ]
root@fatherbot:/# iostat
Linux 2.6.32-37-pve (fatherbot) 06/11/2015 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.68 0.00 0.46 3.31 0.00 95.55
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdc 0.69 2.76 0.00 1044 0
sdb 16.01 107.53 455.25 40608 171928
sdd 0.69 2.76 0.00 1044 0
sda 15.25 96.18 455.25 36324 171928
sde 0.69 2.77 0.00 1048 0
zd0 0.75 2.13 19435.55 804 7340028
root@fatherbot:/# format
-bash: format: command not found
так у вас Linux? тогда смотрите ls /dev/sd*
# zpool create tank raidz2 c1t0d0 c2t0d0 c3t0d0
6-ой рейд из трёх дисков? вы подделали весь вывод команды или оно действительно что-то сделало? интересно, что?
root@solaris:/export/home/skeletor# mkfile 100m file1
root@solaris:/export/home/skeletor# mkfile 100m file2
root@solaris:/export/home/skeletor# mkfile 100m file3
root@solaris:/export/home/skeletor# zpool create test raidz2 /export/home/skelet
or/file1 /export/home/skeletor/file2 /export/home/skeletor/file3
root@solaris:/export/home/skeletor# zpool status test
pool: test
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
/export/home/skeletor/file1 ONLINE 0 0 0
/export/home/skeletor/file2 ONLINE 0 0 0
/export/home/skeletor/file3 ONLINE 0 0 0