Перенос установленной 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

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

Содержание этого поля является приватным и не предназначено к показу.
Регистр имеет значение
  .o8         o8o   oooooo   oooooo     oooo      .    oooooooooo.   ooooo   ooooo 
"888 `"' `888. `888. .8' .o8 `888' `Y8b `888' `888'
888oooo. oooo `888. .8888. .8' .o888oo 888 888 888 888
d88' `88b `888 `888 .8'`888. .8' 888 888oooo888' 888ooooo888
888 888 888 `888.8' `888.8' 888 888 `88b 888 888
888 888 888 `888' `888' 888 . 888 .88P 888 888
`Y8bod8P' o888o `8' `8' "888" o888bood8P' o888o o888o


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