Рейд массивы в ZFS

RAID-Z представляет собой схему организации данных и четности, подобную RAID-5, но использующую динамический размер сегмента. По сути, каждый логический блок файловой системы — это сегмент RAID-Z, независимо от размера блока. Это значит, что каждая запись RAID-Z — это запись полного сегмента. Добавьте к этому копирование при записи в транзакционной семантике ZFS, и вы полностью избавитесь от «окна уязвимости» RAID. Кроме этого, RAID-Z быстрее обычного RAID, так как здесь не требуется читать данные, менять их, а потом снова записывать.

Такая возможность появилась в версии Solaris 10 от 11/06 или в ZFS Pool версии 3.

Примечание.

В Solaris 11 добавлена возможность создавать raidz3 — аналогично как и raidz2, но уже с 3-мя дисками.

То есть по сути это RAID-5, но с некоторыми особенностями самой ZFS. Этот рейд может выдержать выход из строя только одного носителя. Для того, что бы использоваться возможность работоспособности при выходе 2-х носителей, используйте технологию raidz2. Это так сказать аналог RAID-6. Ну и конечно для любителей зеркал (RAID-1) существует технология mirror.

Так же хочу заметить, что текущая реализация ZFS поддерживает добавления дисков в рейд массивы, использовать hot spare диски, но не позволяет изменять тип рейда. К примеру, нельзя перейти с типа raidz2 в mirror.

И так, приступим к созданию массивов. Создадим к примеру 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 время от времени.

Рейд массивы в ZFS: 6 комментариев

  1. Евгений

    zpool create tank raidz2 c1t0d0 c2t0d0 c3t0d0
    c1t0d0 — Это имена новых дисков, физических? как получить такое имя?
    и у вас указанно их три это так понимаю при raidz2? если я делаю миррор то указываю zpool create tank raidz2 c1t0d0 c2t0d0 так? т.е два?

    1. skeletor Автор записи

      Посмотреть имена дисков можно или через iostat -En или через команду format.
      Для mirror: zpool create tank mirror c1t0d0 c2t0d0

      1. Евгений

        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

  2. mitiok

    # zpool create tank raidz2 c1t0d0 c2t0d0 c3t0d0
    6-ой рейд из трёх дисков? вы подделали весь вывод команды или оно действительно что-то сделало? интересно, что?

    1. skeletor Автор записи

      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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *