Gmirror - програмный RAID 1

Версия для печатиОтправить другуPDF version

Иногда нужно повысить надежность хранения данных. В этом случае возможно воспользоваться RAID1, то есть полным зеркалирование информации на другой жесткий диск. Рассказывать о типах RAID не вижу смысла, скорее всего вы уже владеете необходимой информацией. Если нет, то ознакомиться с типами RAID можно, например, здесь.

Итак решено. Будем строить програмный RAID1 с помощью gmirror. Разоряться на дорогие рейд-контроллеры не будем, а потратим немножко аппаратных ресурсов сервера для повышения отказоустойчивости ;)

Есть сервер с двумя хардами, которые определились как ad4 и ad6.

ad4: 476940MB <SAMSUNG HD501LJ CR100-10> at ata2-master SATA300
ad6: 476940MB <SAMSUNG HD501LJ CR100-11> at ata3-master SATA300

 На ad4 стоит FreeBSD. Соответственно ad6 необходимо сделать клоном ad4.

Перед созданием зеркала необходимо вывести жесткий диск из режима записи (иначе на наши команды система ругнется нехорошими сообщениями). После перезагрузки сервера даный параметр вернется в исходное значение, так что сильно не заморачиваемся по этому поводу .

# sysctl kern.geom.debugflags=16

kern.geom.debugflags: 0 -> 16

Создаем зеркало следующей командой:

# gmirror label -v -b round-robin gm0 /dev/ad4

Metadata value stored on /dev/ad4.
Done.

Немного о опциях:

gmirror label - собственно создание зеркала;

-v - включение режима отладки;

-b round-robin - режим балансировки;

gm0 - имя первого зеркала;

/dev/ad4 - диск, с которого будем брать данные для зеркалирования.

Поздравляю, теперь у нас есть RAID1. Однако это еще не все. Для того, чтобы после перезагрузки сервера все заработало, включаем загрузку модуля geom_mirror:

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

Необходимо также внести изменения в /etc/fstab. Если вы еще не "подружились" с данным файлом, то вам сюда. В даном файле необходимо каждый ad заменить на gm и добавить mirror после /dev, обращая внимание на статическую нумерацию дисков и разделов.

Для примера, у меня /dev/ad4s1a превратится в /dev/mirror/gm0s1a. Необходимо отредактировать каждую строку. Вот как выглядит /etc/fstab после редактирования в моем случае:

# cat /etc/fstab
# Device                        Mountpoint      FStype  Options   Dump   Pass#
/dev/mirror/gm0s1b       none               swap     sw          0          0
/dev/mirror/gm0s1a       /                      ufs         rw          1          1
/dev/mirror/gm0s1d       /home             ufs         rw          2          2
/dev/mirror/gm0s1f        /tmp                ufs         rw          2          2
/dev/mirror/gm0s1g       /usr                 ufs         rw          2          2
/dev/mirror/gm0s1e       /var                 ufs         rw          2          2

Пожалуйста, будьте внимательны при редактировании данного файла. Будет досадно, когда система не загрузится из-за допущеной опечатки. Проверили? Отлично, продолжим.

Отправляем сервер на перезагрузку:

# shutdown -r now

 Смотрим, что у нас получилось:

# df -h
Filesystem                    Size        Used     Avail    Capacity    Mounted on
/dev/mirror/gm0s1a      1.9G      232M     1.6G    13%           /
devfs                             1.0K      1.0K      0B        100%         /dev
/dev/mirror/gm0s1d      3.9G      52K       3.6G     0%            /home
/dev/mirror/gm0s1f       1.9G      52K       1.8G     0%            /tmp
/dev/mirror/gm0s1g      383G     2.9G      350G    1%            /usr
/dev/mirror/gm0s1e      58G       387M     53G      1%            /var

Кстати, утилита df не показывает состояние раздела подкачки. Для просмотра его состояния воспользуемся следующей командой:

# swapinfo
Device                        1K-blocks     Used   Avail         Capacity
/dev/mirror/gm0s1b  2097152       0         2097152   0%

 Остался последний шаг - синхронизация дисков. Синхронизация начнется, как только мы добавим в зеркало второй диск:

# gmirror insert gm0 /dev/ad6

Проверим состояние зеркала:

# gmirror list
Geom name: gm0
State: DEGRADED
Components: 2
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 996585426
Providers:
1. Name: mirror/gm0
   Mediasize: 500107861504 (466G)
   Sectorsize: 512
   Mode: r7w6e7
Consumers:
1. Name: ad4
   Mediasize: 500107862016 (466G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 2655687235
2. Name: ad6
   Mediasize: 500107862016 (466G)
   Sectorsize: 512
   Mode: r1w1e1
   State: SYNCHRONIZING
   Priority: 0
   Flags: DIRTY, SYNCHRONIZING
   GenID: 0
   SyncID: 1
   Synchronized: 2%
   ID: 411127952

Обратите внимание на общее состояние зеркала - DEGRADED, а также на флаг SYNCHRONIZING. Для синхронизации дисков потребуется некоторое время, а в настоящее время синхронизировано 2% данных.

Подождите некоторое время, и снова выполните gmirror list.

Значение в строке State изменилось с DEGRADED на COMPLETE. Не волнуйтесь, увидев в строке Flags состояние DIRTY, это означает, что система сделала запись на диск, но еще не синхронизировала данные между дисками, если потождать несколько секунд, не производя никаких дисковых операций, то можно увидеть, как состояние изменится на NONE

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

# echo 'daily_status_gmirror_enable="YES"' >> /etc/periodic.conf

Поздравляю. Настройка програмного RAID1 с помощью утилиты gmirror завершена.

Ваша оценка: Нет Средняя: 5 (3 голоса)

Спасибо, за статью. Только

Спасибо, за статью.

Только что создал RAID1

Отлично. Искренне рад за вас

Отлично.

Искренне рад за вас :)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература