Перенос установленной FreeBSD 9 в зеркало gmirror

Итак, имеется сервер с 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

Комментарии

Не работает! FREEBSD не загружается с ada1 а на ada0 выскакивает mountroot.

День добрый!
У вас ошибка, из-за которой я потерял 2 часа, опыт - сын ошибок трудных ))))
вместо:
Редактируем файл /etc/sftab, заменив все вхождения /dev/ada0 на /dev/mirror/gm0, нужно:
Редактируем файл /mnt/etc/fstab, заменив все вхождения /dev/ada0 на /dev/mirror/gm0, должно получится что-то вроде
За перевод - спасибо, но оригинал лучше ;-)

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

Содержание этого поля является приватным и не предназначено к показу.
Регистр имеет значение
   .o     .o    .oooooo..o        .o.          .oooooo.                
o888 o888 d8P' `Y8 .888. d8P' `Y8b
888 888 Y88bo. .8"888. 888 888 .oooo.o
888 888 `"Y8888o. .8' `888. 888 888 d88( "8
888 888 `"Y88b .88ooo8888. 888 888 `"Y88b.
888 888 oo .d8P .8' `888. `88b d88b o. )88b
o888o o888o 8""88888P' o88o o8888o `Y8bood8P'Ybd' 8""888P'


Введите код, изображенный в стиле ASCII-арт.