Заметки о работе с ОС FreeBSD. Статьи об установке и настройке ПО для FreeBSD.

12 января 2017 г.

FreeBSD 11 gmirror GPT на установленной системе

[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).