[root@testsrv998 ~]# freebsd-version
11.0-RELEASE-p6
У нас есть два диска:
ada0, где уже установлена система и ada1, который мы хотим использовать в качестве зеркала.
[root@testsrv998 ~]# ls | grep ada
ada0
ada0p1
ada0p2
ada0p3
ada1
Первым делом разрешаем загрузку модуля адра gmirror при старте системы:
[root@testsrv998 ~]# cat /boot/loader.conf
geom_mirror_load="YES"
[root@testsrv998 ~]# sysctl kern.geom.debugflags=16
kern.geom.debugflags: 0 -> 16
Делаем копию таблицы разделов на новый диск:
[root@testsrv998 ~]# gpart backup ada0 | gpart restore -F /dev/ada1
Получится примерно так:
[root@testsrv998 ~]# gpart show
=> 40 976773088 ada0 GPT (466G)
40 1024 1 freebsd-boot (512K)
1064 8388608 2 freebsd-swap (4.0G)
8389672 52428800 3 freebsd-ufs (25G)
60818472 915954656 - free - (437G)
=> 40 976773088 ada1 GPT (466G)
40 1024 1 freebsd-boot (512K)
1064 8388608 2 freebsd-swap (4.0G)
8389672 52428800 3 freebsd-ufs (25G)
60818472 915954656 - free - (437G)
Устанавливаем загрузчик на новый диск:
[root@testsrv998 ~]# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada1
[root@testsrv998 ~]# mount
/dev/ada0p3 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
На новом диске создаем файловую систему для корневого раздела (для boot и swap не надо)
[root@testsrv998 ~]# newfs -U /dev/ada1p3
Так так на ФС на существующем диске (ada0) включено журналирование - включаем его и на новом диске:
[root@testsrv998 ~]# tunefs -j enable /dev/ada1p3
Создаем зеркало для раздела boot:
[root@testsrv998 ~]# gmirror label -v -b round-robin boot /dev/ada0p1 /dev/ada1p1
Metadata value stored on /dev/ada0p1.
Metadata value stored on /dev/ada1p1.
Done.
И swap:
[root@testsrv998 ~]# gmirror label -v -b round-robin swap /dev/ada0p2 /dev/ada1p2
Metadata value stored on /dev/ada0p2.
Metadata value stored on /dev/ada1p2.
Done.
Теперь раздел root, но пока добавляем только ada1p3, т. к. система не даст записать метки на диск, с которого работает:
[root@testsrv998 ~]# gmirror label -v -b round-robin root /dev/ada1p3
Metadata value stored on /dev/ada1p3.
Done.
Должно получиться примерно так:
[root@testsrv998 ~]# gmirror status
Name Status Components
mirror/boot COMPLETE ada0p1 (ACTIVE)
ada1p1 (ACTIVE)
mirror/swap DEGRADED ada1p2 (ACTIVE)
mirror/root COMPLETE ada1p3 (ACTIVE)
Зеркало swap в режиме DEGRADED. После перезагрузки сервера перейдет в режим COMPLETE.
Теперь будем копировать данные через dump/restore на зеркальный диск:
[root@testsrv998 ~]# mkdir -p /new/root
[root@testsrv998 ~]# mount /dev/mirror/root /new/root/
[root@testsrv998 ~]# ( dump -0f - / ) | ( cd /new/root ; restore -rf - )
...
DUMP: 57.94% done, finished in 0:03 at Thu Jan 12 11:33:22 2017
DUMP: 76.99% done, finished in 0:02 at Thu Jan 12 11:37:44 2017
DUMP: DUMP: 2225748 tape blocks
DUMP: finished in 840 seconds, throughput 2649 KBytes/sec
DUMP: DUMP IS DONE
Правим fstab на новом диске:
[root@testsrv998 ~]# cat /new/root/etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/mirror/swap none swap sw 0 0
/dev/mirror/root / ufs rw 1 1
И на рабочей системе:
[root@testsrv998 ~]# cat /etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/mirror/swap none swap sw 0 0
/dev/mirror/root / ufs rw 1 1
[root@testsrv998 ~]# umount /new/root/
[root@testsrv998 ~]# reboot
После загрузки проверяем:
[root@testsrv998 ~]# mount
/dev/mirror/root on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
[root@testsrv998 ~]# gmirror status
Name Status Components
mirror/boot COMPLETE ada0p1 (ACTIVE)
ada1p1 (ACTIVE)
mirror/swap COMPLETE ada0p2 (ACTIVE)
ada1p2 (ACTIVE)
mirror/root COMPLETE ada1p3 (ACTIVE)
И добавляем недостающий раздел в зеркало root (ada0p3):
[root@testsrv998 ~]# gmirror insert root /dev/ada0p3
Синхронизация:
[root@testsrv998 ~]# gmirror status
Name Status Components
mirror/boot COMPLETE ada0p1 (ACTIVE)
ada1p1 (ACTIVE)
mirror/swap COMPLETE ada0p2 (ACTIVE)
ada1p2 (ACTIVE)
mirror/root DEGRADED ada1p3 (ACTIVE)
ada0p3 (SYNCHRONIZING, 3%)
Завершилась:
[root@testsrv998 ~]# gmirror status
Name Status Components
mirror/boot COMPLETE ada0p1 (ACTIVE)
ada1p1 (ACTIVE)
mirror/swap COMPLETE ada0p2 (ACTIVE)
ada1p2 (ACTIVE)
mirror/root COMPLETE ada1p3 (ACTIVE)
ada0p3 (ACTIVE)
После перезагрузки проверяем:
[root@testsrv998 ~]# dmesg | grep MIRROR
GEOM_MIRROR: Device mirror/boot launched (2/2).
GEOM_MIRROR: Device mirror/swap launched (2/2).
GEOM_MIRROR: Device mirror/root launched (2/2).