Установка FreeBSD 9.0 на зеркало Gmirror в качестве корня (GEOM_MIRROR as ROOT)

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

Железянный конфиг машинки как-бы древний очень, но кадата собирался под серьезные цели — работать в какчестве маршруттера. Хотели ставить его на производстве. Потом надобность отпала, машинку не раздербанили почему-то, а после списания очутилася она у меня =).
СисБлок представляет собой мать на NForce 2 Ultra, Sempron 1700MHz, 768MB DDR, GF MX440 64MB и два винта SAMSUNG SP0411N на 40 испаханных гектаров — мечта юзера в 2002 далеком году.
Пришла в голову мысль завесить ZFS в качестве корня, но с трудом вспомнил, что это уже делал и получилось откровенно не очень. Тестирование файло-передачи этой конфигурации под ZFS (на зеркале со всеми предосторожностями ограничения по памяти и других) было около 5МБ/с, что на скачивание, что на запись при 100% отборе процессорного времени. Естественно что никакой речи об 64-битной архитектуре не было (Фря подымалась 8.2 i386), и комплектующие здесь довольно слабые для ZFS. По этой причине нужно было подобрать другое решение, программный миррор менее требовательный к производительности железок.

Отравленный моск сразу начал предлагать atacontrol, но попинав 9 версию Фри, оказалось, что сию утилу нагло исключили из окружения и всю подсистему PATA/SATA перевели на шину CAM и драйвер AHCI. Накопители же висящие на этой шине получили по буковке «а» в конце буквенного обозначения. Ну, например, диск определялся как ad0, а стал теперь определяться как ada0 . Рулить же шиной САМ теперь предписывается через утилу camcontrol. В общем про устройства типа «ar0» можно уже забыть.

Прогуглив яндекс по этому вопросу, единственное живое и простое решение оказалось предметом этой статейки, т.е. модуль ядра geom_mirror.ko. Слазил в онлайновый хандабук и изучил чего тама написана. Поковырял еще ради приличия и полного понимания другие статьи на эту тему и вот что из этого вышло.

Для любого варианта установки корня файловой системы на программные раиды, лучше всего взять dvd1 дистрибутив FreeBSD. Последним на данный момент релизом является 9.0, его и возьмем в качестве подопытного.
1. Прогружаемся с dvd диска, выбираем shell.
2. В хэндбуке написано, что надо включить отладочную информацию и дать доступ к устройству (надо понимать к gmirror) при помощи изменения sysctl:

# sysctl kern.geom.debugflags=17

3. Далее нуна подгрузить соответствующий модуль ядра, отвечающий за работу GEOM зеркала:

# kldload geom_mirror.ko

4. Ну что же, настала пора разобраться с накопителями в системе, что как там определилось, куда чего засунулось и т.д. В общем нужно внести ясность, как в дисковую подсистему так и себе в голову =). Для этого можно ступать разными путями, главное, чтоб результат был бодрым и предельно ясным для конфигурятника. Вот некоторые, что сам знаю.
Смотрим в принципе устройства на шине CAM:

# camcontrol devlist
<SAMSUNG SP0411N TW100-11>         at scbus0 target 0 lun 0 (pass0,ada0)
<_NEC CD-ROM CD-3002A C000>        at scbus0 target 1 lun 0 (pass1,cd0)
<SAMSUNG SP0411N TW100-11>         at scbus1 target 0 lun 0 (pass2,ada1)
<TS8XDVDR Transcend 1.67>          at scbus4 target 0 lun 0 (cd1,pass3)

Еще вариант с грепом вывода определившихся при загрузке устройств:

# dmesg | grep ada
ada0 at ata0 bus 0 scbus0 target 0 lun 0
ada0: <SAMSUNG SP0411N TW100-11> ATA-7 device
ada0: 100.000MB/s transfers (UDMA5, PIO 8192bytes)
ada0: 38203MB (78240863 512 byte sectors: 16H 63S/T 16383C)
ada0: Previously was known as ad0
ada1 at ata1 bus 0 scbus1 target 0 lun 0
ada1: <SAMSUNG SP0411N TW100-11> ATA-7 device
ada1: 100.000MB/s transfers (UDMA5, PIO 8192bytes)
ada1: 38203MB (78240863 512 byte sectors: 16H 63S/T 16383C)
ada1: Previously was known as ad2

Ну и самый простой способ понять что есть за накопители. Все устройства во Фре работают с системой через файлы устройств, которые валяются в каталоге /dev. Надо просто грепнуть этот каталог на предмет ada:

# ls /dev | grep ada
ada0
ada1

5. Теперь, када разобрались с накопителями, надо бы их почистить от разметки, файловых систем и прочей лабуды на них. Есстесственна нужно убрать данные с них заранее, чтобы не было мучительно больно =). Для этого деяния есть замечательная утила — gpart.
Смотрим наличие разметки, в принципе, на дисках:

# gpart show
=>      34  78240795  ada0  GPT  (37G)
34       256           1  freebsd-boot  (128k)
290   6291456           2  freebsd-swap  (3.0G)
6291746  71303168           3  freebsd-ufs  (34G)
77594914    645915              - free -  (315M)

=>      63  976773105  ada1  MBR  (37G)
63  976751937    1  freebsd  [active]  (37G)
976752000      21168       - free -  (10M)

Видим присутствие и GPT и MBR разметки на дисках, убиваем разметку на обоих в наглую (параметр -F)

# gpart -F destroy ada0
# gpart -F destroy ada1

6. Далее начинаем работать непосредственно над созданием зеркала, полезно будет искурить «man gmirror» по этому поводу. В кратце, сначала мутим зеркальце на одном винте ada0, а далее следом вставляем второй винт в зеркало:

# gmirror label -v -b round-robin gm0 /dev/ada0
# gmirror insert gm0 /dev/ada1

Здесь: -v быть более вербозным, т.е. информативным, -b алгоритм распределения нагрузки при чтении с зеркала, мы поставили модный ныне round-robin, gm0 — имя создаваемого устройства зеркалирования.
7. Пока в командной строке сделано все, что нужно, чешем в псевдо графовый инсталлер обратно:

# exit

На мой взгляд, лучше остаться в шелле и замутить тем же gpart на устройстве gm0 разметку и необходимые разделы. Но тут кому как удобнее. В любом случае BSD installer в авто режиме не видит устройства gm0, выбираем «manual» и тада видим gm0 примерно так:

ada0
gm0 [берем этот например]
ada1
gm0

8. Долго не думая, выбираем первый gm0 и при помощи псевдо-графики и кнопки «Create» мутим следующую структуру, внимательно читая подсказки:

=>      34  78240795  mirror/gm0  GPT  (37G)
34       256           1  freebsd-boot  (128k)
290   6291456           2  freebsd-swap  (3.0G)
6291746  71303168           3  freebsd-ufs  (34G)
77594914    645915              - free -  (315M)

9. После жмем псевдо-кнопку «Finish», соглашаемся на применение изменений, выбираем чего собстна ставить из компонентов, на мой взгляд нужно все кроме «games» при условии, что места хватает, в противном случае нужно подумать над портами и сырцами.

Если хотите установить систему ручками, то нужно перейти в  чистый шелл, затем в дистрибутив и выполнить мелкий скриптик в одну строчку с циклом

sh
cd /usr/freebsd-dist/
for file in base.txz doc.txz kernel.txz ports.txz src.txz lib32.txz; do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}) ; done

10.Пробегаем по инсталлятору далее, ставим всякие пароли рутов, создаем пользаков и т.п. В конце нас спросють, хотите мол в шелл допинать систему, говорим — «хотим сильно» и лезем в него. Нам тут же организовывают чрут (chroot) в /mnt (это смонтированная папка, куда система распаковалась, становится корнем (/) на время) и нас пускают там порезвиться.
11. создаем файл loader.conf в каталоге /boot и пишем в него строку geom_mirror_load=»YES», это надобно для загрузки модуля зеркалирования на этапе загрузки ядра системы.

# ee /boot/loader.conf
пишем в нём geom_mirror_load="YES"

Аксиомы

Если первый раз в ее (Easy Editor), то после написания строки, оставьте в конце еще одну пустую =) и нажмите клавишу ESC, обождите пока появится меню, нажмите пункт а — leave editor, а затем а — save changes.

12. Чешем в /etc и смотрим файл fstab (конфиг файла отвечает за монтирование файловых систем при старте системы. Справедливости и предостережения ради стоит заметить, что файлик очень ответственный. При неправильном заполнении Single User Mode обеспечен при следующей перезагрузке =) ). Просто, ! это можно сделать так:

# cat /etc/fstab
# Device        Mountpoint      FStype  Options Dump    Pass#
/dev/mirror/gm0p2       none            swap    sw      0       0
/dev/mirror/gm0p3       /               ufs     rw      1       1

Если все как здесЯ, то все хоросЁ.

При следующей «загруске вылезит»<==(с) Яша «Invalid backup GPT header» сообщение. Страху особого нет, просто GPT была создана поверх зеркала. Размер программного устройства /dev/mirror/gm0 на 1 сектор меньше, чем размер LBA диска, так как gmirror забирает последний сектор для хранения своих метаданных. Загрузчик gpt-boot ничего не ведает о программном зеркале и высматривает резервный заголовок GPT в конце диска, а там место то уже занято, там находятся метаданные gmirror, вот такая петрушка. накладка в общем имеет место бить, но жить не мешает, так что можно смело заб(ы/и)ть.

Приперлись мы наконец к концу повествования И самой навязчивой иде-е-ю стало оценить производительность модуля «ЖЭ-МИРРАР»  на таком, вот, интересном способе реализации программного зеркалирования. Ну что тут могу сказать, уважаемые мною личности, стремящиеся к безмятежности админской жизни? Производительность на запись стала возникать в пределе 35 МБ/с, а скачивание почему-то не боле 12МБ/с супротив ZFS c 5МБ/с туда и сюда. Машинка по сети отвечает быстро и без затупов, так что можно сказать, что с задачей справились — работать вполне можно, если не требовать от старика системного блока зета-производительности.

И самое главное! Помните!
Неосторожный опохмел приводит к длительному запою, что сильно портит и видо-изменяет ауру и возможности бренного тела. И после конфигов на синюю голову крайне необходимо их  полностью пересмотреть на абсолютно трезвую и здравую головно-мозговую деятельность!
Хе-хе +).

Установка FreeBSD 9.0 на зеркало Gmirror в качестве корня (GEOM_MIRROR as ROOT): 2 комментария

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

CAPTCHA изображение

*