Перенос установленной 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, должно получится что-то вроде
За перевод - спасибо, но оригинал лучше ;-)

Опечатка: root@server:/ # gpart backup ada0 > /tmp/part.txt Добавил бы: Перед созданием зеркала желательно диск очистить: dd if=/dev/zero of=/dev/ada1 bs=512 count=1

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

Содержание этого поля является приватным и не предназначено к показу.
Регистр имеет значение
 ooooo   ooooo  ooooooooo.     .o88o.  oooooooooo.        .      .oooooo.    
`888' `888' `888 `Y88. 888 `" `888' `Y8b .o8 d8P' `Y8b
888 888 888 .d88' o888oo 888 888 .o888oo 888
888ooooo888 888ooo88P' 888 888 888 888 888
888 888 888 888 888 888 888 888 ooooo
888 888 888 888 888 d88' 888 . `88. .88'
o888o o888o o888o o888o o888bood8P' "888" `Y8bood8P'


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