воскресенье, 10 июля 2011 г.

Программный RAID1 на FreeBSD постредством утилиты gmirror

Начал освоение этой замечательной системы на базе релиза 8.2
И сразу озаботился сохранностью данных.
Все работы производились в виртуальной машине Oracle Virtual Box с двумя виртуальными HDD одинаковой величины.
Базовая система установлена. Приступим к созданию программного зеркала.

gmirror -v -b round-robin gm0 /dev/ad0

Can't store metadata on /dev/ad0: Operation not permitted.

Не даёт писать на диск который используется. Правиться при помощи sysctl:
sysctl.geom.debugflags=16
gmirror -v -b round-robin gm0 /dev/ad0

Metadata value stored on /dev/ad0. Done.

в /etc/fstab меняем все устройтва начинающиеся с /dev/ad4XXX на /dev/mirror/gm0XXX, будьте крайне внимательны, не повторяйте самой распространенной ошибки, которая меня тоже не обошла стороной, я забыл после /dev/ указать mirror!

Далее набираем reboot и смотрим на поведение загрузки. Если все нормально прошло переходим к следующему этапу. Включаем в зеркало второй жесткий диск равного объема, /dev/ad1.


Однако, если после правки /etc/fstab загрузка будет остановлена, ожидая ввода. Например можно забыть ввести mirror, когда вы редактируете /etc/fstab, набирая /dev/gm0s1a вместо /dev/mirror/gm0s1a после чего FreeBSD не может найти корневую систему:
Mounting root from ufs:/dev/gm0s1a setrootbyname failed ffs_mountroot: can't find rootvp Root mount failed: 6  Manual root filesystem specification:   :  Mount  using filesystem              e.g. ufs:da0s1a   ?             List valid disk boot devices          Abort manual input  mountroot>

Fortunately, that's not as scary as it looks. Start by listing your valid disk boot devices:

mountroot> ?  List of GEOM managed disk devices:   mirror/gm0s1f mirror/gm0s1e mirror/gm0s1d mirror/gm0s1c mirror/gm0s1b  mirror/gm0s1a mirror/gm0s1 ad2s1 mirror/gm0 ad0s1 ad2 acd0 ad0 fd0

If you type in the correct location of the / filesystem, the system will continue to reboot:

mountroot> ufs:/dev/mirror/gm0s1a Mounting root from /dev/mirror/gm0s1a

После входа в систему необходимо отредактировать неверные строки в /etc/fstab и перезагрузиться снова. Когда получится загрузиться и войти в систему успешно - проверьте каждый раздел, смонтированный в зеркало.:

% df -h Filesystem            Size    Used    Avail    Capacity    Mounted on /dev/mirror/gm0s1a    248M     35M     193M       15%        / devfs                 1.0K    1.0K       0B      100%        /dev /dev/mirror/gm0s1e    248M     12K     228M        0%        /tmp /dev/mirror/gm0s1f    7.3G     99M     6.7G        1%        /usr /dev/mirror/gm0s1d    248M    196K     228M        0%        /var

df не выводит swap раздел, его можно проверить с помощью:

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


Так же, с правами root набираем команду:

gmirror insert gm0 /dev/ad1


Тут есть ряд замечаний, во первых, этот диск не должен быть разделен на слайсы, во вторых, его размер должен точно соответствовать главному диску, допустимо чтобы он был немного больше, но не меньше! В противном случае команда включения этого диска не отработает и выдаст сообщение о тот что диск слишком мал по отношению к основному диску. В случае если второй диск, подключаемый к зеркалу будет немного или на много больше, диск являющийся основным и имеющий меньший размер будет приоритетным. Т.е. на втором диске будет занят под зеркало размер равный объему первого диска, все остальное пространство будет бессмысленно пустовать. Именно по этому рационально все же ставить диски одинакового размера.

Предположим что с объемами дисков у вас все в порядке и команда gmirror insert отработала нормально, для наблюдением за процессом синхронизации томов периодически набирайте команду:

gmirror status или gmirror list

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

И напоследок. В случае выхода одного из дисков в зеркале, например ad1 извлекаем его (при выключенной машине) заменяем на новый, соответствующего размера или больший и выполняем следующие команды:

gmirror forget gm0
gmirror insert gm0 /dev/ad1





разработка скрипта для мониторинга статуса зеркала

ключевая команда tail -f /var/log/messages | grep DEGRADED | /user/bin/mail -s "MIRROR" mail@mail.ru

gmirror status | grep -o DEGRADED

http://www.lissyara.su/articles/freebsd/tuning/software_raid1/
http://www.lissyara.su/articles/freebsd/file_system/gmirror/
http://onlamp.com/pub/a/bsd/2005/11/10/FreeBSD_Basics.html?page=2

Комментариев нет:

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