Решил собрать зеркальный RAID под "свеженькую" FreeBSD 9-RELEASE. И разметку решил по умолчанию использовать GPT. В этом случае порядок действий будет отличаться, от создания RAID 1 в случае разделов BSD [1].
Hardware: два привода SATA, которые определяются системой как ada0 и ada1.
Теперь пошаговое руководство по созданию RAID 1 на разделах GPT и установке на эти разделы операционной системы FreeBSD 9-RELEASE.
- Загружаемся с установочного диска FreeBSD 9-RELEASE.
- Запускаем Shell, который предоставляется загрузчиком Bsdinstall.
- Изменяем переменную ядра kern.geom.debugflags:
# sysctl kern.geom.debugflags=16 - Загружаем модуль ядра geom_mirror.ko:
# kldload /boot/kernel/geom_mirror.ko - С помощью утилиты gmirror создаем зеркало и включаем в него оба диска:
# gmirror label -v -b round-robin gm0 /dev/ada0
# gmirror insert gm0 /dev/ada1Немного о опциях:
gmirror label - собственно создание зеркала;
gmirror insert - добавление диска в зеркало;
-v - включение режима отладки;
-b round-robin - режим балансировки;
gm0 - имя зеркала;
/dev/ada0 - диск, с которого будем брать данные для зеркалирования;
/dev/ada1 - диск на который будем выполнять синхронизацию
- Дожидаемся полной синхронизации дисков. Просмотреть текущее состояние можно такой командой:
# gmirror list
Обратите внимание на общее состояние зеркала - DEGRADED, а также на флаг SYNCHRONIZING. По завершению синхронизации, статус зеркала изменится на COMPLETE.
- Выходим из Shell обратно в Bsdinstall:
# exit
- Создаем раздел GPT на gm0 и необходимые партиции.
- По завершению развертывания системы, Bsdinstall предлагает произвести редактирование системных файлов, что и необходимо выполнить. Добавляем загрузку модуля GEOM в loader.conf:
# echo 'geom_mirror_load="YES"' > /boot/loader.conf
- Проверяем, что в fstab прописаны партиции с gm0. Пример записи: /dev/mirror/gm0p2.
- Перезагружаемся.
На этом установка системы и настройка gmirror с разметкой GPT заканчивается.
Можно наблюдать при перед началом загрузки системы сообщение "Invalid backup GPT header". Дело в том, что GPT была создана поверх зеркала. Размер провайдера mirror/gm0 на 1 сектор меньше, чем размер диска, так как gmirror забирает последний сектор для хранения своих метаданных. Загрузчик gptboot ничего не знает о программном зеркале и ищет резервный заголовок GPT в конце диска, а там находятся метаданные gmirror