PostHeaderIcon Програмный RAID1 (mirror) на FreeBSD

Случилось сегодня настраивать хранилище бэкапов в одной из госконтор. Как обычно, серверная забита четырехюнитовыми ibm x235, а бэкапы хранятся на рабочих машинах у работников. Выдали компьютер с тремя винтами (один системный и два под зеркало), с условием, что MS на него ставить нельзя, ибо нет лицензий. Ну а нам это как-раз и надо, поэтому была туда водружена FreeBSD 8.0, и на ней с помощью gmirror создано зеркало из двух IDE дисков по 160 гб каждый. В системе эти винчестеры значились соответственно как ad2 и ad3.
Что нам для этого нужно:
Размечаем основной диск (у меня — ad3): один слайс, один раздел, размечать можно хоть с помощью sysinstall. Даем в консоли команду

[cc lang=»bash»]# sysctl kern.geom.debugflags=16[/cc]

Создаем устройство gm0 — наш рэйд первого уровня:

[cc lang=»bash»]# gmirror label -v -b round-robin gm0 /dev/ad3[/cc]

Аргумент label создает зеркало. Ключ -v выводит дополнительную информацию при работе команды. Значение ключа -b round-robin включает соответствующий алгоритм чтения с дисков зеркала. насколько я понял, при этом ключе читаются оба диска, что ускоряет чтение. Можно так же задать для этого ключа значение load, при котором будет читаться наименее загруженный диск, либо prefer, что приведет к чтению с основного диска.

Включаем модуль gmirror в автозагрузку:

[cc lang=»bash»]# echo geom_mirror_load=YES >> /boot/loader.conf[/cc]

Добавляем в зеркало второй винчестер:

[cc lang=»bash»]# gmirror insert gm0 /dev/ad2[/cc]

Здесь присутствует один нюанс: добавляемый диск должен быть точно такого же размера или больше, чем первый, иначе выведется сообщение об ошибке и диск в зеркало не добавится. У меня оба диска были практически одинаковые, даже из одной партии, но ad2 физически оказался на несколько байт меньше ad3, поэтому пришлось создавать зеркало начиная с последнего. Насколько я помню, в мане еще написано, что добавляемый диск не должен быть разбит на слайсы, но у меня диск содержал один слайс, так же, как и основной, и ничего, добавился.

Теперь не забываем прописать наше зеркало в /etc/fstab, дабы иметь его примонтированным при перезагрузке системы. Добавляем в указанный файл что-то подобное (параметры и точку монтирования, естественно, выбираете сами):

[cc lang=»bash»]/dev/mirror/gm0s1d /usr/local/backup ufs rw 2 2[/cc]

Если на основном диске у вас что-то было, то какое-то время займет синхронизация дисков. Понаблюдать за ее ходом можно командой gmirror status. В колонке status вывода этой команды будет отображаться ход синхронизации, по завершении которой в этой колонке появится надпись complete. Так же можно просмотреть состояние зеркала командой gmirror list.

Все, можно перезагрузиться и пользоваться этим зеркалом.

Что делать, если один из дисков вышел из строя: вытаскиваем из компьютера поврежденный диск (пусть это будет ad2), заменяем его на новый (не забываем перед извлечением диска отключить питания компьютера), и даем последовательно две команды:

[cc lang=»bash»]# gmirror forget gm0
# gmirror insert gm0 /dev/ad2[/cc]

PS Данная записка является практически репринтом вот отсюда, однако, в исходной статье допущен ряд неточностей, которые в любом случае заставляют читать man :) и могут поставить новичка в тупик.
PPS После настройки собственно зеркала на этой машине практически по вот этой статье была настроена samba и дан по сети доступ к дисковому массиву по сети через netbios.

Один комментарий на “Програмный RAID1 (mirror) на FreeBSD”

  • Gendos says:

    Перед добавлением второго винта, иногда необходимо перегрузить машинку.
    Ну или подгрузить модуль вручную.

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

PR-CY.ru