Программный RAID1 gmirror во FreeBSD

Не всегда имеется возможность установить аппаратный RAID, да и не всегда он нужен. Особенно псевдо аппаратные рейды, которых сейчас полно, эти RAID контроллеры зарекомендовали себя самым худшим образом. А вот полностью программный RAID gmirror показал себя наилучшим образом. И везде где нет необходимости или возможности установить аппаратный RAID я использую gmirror.

Настройка его довольно проста, рекомендую только делать настройку, до того как на сервер попадут данные, лучше всего настраивать gmirror сразу после установки FreeBSD.

В первую очередь нужно установить переменную sysctl:

sysctl kern.geom.debugflags=17

После этого, ядро FreeBSD разрешит выполнять операции geom с дисками.

Теперь выполним пометку диска для использования в gmirror. У меня на сервере 2 диска ad4 и ad6, FreeBSD естественно установлена на ad4.

gmirror label -vb round-robin gm0 /dev/ad4

Эта команда создает RAID gm0, при этом -vb round-robin устанавливает режим распределения нагрузки между жесткими дисками включенными в RAID. Еще доступны режимы load – в этом режиме чтение происходит с жесткого диска с наименьшей загрузкой. prefer – установка приоритетов чтения/записи осуществляется вручную. split – разбивает запросы чтения на разные устройства(жесткие диски), для ускорения работы.

Я использую round-robin.

Теперь, если в ядре отсутствует поддержка gmirror, необходимо выполнить такие команды:

gmirror load

Эта команда загрузит модуль ядра, отвечающий за поддержку программного RAID.

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

echo 'geom_mirror_load="YES"' >> /boot/loader.conf

Поддержку в ядре можно включить, добавив в конфигурацию ядра:

options GEOM_MIRROR

затем пересобрав ядро и перезагрузившись.

Теперь необходимо сменить монтирование дисков в /etc/fstab, изначально вид fstab имел такой вид:

# Device Mountpoint FStype Options Dump Pass#

/dev/ad4s1b none swap sw 0 0

/dev/ad4s1a / ufs rw 1 1

/dev/ad4s1e /tmp ufs rw 2 2

/dev/ad4s1f /usr ufs rw 2 2

/dev/ad4s1d /var ufs rw 2 2

/dev/acd0 /cdrom cd9660 ro,noauto 0 0

Теперь его надо изменить, заменив /dev/ad4 на /dev/mirror/gm0, то есть у меня получилось такой fstab:

# Device Mountpoint FStype Options Dump Pass#

/dev/mirror/gm0s1b none swap sw 0 0

/dev/mirror/gm0s1a / ufs rw 1 1

/dev/mirror/gm0s1e /tmp ufs rw 2 2

/dev/mirror/gm0s1f /usr ufs rw 2 2

/dev/mirror/gm0s1d /var ufs rw 2 2

/dev/acd0 /cdrom cd9660 ro,noauto 0 0

Теперь можно перезагрузиться.

После перезагрузки введем команду mount и увидим, что же у нас получилось:

mount

/dev/mirror/gm0s1a on / (ufs, local)

devfs on /dev (devfs, local)

/dev/mirror/gm0s1e on /tmp (ufs, local, soft-updates)

/dev/mirror/gm0s1f on /usr (ufs, local, soft-updates)

/dev/mirror/gm0s1d on /var (ufs, local, soft-updates)

И с помощью просмотрим состояние RAID1:

Name Status Components

mirror/gm0 COMPLETE ad4

Наш рейд состоит из одного диска.

Добавим второй диск:

gmirror insert gm0 /dev/ad6

После этого, проверяем статус:

gmirror status

Name Status Components

mirror/gm0 DEGRADED ad4

ad6 (0%)

В данный момент, рейд собирается. То есть осуществляется зеркалирование содержимого диска ad4 на диск ad6

Через некоторый промежуток времени(он зависит от объема диска):

gmirror status

Name Status Components

mirror/gm0 COMPLETE ad4

ad6

Все рейд собран и функционирует.

За все время работы с этими RAIDами, серъезных проблем не возникало. При вылете одного диска, приходилось делать

gmirror forget gm0

И снова

gmirror insert /dev/ad6

И напоследок хочу заметить, что каким бы хорошим не был рейд, как бы надежно он не работал он никогда не заменит регулярных бекапов. Обязательно бекаптесь!

http://www.hilik.org.ua/программный-raid1-gmirror/

Обновлено: 12.03.2015