Установка FreeBSD 9.1 с использованием Gmirror (RAID1) и GUID Partition Table (GPT)

#0. Введение

В данной статье описывается процесс установки операционной системы FreeBSD 9.1 amd64 на зазеркалированные средствами gmirror диски, используя для разметки GPT-формат разделов. Использоваться будут 4 жёстких диска (зеркало для корневой файловой системы и зеркало для раздела с данными), которые сначала очистим от служебной информации, попарно зазеркалируем их, запишем GPT и после этого установим систему. Подготовку и настройку системы будем осуществлять через установочный образ FreeBSD 9.1 amd64 disc1. Загружаемся с образа, попадаем в bsdinstall, переходим в «Shell».

FreeBSD 9.1 Инсталлятор

Попав в консоль, необходимо узнать каким образом система определила установленные в сервер жёсткие диски.

# geom disk list
Geom name: ada0
Providers:
1. Name: ada0
   Mediasize: 500107862016 (465G)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r1w1e1
   descr: HGST HTE545050A7E380
   ident: (null)
   fwsectors: 63
   fwheads: 16

Geom name: ada1
Providers:
1. Name: ada1
   Mediasize: 500107862016 (465G)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r1w1e1
   descr: HGST HTE545050A7E380
   ident: (null)
   fwsectors: 63
   fwheads: 16

Geom name: ada2
Providers:
1. Name: ada2
   Mediasize: 1000204886016 (931G)
   Sectorsize: 512
   Mode: r1w1e1
   descr: Hitachi HUA722010CLA330
   ident: (null)
   fwsectors: 63
   fwheads: 16

Geom name: ada3
Providers:
1. Name: ada3
   Mediasize: 1000204886016 (931G)
   Sectorsize: 512
   Mode: r1w1e1
   descr: Hitachi HUA722010CLA330
   ident: (null)
   fwsectors: 63
   fwheads: 16

Видим, что имеем два диска ada0 и ada1 по 465G, на которых будет установлено зеркало с корневой файловой системой (/), а также два диска ada2 и ada3 по 931G для файловой системы с пользовательскими данными (/vs).

#1. Подготовка дисков

#1.1. Удаление старой GPT-информации

Если установленные жёсткие диски являются новыми и никоим образом не использовались, данный раздел можно пропустить. В данном разделе описывается подготовка дисков к установке новой системы, а именно удаление служебной информации GPT с дисков.

Для начала подгружаем модуль ядра geom_mirror.

# gmirror load

Geom_mirror определил наличие двух зеркал.

GEOM_MIRROR: Device mirror/gm1 launched (2/2).
GEOM_MIRROR: Device mirror/gm0 launched (2/2).

Проверим какие диски содержатся в зеркалах.

# gmirror status
       Name    Status  Components
mirror/gm1   COMPLETE  ada3 (ACTIVE)
                       ada2 (ACTIVE)
mirror/gm0   COMPLETE  ada1 (ACTIVE)
                       ada0 (ACTIVE)

Опеределяем, что на этих зеркалах находятся таблицы разделов GPT.

# gpart show
=>       34  976773100  mirror/gm0  GPT  (465G)
         34          6              - free -  (3.0k)
         40        256           1  freebsd-boot  (128k)
        296   16777216           2  freebsd-swap  (8.0G)
   16777512  959995616           3  freebsd-ufs  (457G)
  976773128          6              - free -  (3.0k)

=>        34  1953525100  mirror/gm1  GPT  (931G)
          34           6              - free -  (3.0k)
          40  1953525094           1  freebsd-ufs  (931G)

Удаляем GPT-таблицы с каждого зеркала.

# gpart destroy -F mirror/gm0
mirror/gm0 destroyed
# gpart destroy -F mirror/gm1
mirror/gm1 destroyed

Теперь проверяем разделы - они отсутствуют.

# gpart show

Если же GPT-таблицы были записаны не в зеркало, а на определённые диски, то также удаляем разметку с конкретных жёстких дисков.

# gpart destroy -F ada0
ada0 destroyed
# gpart destroy -F ada1
ada1 destroyed
# gpart destroy -F ada2
ada2 destroyed
# gpart destroy -F ada3
ada3 destroyed

#1.2. Удаление MBR-разметки

Если установленные жёсткие диски являются новыми и никоим образом не использовались, данный раздел также можно пропустить. В данном разделе описывается подготовка дисков к установке новой системы, а именно удаление служебной информации MBR с дисков.

# gpart show
=>       63  976773104  mirror/gm0  MBR  (465G)
         63         63              - free -  (31k)
        126  976772979           1  freebsd  (465G)
  976773105         62              - free -  (31k)

На этих зеркалах находится загрузочная запись MBR (Master Boot Record). Удаляется существующая таблица разделов MBR также, как и GPT.

# gpart destroy -F mirror/gm0
mirror/gm0 destroyed
# gpart destroy -F mirror/gm1
mirror/gm1 destroyed

Также как и с GPT - если MBR был записан не в зеркало, а на определённых дисках, то также удаляем разметку с конкретных жёстких дисков.

# gpart destroy -F ada0
ada0 destroyed
# gpart destroy -F ada1
ada1 destroyed
# gpart destroy -F ada2
ada2 destroyed
# gpart destroy -F ada3
ada3 destroyed

#1.3. Уничтожение существующего зеркала RAID1 Gmirror

Если установленные жёсткие диски являются новыми и никоим образом не использовались, этот раздел можно также пропустить. В данном разделе описывается подготовка дисков к установке новой системы, а именно удаление служебной информации GEOM с дисков и удаление существующего массива RAID1.

Сначала удаляем из каждого зеркала по одному диску.

# gmirror remove gm0 ada1
GEOM_MIRROR: Device gm0: provider ada1 destroyed.
# gmirror remove gm1 ada3
GEOM_MIRROR: Device gm1: provider ada3 destroyed.

После этого инициируем полное удаление зеркал

# gmirror stop gm0
GEOM_MIRROR: Device gm0: provider mirror/gm0 destroyed.
GEOM_MIRROR: Device gm0 destroyed
# gmirror stop gm1
GEOM_MIRROR: Device gm1: provider mirror/gm1 destroyed.
GEOM_MIRROR: Device gm1 destroyed

На жёстких дисках ada0 и ada2, находящихся в gm0 и gm1 во время уничтожения зеркал, необходимо удалить метаинформацию, которая осталась после уничтожения массива (вывод будет пустым при успешном удалении служебной информации с дисков).

# gmirror clear ada0
# gmirror clear ada2

Можно было обойтись без удаления из каждого зеркала по одному диску (gmirror remove), описанного в начале раздела, а сразу уничтожить массивы (gmirror stop), тогда для каждого диска необходимо было произвести операцию очистки метаинформации GEOM (gmirror clear). Операция удаления из каждого зеркала по одному диску (gmirror remove) в начале раздела показана для общей информации по управлению gmirror.

Проверяем, осталось ли что-нибудь ещё на дисках относительно GPT и Gmirror.

# gpart show
# gmirror status

Если вывод данных команд оболочки отсутствует, значит вся служебная информация с дисков удалена, и теперь всё готово к созданию нового массива RAID1 с помощью Gmirror.

#2. Создание массива RAID1 с помощью Gmirror

Для начала подгружаем модуль ядра geom_mirror, если это не было сделано в первом разделе.

# gmirror load

Следующими двумя несложными командами создаём два массива данных (gm0 из ada0 и ada1, gm1 из ada2 и ada3), gm0 и gm1 - метки созданных массивов, round-robin - тип алгоритма поочерёдной балансировки нагрузки на диски в массиве. Тип может быть load (по-умолчанию, чтение с менее нагруженного диска), prefer (чтение с компонента массива с наибольшим приоритетом), round-robin (поочерёдное чтение со всех компонентов массива), split (распаралеливать запрос больше определённого размера или ему равного на N дисков, которые находятся в массиве).

# gmirror label -vb round-robin gm0 /dev/ada0 /dev/ada1
GEOM_MIRROR: Device mirror/gm0 launched (2/2)
Metadata value stored on /dev/ada0
Metadata value stored on /dev/ada1
Done.
# gmirror label -vb round-robin gm1 /dev/ada2 /dev/ada3
GEOM_MIRROR: Device mirror/gm1 launched (2/2)
Metadata value stored on /dev/ada2
Metadata value stored on /dev/ada3
Done.

Вот и всё, зеркала готовы.

Чтобы показать как добавляются диски в массив, можно создать массивы с единичными дисками, а потом добавить по соответствующиму диску в каждый массив, но тогда потребуется время на синхронизацию добавленных дисков с зеркалом.

# gmirror label -vb round-robin gm0 /dev/ada0
# gmirror label -vb round-robin gm1 /dev/ada2
# gmirror status
       Name    Status  Components
mirror/gm1   COMPLETE  ada2 (ACTIVE)
mirror/gm0   COMPLETE  ada0 (ACTIVE)

Добавляем соответствующие незадействованные диски в созданные массивы.

# gmirror insert gm0 ada1
GEOM_MIRROR: Device gm0: rebuilding provider ada1
# gmirror insert gm1 ada3
GEOM_MIRROR: Device gm1: rebuilding provider ada3

После этого можно наблюдать процесс синхронизации дисков в массивах. Синхронизация продолжится до получения добавленными дисками статуса ACTIVE, до получения массивами статуса COMPLETE.

# gmirror status
       Name    Status  Components
mirror/gm1   DEGRADED  ada2 (ACTIVE)
                       ada3 (SYNCHRONIZING, 1%)
mirror/gm0   DEGRADED  ada0 (ACTIVE)
                       ada1 (SYNCHRONIZING, 10%)

Проверим состояние созданных массивов, после синхронизации. Если статус массивов COMPLETE, можно продолжать подготовку к установке операционной системы FreeBSD.

# gmirror status
       Name    Status  Components
mirror/gm1   COMPLETE  ada3 (ACTIVE)
                       ada2 (ACTIVE)
mirror/gm0   COMPLETE  ada1 (ACTIVE)
                       ada0 (ACTIVE)

Массивы RAID1 синхронизировались.

#3. Создание GPT-таблицы разделов и файловых систем на зеркалируемых областях

Далее мы должны записать таблицы разделов GPT на зеркалированные области, разметить диск для загрузочной области freebsd, раздела подкачки, корневой файловой системы и файловой системы для данных (/vs). Файловые системы будут работать с помощью механизма Soft Updates с журналированием.

Создаём таблицу разделов диска для первого зеркала:

# gpart create -s gpt mirror/gm0
mirror/gm0 created

Создаём разделы с загрузочной областью freebsd, подкачки, корневой файловой системы:

# gpart add -b 40 -s 128k -t freebsd-boot -l "bootcode" mirror/gm0
mirror/gm0p1 added
# gpart add -s 8G -t freebsd-swap -l "swap" mirror/gm0
mirror/gm0p2 added
# gpart add -t freebsd-ufs -l "root" mirror/gm0
mirror/gm0p3 added

Делаем область mirror/gm0 загрузочной.

# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 mirror/gm0
bootcode written to mirror/gm0

Создаём таблицу разделов GPT для второго зеркала:

# gpart create -s gpt mirror/gm1
mirror/gm1 created
# gpart add -b 40 -t freebsd-ufs -l "vs" mirror/gm1
mirror/gm1p1 added 

В случае ошибок можно удалить раздел (-i 1 - метка раздела ada0p1) и пересоздать его с нужными параметрами.

# gpart delete -i 1 ada0

Созданные разделы можно наблюдать в /dev/gpt.

# ls /dev/gpt
bootcode        root        swap        vs

Создаём файловые системы (-O2 - тип файловой системы UFS2, -U - включение механизма Soft Updates).

# newfs -U -O2 /dev/gpt/root
# newfs -U -O2 /dev/gpt/vs

Включаем механизм журналирования Soft Updates для созданных файловых систем.

# tunefs -j enable /dev/gpt/root
Using inode 4 in cg 0 for 33554432 byte journal
tunefs: soft updates journaling set
# tunefs -j enable /dev/gpt/vs
Using inode 4 in cg 0 for 33554432 byte journal
tunefs: soft updates journaling set
# gpart show
=>       34  976773100  mirror/gm0  GPT  (465G)
         34          6              - free -  (3.0k)
         40        256           1  freebsd-boot  (128k)
        296   16777216           2  freebsd-swap  (8.0G)
   16777512  959995616           3  freebsd-ufs  (457G)
  976773128          6              - free -  (3.0k)

=>        34  1953525100  mirror/gm1  GPT  (931G)
          34           6              - free -  (3.0k)
          40  1953525094           1  freebsd-ufs  (931G)

Самую подробную информацию по разделам зеркалированных областей можно получить с помощью команды gpart list.

# gpart list
Geom name: mirror/gm0
modified: false
state: OK
fwheads: 255
fwsectors: 63
last: 976773133
first: 34
entries: 128
scheme: GPT
Providers:
1. Name: mirror/gm0p1
   Mediasize: 131072 (128k)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   rawuuid: 8a5188ff-934d-11e3-8273-002590d78702
   rawtype: 83bd6b9d-7f41-11dc-be0b-001560b84f0f
   label: bootcode
   length: 131072
   offset: 20480
   type: freebsd-boot
   index: 1
   end: 295
   start: 40
2. Name: mirror/gm0p2
   Mediasize: 8589934592 (8.0G)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   rawuuid: 954b8eea-934d-11e3-8273-002590d78702
   rawtype: 516e7cb5-6ecf-11d6-8ff8-00022d09712b
   label: swap
   length: 8589934592
   offset: 151552
   type: freebsd-swap
   index: 2
   end: 16777511
   start: 296
3. Name: mirror/gm0p3
   Mediasize: 491517755392 (457G)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r1w1e1
   rawuuid: aa0fa3b7-934d-11e3-8273-002590d78702
   rawtype: 516e7cb6-6ecf-11d6-8ff8-00022d09712b
   label: root
   length: 491517755392
   offset: 8590086144
   type: freebsd-ufs
   index: 3
   end: 976773127
   start: 16777512
Consumers:
1. Name: mirror/gm0
   Mediasize: 500107861504 (465G)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r1w1e2

Geom name: mirror/gm1
modified: false
state: OK
fwheads: 255
fwsectors: 63
last: 1953525133
first: 34
entries: 128
scheme: GPT
Providers:
1. Name: mirror/gm1p1
   Mediasize: 1000204848128 (931G)
   Sectorsize: 512
   Stripesize: 0
   Stripeoffset: 20480
   Mode: r1w1e1
   rawuuid: f3f64281-9351-11e3-8273-002590d78702
   rawtype: 516e7cb6-6ecf-11d6-8ff8-00022d09712b
   label: vs
   length: 1000204848128
   offset: 20480
   type: freebsd-ufs
   index: 1
   end: 1953525133
   start: 40
Consumers:
1. Name: mirror/gm1
   Mediasize: 1000204885504 (931G)
   Sectorsize: 512
   Mode: r1w1e2

Далее - устанавливаем операционную систему. Мы можем выбрать два способа установки FreeBSD 9.1: либо установить через стандартный инсталлятор bsdinstall, либо вручную, оперируя командной оболочкой.

#4. Установка FreeBSD

#4.1. Установка FreeBSD через стандартный инсталлятор bsdinstall

Действительно, на то он и инсталлятор, чтобы автоматически делать множество ручной работы. Возвращаемся из shell'а в bsdinstall командой exit.

# exit

Далее в стандартном режиме отвечаем на вопросы инсталлятора, доходим до меню выбора способа создания партиций, выбираем «Manual».

FreeBSD Partitioning

Указываем для ранее созданных файловых систем точки монтирования / (корневая файловая система) и /vs (файловая система для данных) подтверждаем внесение изменений «Commit». Обращаю внимание, что указанные точки монтирования файловых систем будут динамически отражаться на обоих компонентах зеркал.

FreeBSD 9.1 точки монтирования

Подтверждаем начало инсталляции и ожидаем завершения установки.

Установка FreeBSD 9.1

После завершения установки переходим в консоль (инсталлятор предложит). Принудительно отмонтируем файловые системы /mnt и /mnt/vs, автоматически примонтированные во время инсталляции.

# umount -f /mnt/vs
# umount -f /mnt

После этого попадём снова в псевдографическое меню и выбираем «LiveCD». Указываем логин root, попадаем в систему. Проверяем статус зеркал RAID1, монтируем корневую файловую систему в /mnt и добавляем в /boot/loader.conf загрузку модуля geom_mirror при старте системы. Перезагружаемся.

login: root
# gmirror status
       Name    Status  Components
mirror/gm1   COMPLETE  ada3 (ACTIVE)
                       ada2 (ACTIVE)
mirror/gm0   COMPLETE  ada1 (ACTIVE)
                       ada0 (ACTIVE)

Примонтируем корневую файловую систему, добавим в /boot/loader.conf загрузку модуля ядра geom_mirror при старте системы и перезагружаем операционную систему.

# mount /dev/mirror/gm0p3 /mnt
# echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf
# reboot

#4.2. Установка FreeBSD через командную оболочку

Не во всех случаях установка FreeBSD из bdsinstall подходит (например, пишется скрипт для автоматической установки системы данным способом), поэтому опишем процесс установки FreeBSD из командной оболочки. После создания зеркал, разделов и файловых систем из Shell выходить не нужно.

Монтируем корневую файловую систему.

# mount /dev/gpt/root /mnt

Приступаем к непосредственной установке системы.

# cd /usr/freebsd-dist/
# export DESTDIR=/mnt
# for file in base.txz kernel.txz lib32.txz src.txz;
> do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done

Набор архивов из /usr/freebsd-dist можно определить для установки, исходя из нужд:

base.txz - мир (сама система, окружение ядра) 
doc.txz - документация FreeBSD
games.txz - небольшой набор игр (например, fortune)
kernel.txz - ядро системы
lib32.txz - библиотеки 32х битных приложений для совместимости с 64х битными системами
ports.txz - коллекция портов
src.txz - исходные коды системы и ядра

Необходимо для установленной системы создать fstab с указанием точек и опций монтирования файловых систем

# cat > /mnt/etc/fstab << __EOF__
> # Device   Mountpoint   FStype   Options Dump   Pass
/dev/mirror/gm0p2       none           swap    sw     0       0
/dev/mirror/gm0p3       /              ufs     rw     1      1
/dev/mirror/gm1p1       /vs            ufs     rw     2      2
> __EOF__

Создаём недостающие директории для точек монтирования.

# mkdir /mnt/vs

Добавим в /boot/loader.conf загрузку модуля ядра geom_mirror при старте системы и перезагружаем операционную систему.

# echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf
# reboot

#5. Эпилог

После этого FreeBSD загружается в обычном режиме. Проверяем файловые системы (journaled soft-updates) и статус массивов RAID1.

# mount
/dev/mirror/gm0p3 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
/dev/mirror/gm1p1 on /vs (ufs, local, journaled soft-updates)
# gmirror status
      Name    Status  Components
mirror/gm0  COMPLETE  ada0 (ACTIVE)
                      ada1 (ACTIVE)
mirror/gm1  COMPLETE  ada2 (ACTIVE)
                      ada3 (ACTIVE)

Операционная система FreeBSD 9.1, установленная на зеркало RAID1 с таблицей разделов GPT, готова к использованию. Не лишнем будет устроить тестирование зеркалам, отключая поочерёдно диски. Не стоит забывать, что следует дожидаться полной синхронизации компонентов массива при включении дисков в массив, в противном случае можно лишиться данных.

freebsd/ustanovka_freebsd_9.1_s_ispolzovaniem_gmirror_i_guid_partition_table_gpt.txt · Последние изменения: 2015/01/20 20:07 — vav
Наверх
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0