18
июля
2

Программный RAID в FreeBSD, RAID-1 — gmirror



GEOM — модули ядра для работы с дисками, в том числе и создание программных RAID-массивов. Для создания RAID все диски должны в идеале быть одинакового размера, если какой-то диск имеет больший объем, то место, составляющее разницу, использоваться не будет. Лучшим вариантом будет использовать диски одного производителя той же модели. Основное предназначение RAID — избыточность, производительность, надежность, емкость массива. В зависимости от этого массивы и делятся на разные типы, реализованные соответствующими модулями GEOM для их использования:

RAID-0 — чередование записи на разные диски (gstriping), повышается производительность, но отсутствует избыточность;
RAID-1 — зеркалирование дисков (gmirror), содержимое дублируется между дисками;
RAID-3 — чередование с сохранением контрольных сумм на выделенном диске (graid3), когда диск выпадет с рейда, содержимое можно восстановить с помощью контрольных сумм;
RAID-5 — чередование с сохранением контрольных сумм на всех дисках, в отличии от RAID-3 может сразу обслуживать несколько I/O (ввода/вывода) и массив равен сумме всех жестких дисков, с которых он собран;
RAID 0+1 — зеркалирование дисков, разбитых на чередующиеся области, то есть сначала создается виртуальный диск с массива типа RAID0, а потом зеркало его на такой же набор жестких дисков. Этот тип не обеспечивает отказоустойчивости, как RAID 10.
RAID-10 — чередование зеркалированных дисков, то есть после создания зеркальных пар реализуется чередование записи данных по зеркалам. RAID-10 имеет наибольшею производительность, так как вычисление контрольных сумм не производиться.

Инфраструктура GEOM включает в себя команды для взаимодействия с конкретными модулями, хотя можно и использовать общую — «geom» с указанием класса (модуля). К примеру, «geom stripe» идентично «gstripe». Как и любой модуль ядра, перед использованием его нужно загрузить (с помощью аргументов load/unload).

Рассмотрим на практике использование gmirror для создания и манипуляций с RAID-1, то есть зеркалированием/дублированием дисков. Дуплексный режим отличается от зеркалирования тем, что диски в этом режиме подключены к разным каналам и если один канал выйдет из строя, то система продолжит работать.

Изначально для работы зеркалирования нужно загрузить соответствующий модуль и включить его при загрузке, прописав в /boot/loader.conf:

geom_mirror_load="YES"           # RAID1 disk driver 

Зеркало можно создать для дисков на которых есть данные. Разделы диска не должны быть примонтированны во время создания рейда.
В данном случае имеется два диска на один из которых установлена FreeBSD (ad0), который будем зеркалировать на второй (ad2).

 gmirror label -v <название_массива> /dev/<диск>
gmirror label -v gmirr /dev/ad0 

-v — для включения режима отладки;
-b round-robin — можно выбрать алгоритм балансировки, к примеру, round-robin;

Но эту команду не удастся выполнить пока не установить следующий параметр ядра:

sysctl kern.geom.debugflags=16

после перезагрузки он снова примет значение «0».

После создания массива и перезагрузки ОС станут доступны файлы устройств в /dev/mirror/: устройство gmirr с соответствующими разделами, которые можно примонтировать. И для загрузки системы нужно внести соответствующие изменения в /etc/fstab, то есть изменить каждую запись для соответствия разделу виртуального диска. К примеру, /dev/ad0s1a станет /dev/mirror/gmirrs1a, т.е. «ad0» -> «mirror/gmirr». Далее перегружаем систему, и желательно, с уверенностью, что не допустили какой-либо опечатки в fstab-е, а то при загрузке система попросит указать правильный корневой раздел с которого грузится и нужно будет откорректировать /etc/fstab.

Для просмотра состояния дисков, входящих в массив (пока что одного):

 gmirror status

COMPLETE — означает, что информация на дисках синхронизирована;
для добавления диска ad2 в зеркальную пару:

 gmirror insert gmirr /dev/ad2

после чего состояние измениться на DEGRADED и увидим процент выполненной синхронизации между дисками.
Также много полезной информации можно увидеть выполнив:

gmirror list 

При выходе диска из строя для его замены сначала удаляется испорченный диск из зеркала и добавляется новый таким же способом:

 gmirror forget gmirr
gmirror insert gmirr /dev/ad6 

Для полной разборки зеркала и удаления метаданных (данные для работы какого-либо массива с его описанием и текущим состоянием):

 gmirror stop gmirr
gmirror clear /dev/ad0 /dev/ad6 

Удачи Вам в освоении RAID-массивов.

Понравилась статья?
Подписаться на RSS feed
2 комментария:
  1. Андрей 3 мая, 2011

    У меня все получилось однако, когда я попытался все это сделать на терабайтных дисках у меня не получилось.
    Не подскажете как при терабайтных дисках быть?

  2. Nemo 4 мая, 2011

    Успешное создание gmirror от размера дисков не зависит (по крайней мере нигде такого ограничения не встречал). Главное только чтобы диски, которые будут работать в рейде, были одинакового размера (и желательно того же производителя\модели) либо чтобы, подключаемый к зеркалу, новый диск не был меньшего размера.
    Тут для определения проблемы нужно немного больше конкретики: что именно не получилось, на каком шаге и какую ошибку получаете? Возможно, имеет значение на какой версии FreeBSD разворачиваются баталии, какие диски исользуете (к примеру, если они уже были в аппаратном рейде, то он мог сделать свою запись в MBR, которую можно снять только вставив диск в такой же рейд-контроллер), метод балансировки данных между дисками..

Оставить комментарий