Soft RAID1 на FreeBSD

Будем делать soft RAID1 на FreeBSD- зеркальный дисковый массив на программном уровне (без физического RAID контроллера), особенностью которого является возможность почти моментального переключения на рабочий HDD в случае выхода из строя одного из винчестеров массива.
Будем использовать технологию GEOM.
Необходимо 2 винчестера, желательно одного размера.
Хардварный RAID контроллер не нужен.
Накопитель, на который установлена ос – ad0, вставим второй винчестер — ad2 мастером на второй ide шлейф.

Сразу включить зеркалирование не получится, надо сначала:
sysctl kern.geom.debugflags=16
Если не выполнить строчку выше, наткнёмся на ошибку
Can't store metadata on /dev/ad0: Operation not permitted
которая говорит нам, что диск ad0 сейчас не доступен.

Теперь можно и зеркало создать:
gmirror label -v -b round-robin gm0 /dev/ad0
Здесь:
gmirror label -непосредственно создание зеркала.
-v -режим отладки
-b round-robin -алгоритм балансировки
gm0 -имя первого зеркала GEOM
/dev/ad0 -винчестер, который надо зазеркалить (то есть исходный с системой)

Теперь надо подредактировать два файла.
Для записи в первый файл выполняем:
echo geom_mirror_load="YES" > /boot/loader.conf

Очередь за вторым. Сделаем сначала его резервную копию:
cp /etc/fstab /etc/fstab.orig

редактируем:
ee /etc/fstab

Нужно изменить каждый ad на gm и добавить mirror после /dev. Для примера,
/dev/ad0s1a изменяется на /dev/mirror/gm0s1a.

У меня получилось следующее:
# Device Mountpoint FStype Options Dump Pass#
/dev/mirror/gm0s2b none swap sw 0
/dev/mirror/gm0s1a / ufs rw 1
/dev/mirror/gm0s4d /usr ufs rw 2
/dev/mirror/gm0s3d /var ufs rw 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0

После того как сделали изменения, проверьте всё ещё раз.
Далее перезагружаем сервер, параметр kern.geom.debugflags вернётся к своему исходному значению, примонтируется /dev/mirror/gm0s1a и другие …ОС продолжит загружаться.

Логинимся и синхронизируем диски:
gmirror insert gm0 /dev/ad2

Видим:
GEOM_MIRROR: Device gm0: provider ad2 detected.
GEOM_MIRROR: Device gm0: rebuilding provider ad2.

Смотрим, что произошло:
gmirror list | more

Geom name: gm0
State: DEGRADED
Components: 2
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 2125638583
Providers:
1. Name: mirror/gm0
Mediasize: 10262568448 (9.6G)
Sectorsize: 512
Mode: r6w5e2
Consumers:
1. Name: ad0
Mediasize: 10262568448 (9.6G)
Sectorsize: 512
Mode: r1w1e1
State: ACTIVE
Priority: 0
Flags: DIRTY
GenID: 0
SyncID: 1
ID: 3986018406
2. Name: ad2
Mediasize: 10262568448 (9.6G)
Sectorsize: 512
Mode: r1w1e1
State: SYNCHRONIZING
Priority: 0
Flags: DIRTY, SYNCHRONIZING
GenID: 0
SyncID: 1
Synchronized: 1%
ID: 1946262342

Процесс синхронизации можно увидеть:
gmirror status

Name Status Components
mirror/gm0 DEGRADED ad0
ad2 (2%)

По окончании синхронизации увидим:
GEOM_MIRROR: Device gm0: rebuilding provider ad2 finished.
GEOM_MIRROR: Device gm0: provider ad2 activated.

Если выполнить gmirror list, то в строке State значение DEGRADED изменится на COMPLETE, а состояние в строке Flags изменится на NONE.

Выполняем:
shutdown -r now

и во время загрузки вы должны увидеть сообщение:

GEOM_MIRROR: Device gm0 created (id=2125638583).
GEOM_MIRROR: Device gm0: provider ad0 detected.
GEOM_MIRROR: Device gm0: provider ad2 detected.
GEOM_MIRROR: Device gm0: provider ad0 activated.
GEOM_MIRROR: Device gm0: provider ad2 activated.
GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.
Mounting root from ufs:/dev/mirror/gm0s1a

Примечание:
Если всё же в /etc/fstab значения были внесены не верно, то загрузка системы остановится с ошибой:
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>

Сначала смотрим диски:
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

Далее надо верно указать место, где находится раздел / :
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

Чтобы посмотреть как обстоят дела с разделом подкачки:
swapinfo

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

Вот в общем то и всё, напоследок скажу, что лучше использовать хардварный raid -надёжнее. Но за неимением железячного решения для raid 1, можно воспользоваться способом, описанным в статье.

Добавить комментарий