Итак, имеется сервер с 2-мя дисками:
/dev/ada0
/dev/ada1
на диск
/dev/ada0 уже установленная операционная система
FreeBSD 9.1.
Требуется объединить имеющиеся диски в софтовое зеркало ( RAID 1 ), используя модуль
gmirror ( один из модулей
geom ), и переместить на него установленную на
/dev/ada0 систему.
Разметка диска
/dev/ada0 стандартная, учитывая дэфолтовую установку FreeBSD, через
bsdinstall:
ada0p1 freebsd-boot
ada0p2 freebsd-ufs /
ada0p3 freebsd-swap
Первое что нужно сделать для работы с
gmirror, загрузить соответствующий модуль ядра:
root@server:/ # kldload geom_mirror.ko # загружаем
root@server:/ # kldstat # проверяем
Id Refs Address Size Name
1 3 0xffffffff80200000 1323388 kernel
2 1 0xffffffff81612000 d26f geom_mirror.ko # модуль загружен
что-бы после окончания настройки и перезагрузки, все работало, нужно прописать загрузку модуля в файл
/boot/loader.conf
делаем:
root@server:/ # echo 'geom_mirror_load="YES"' >> /boot/loader.conf
Тереь создадим зеркало, включив в него диск
/dev/ada1
root@server:/ # gmirror label -v -b round-robin gm0 /dev/ada1
Metadata value stored on /dev/ada1.
Done.
В данном случае:
gmirror label - собственно создание массива raid1 ( зеркало )
-v - режим отладки, вывод служебных сообщений
-b round-robin - алгоритм балансировки ( по умолчанию load )
gm0 - имя нашего raid массива
/dev/ada1 - диск который мы сразу включили в gmirror
Теперь нужно создать разметку на только что созданном зеркале. Вданном случае скопируем ее с диска
/dev/ada0, на колтором у нас уже установлена рабочая
FreeBSD.
Делаем дамп таблицы разделов, перенаправив его вывод в файл:
root@server:/ # gpart backup da0 > /tmp/part.txt
Восстанавливаем только что созданный дамп на gmirror
root@server:/ # gpart restore mirror/gm0 < /tmp/part.txt
Записываем загрузочный код
root@server:/ # gpart bootcode -b /boot/pmbr mirror/gm0
bootcode written to mirror/gm0
root@server:/ # gpart bootcode -p /boot/gptboot -i 1 mirror/gm0
Создаем файловую систему для раздела
/dev/mirror/gm0p2 ( корневая файловая система, по аналогии с димком
/dev/ada0 ).
Опция
-U в команде
newfs, включает
soft updaes, для файловой системы UFS.
root@server:/ # newfs -U /dev/mirror/gm0p2
/dev/mirror/gm0p2: 5834.9MB (11949952 sectors) block size 32768, fragment size 4096
using 10 cylinder groups of 626.09MB, 20035 blks, 80256 inodes.
with soft updates
super-block backups (for fsck_ffs -b #) at:
192, 1282432, 2564672, 3846912, 5129152, 6411392, 7693632, 8975872, 10258112, 11540352
Монтируем корневой раздел, расположенный в
gmirror, в папку
/mnt
root@server:/ # mount /dev/mirror/gm0p2 /mnt
Теперь копируем содержимое корневого раздела диска
/dev/ada0 в корневой раздел
gmirror
root@server:/ # cd / № если вы не в корневом разделе
root@server:/ # tar --one-file-system -cpf - . | (cd /mnt; tar -xvpf -)
Редактируем файл
/etc/sftab, заменив все вхождения
/dev/ada0 на
/dev/mirror/gm0, должно получится что-то вроде
# Device Mountpoint FStype Options Dump Pass#
/dev/mirror/gm0p2 / ufs rw 1 1
/dev/mirror/gm0p3 none swap sw 0 0
Перезагружаемся
root@server:/ # umount /mnt
root@server:/ # reboot
Теперь очень важно выбрать в биосе, другой диск в качестве загрузочного, тот который у нас уже в зеркале.
При загрузке, будет выдано предупреждение от
gptboot, о неверной резервной копии
GPT заголовка
gptboot: invalid backup GPT header
это происходит из-за того, что размер
gmirror, на один сектор меньше размера диска, в последнем секторе
gmirror зранит свои метаданные, а
gptboot ищет там резервную копию
GPT заголовка, естественно безуспешно. Это не критично.
Проверьте что в данный момент, система действительно работает с
gmirror:
root@server: # mount
/dev/mirror/gm0p2 on / (ufs, local, soft-updates)
devfs on /dev (devfs, local, multilabel)
root@server: # swapinfo
Device 1K-blocks Used Avail Capacity
/dev/mirror/gm0p3 314368 0 314368 0%
Теперь нам осталось только включить диск
/dev/ada0 в зеркало
root@server: # gmirror insert gm0 da0
Проверим статус:
root@server: # gmirror status
Name Status Components
mirror/gm0 DEGRADED ada1 (ACTIVE)
ada0 (SYNCHRONIZING, 26%)
В данный момент идет синхронизация дисков в зеркале, статус
DEGRADED, диски синхронизированы на
26%, остается дождаться окончания процесса.
После завершения синхронизации, статус gmirror выглядит так:
root@server: # gmirror status
Name Status Components
mirror/gm0 COMPLETE ada1 (ACTIVE)
ada0 (ACTIVE)
Теперь наша
FreeBSD работает с зеркала.
]]>Оригинал]]>
Вольеый пересказ vds-admin