Дело в том, что на GPT не просто сделать RAID1, в отличии от MBR, где просто создаёшь рейд и добавляешь туда весь диск. Обычно, рекомендуется создавать “зеркало” на этапе установки, так как после того, как ОС насетаплена это сделать не так просто. Но мы это сделали ))
Тестовый стенд: FreeBSD 9.2 amb64 Release, 2xHDD 500Gb (ada0, ada1)
Суть нашего метода:
1) Создаём точную разбивку второго диска
2) Делаем gmirror отдельно для каждого из разделов ВТОРОГО диска
3) dump/restore разделов с первого диска на gmirror’ы второго
4) Правка fstab’a на первом диске на разделы с mirror и загрузка уже с mirror’a
5) Добавление оставшихся разделов с первого диска в gmirror’ы.
Приступаем.
ada0 – диск, на котором стоит сейчас ОС
ada1 – второй (новый) диск, который хотим добавить в “зеркало” с первым
Делаем точную копию GPT-разделов на втором диске ada1:
# sysctl kern.geom.debugflags=16 kern.geom.debugflags: 0 -> 16 # gpart backup ada0 > ada0.gpt # gpart restore -F /dev/ada1 < ada0.gpt # gpart show => 34 976773101 ada0 GPT (466G) 34 1024 1 freebsd-boot (512K) 1058 2097152 2 freebsd-ufs (1.0G) 2098210 8388608 3 freebsd-swap (4.0G) 10486818 16777216 4 freebsd-ufs (8.0G) 27264034 4194304 5 freebsd-ufs (2.0G) 31458338 945314797 6 freebsd-ufs (451G) => 34 976773101 ada1 GPT (466G) [CORRUPT] 34 1024 1 freebsd-boot (512K) 1058 2097152 2 freebsd-ufs (1.0G) 2098210 8388608 3 freebsd-swap (4.0G) 10486818 16777216 4 freebsd-ufs (8.0G) 27264034 4194304 5 freebsd-ufs (2.0G) 31458338 945314797 6 freebsd-ufs (451G)
Устанавливаем загрузчик на ada1:
# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada1
bootcode written to ada1
Создаём ФС на новых разделах ada1 (обратите внимание, что мы не создаём ФС для раздела boot!!!):
# newfs /dev/ada1p2
# newfs /dev/ada1p4
# newfs /dev/ada1p5
# newfs /dev/ada1p6
Создаём “зеркала” из разделов boot, swap. Из остальных разделов сейчас не получится, так как нельзя создать mirror из смонтированных разделов:
# gmirror label -v -b round-robin boot /dev/ada0p1 /dev/ada1p1
Metadata value stored on /dev/ada0p1.
Metadata value stored on /dev/ada1p1.
Done.
# gmirror label -v -b round-robin swap /dev/ada0p3 /dev/ada1p3
Metadata value stored on /dev/ada0p3.
Metadata value stored on /dev/ada1p3.
Done.
Теперь отдельно создаём gmirror’ы из разделов на ada1:
# gmirror label -v -b round-robin root /dev/ada1p2 Metadata value stored on /dev/ada1p2. Done. # gmirror label -v -b round-robin var /dev/ada1p4 Metadata value stored on /dev/ada1p4. Done. # gmirror label -v -b round-robin tmp /dev/ada1p5 Metadata value stored on /dev/ada1p5. Done. r# gmirror label -v -b round-robin usr /dev/ada1p6 Metadata value stored on /dev/ada1p6. Done. # gmirror status Name Status Components mirror/boot COMPLETE ada0p1 (ACTIVE) ada1p1 (ACTIVE) mirror/swap DEGRADED ada1p3 (ACTIVE) mirror/root COMPLETE ada1p2 (ACTIVE) mirror/var COMPLETE ada1p4 (ACTIVE) mirror/tmp COMPLETE ada1p5 (ACTIVE) mirror/usr COMPLETE ada1p6 (ACTIVE)
Не пугайтесь насчёт swap, что он в DEGRADED. Просто на этом этапе он (ada0p3) ещё не может добавится в mirror.
Теперь будем делать копию разделов через dump/restore на “зеркальные” тома:
# mkdir /new && cd /new && mkdir root tmp usr var
# mount /dev/mirror/root /new/root/
# mount /dev/mirror/tmp /new/tmp/
# mount /dev/mirror/usr /new/usr/
# mount /dev/mirror/var /new/var
# ( dump -0f - / ) | ( cd /new/root ; restore -rf - )
...
DUMP: finished in 10 seconds, throughput 39253 KBytes/sec
DUMP: DUMP IS DONE
# ( dump -0f - /tmp ) | ( cd /new/tmp ; restore -rf - )
...
DUMP: finished in less than a second
DUMP: DUMP IS DONE
# ( dump -0f - /var ) | ( cd /new/var ; restore -rf - )
...
DUMP: finished in 29 seconds, throughput 7707 KBytes/sec
DUMP: DUMP IS DONE
# ( dump -0f - /usr ) | ( cd /new/usr ; restore -rf - )
...
DUMP: finished in 426 seconds, throughput 3179 KBytes/sec
DUMP: DUMP IS DONE
Не забудьте добавить
geom_mirror_load="YES"
в /boot/loader.conf
Приводим /new/root/etc/fstab (то есть fstab, который будет на “зеркале”) к такому виду:
/dev/mirror/root / ufs rw 1 1 /dev/mirror/swap none swap sw 0 0 /dev/mirror/var /var ufs rw 2 2 /dev/mirror/tmp /tmp ufs rw 2 2 /dev/mirror/usr /usr ufs rw 2 2
Теперь самое интересное: меняем текущий /etc/fstab (точнее приводим к тому виду, что и /new/root/etc/fstab), что бы после ребута была загрузка с /dev/mirror/root.
Размонтируем ФС и ребутаем сервер:
# umount /new/root/
# umount /new/tmp/
# umount /new/var
# umount /new/usr/
# shutdown -r now
После ребута смотрим, что у нас получилось
# mount
/dev/mirror/root on / (ufs, local)
devfs on /dev (devfs, local, multilabel)
/dev/mirror/var on /var (ufs, local)
/dev/mirror/tmp on /tmp (ufs, local)
/dev/mirror/usr on /usr (ufs, local)
Теперь можно добавлять недостающие тома в mirror:
# gmirror insert root /dev/ada0p2 # gmirror insert var /dev/ada0p4 # gmirror insert tmp /dev/ada0p5 # gmirror insert usr /dev/ada0p6 # gmirror status Name Status Components mirror/boot COMPLETE ada0p1 (ACTIVE) ada1p1 (ACTIVE) mirror/swap COMPLETE ada0p3 (ACTIVE) ada1p3 (ACTIVE) mirror/root COMPLETE ada1p2 (ACTIVE) ada0p2 (ACTIVE) mirror/var DEGRADED ada1p4 (ACTIVE) ada0p4 (SYNCHRONIZING, 11%) mirror/tmp DEGRADED ada1p5 (ACTIVE) ada0p5 (SYNCHRONIZING, 6%) mirror/usr DEGRADED ada1p6 (ACTIVE) ada0p6 (SYNCHRONIZING, 0%)
Дожидаемся окончания синхронизации и опять ребут, что бы проверить, всё ли нормально. После ребута смотрим:
#dmesg | grep GEOM_MIRROR GEOM_MIRROR: Device mirror/boot launched (2/2). GEOM_MIRROR: Device mirror/root launched (2/2). GEOM_MIRROR: Device mirror/swap launched (2/2). GEOM_MIRROR: Device mirror/var launched (2/2). GEOM_MIRROR: Device mirror/tmp launched (2/2). GEOM_MIRROR: Device mirror/usr launched (2/2). # mount /dev/mirror/root on / (ufs, local) devfs on /dev (devfs, local, multilabel) /dev/mirror/var on /var (ufs, local) /dev/mirror/tmp on /tmp (ufs, local) /dev/mirror/usr on /usr (ufs, local) # gmirror status Name Status Components mirror/boot COMPLETE ada0p1 (ACTIVE) ada1p1 (ACTIVE) mirror/root COMPLETE ada0p2 (ACTIVE) ada1p2 (ACTIVE) mirror/swap COMPLETE ada0p3 (ACTIVE) ada1p3 (ACTIVE) mirror/var COMPLETE ada0p4 (ACTIVE) ada1p4 (ACTIVE) mirror/tmp COMPLETE ada0p5 (ACTIVE) ada1p5 (ACTIVE) mirror/usr COMPLETE ada0p6 (ACTIVE) ada1p6 (ACTIVE)
4 коментарі “Создание “зеркала” на системном диске с GPT на FreeBSD 9 после установки”
а разве перед
# gmirror status
не надо сделать
# gmirror load
можно не делать, модуль подгрузится автоматически.
у меня не подгрузился…
В мануале по FreeBSD – “18.4.1. Зеркалирование первичных дисков” чётко написано:
“Включите автоматическую загрузку модуля geom_mirror.ko во время старта операционной системы:
# echo ‘geom_mirror_load=”YES”‘ >> /boot/loader.conf ”
и только тогда меняем fstab на /dev/mirror !
Сделав по твоей пошаговке – загрузиться, увы, не смог, надо теперь ехать к консоли.
Да, конкретно в этой статье пропущен момент добавление geom_mirror в loader.conf, который упомянут в этой http://skeletor.org.ua/?p=4501. Здесь сделан упор больше на GPT.
Ты смешал вместе мухи и котлеты. Для выполнения команды gmirror status не обязательно выполнять gmirror load, а вот для загрузки с ОС c gmirror’a – обязательно добавление geom_mirror_load.