Всё имеет свое начало...
5. Инсталляция без инсталлятора

Глава из книги Сага о FreeBSD

Алексей Федорчук

2008-11-26

назад | к началу

UFS или ZFS: где корень?

Опять-таки, вне зависимости от дальнейших планов, на разделе /dev/ad4s1 надо создать традиционную файловую системы UFS2:

Fixit# newfs /dev/ad0s1a

И вот теперь мы в который раз оказываемся перед вековечным русским вопросом: "что делать, блин?" Впрочем, ответ на второй вопрос — "и кто, блин, виноват?" — у нас уже есть: сами виноваты, надо было идти как все, по камушкам (описанным здесь и здесь) и не выпендриваться. Но коль уж

А широкая моя кость
И природная моя злость

заманила нас в дебри ZFS, на первый вопрос — выносить на неё корень файловой системы или нет, — отвечать придётся. И именно сейчас — от этого будет зависеть дальнейший порядок действий.

Для начала выражу своё глубокое ИМХО. На момент, когда пишутся эти строки, корневая файловая система на ZFS не имеет ни малейшего смысла. В первую очередь потому, что это — не более чем иллюзия: загрузить BSD loader и ядро системы с её модулями загрузчик boot1/boot2 в настоящий момент не способен. То есть нам придётся всё равно создавать подпорку в виде раздела с традиционной UFS для монтирования в него каталога /boot с loader.conf, ядром и модулями. А поскольку именно ядро и модули составляют единственный компонент базовой системы, объем которого, при активном экспериментировании, не поддаётся предварительному расчёту, мы теряем одно из главных преимуществ ZFS перед традиционными файловыми системами — возможность динамического перераспределения дискового пространства между отдельными ветвями файловой иерархии.

Более того, кроме отсутствия преимуществ, корень (точнее, ошмётки корня) на ZFS может только добавить некоторые сложности в аварийных ситуациях, требующих однопользовательского режима и доступа к каталогам /bin, /etc и /sbin. А оно нам надо?

Да, я знаю, что ныне во FreeBSD реализована поддержка ZFS версии 13 (сразу после 6-й). Которая предусматривает, в том числе, и возможность прямой загрузки с ZFS (некоторые подробности — здесь). Однако, по признанию самих разработчиков, она ещё Not finished. Что, конечно, флибустьера и авантюриста не остановило бы. Но: ни один из существующих дистрибутивов FreeBSD, даже снапшот 8-й ветки, на момент, когда пишутся эти строки (2008/11/23), такой возможности не поддерживает. А изготавливать такой дистрибутив собственными силами, да ещё без гарантии успеха, — это уже слишком даже для самого Билли Бонса.

Да и каталог /usr в "чистом" его виде, как было высказано iZEN'ом в обсуждении предыдущих глав этой книжки, возможно, имеет смысл оставить в составе корня. Правда, при этом нам надо было бы добавить к разделу /dev/ad4s1a пару сотен мегабайт под такие неотъемлемые ветви каталога /usr, как /usr/bin/, /usr/include/, /usr/lib/, /usr/libdata/, /usr/libexec/, /usr/sbin/, /usr/share. А в дальнейшем — не забыть создать файловые системы для изменяемых его ветвей, таких, как /usr/compat/, /usr/local/, /usr/obj/, /usr/ports/, /usr/src/, не говоря уже о /usr/home — но это у нас и так было в планах, не так ли?

Впрочем, как распорядиться каталогом /usr, каждый решит сам — хотя мне и кажется более удобным вынести его на ZFS (и в дальнейшем я буду исходить из этого), но и сохранение его на традиционной UFS тоже имеет свои плюсы..

Так что случай вернуться к обсуждению вопроса о файловой системе для корня, надеюсь, скоро представится. А пока на время "прощаемся мы с серебристой, самою заветною мечтой" о FreeBSD на сквозной ZFS и обратимся к более традиционной схеме. Желающим же примерить костыль Джона Сильвера в виде каталога /bootdir рекомендую обратиться к работе Павла Давидека, доступной также и в русском переводе. Следует только учесть, что описанный там метод не предполагает установки на "чистую" автономную машину. Но я думаю, что заинтересованный читатель и сам сообразит, как адаптировать написанное Павлом к этим условиям. А я же перехожу к установке системы в более традиционном варианте.

Развёртывание системы

Итак, судьбоносное решение о корне файловой иерархии принято. Остаётся выполнить два последних подготовительных мероприятия. Первое — создать в каталоге /mnt нашей "живой" файловой системы два подкаталога:

Fixit# mkdir /mnt/ad4s1a ; mkdir /mnt/flash

Как не трудно догадаться, первый предназначен для монтирования дискового раздела, которому в будущем суждено стать корневой файловой системой:

Fixit# mount /dev/ad4s1a /mnt/ad4s1a

Во второй же монтируем флэшку с архивами:

Fixit# mount_msdosfs /dev/da0s1 /mnt/flash

Обращаю внимание пользователей Linux'а: во FreeBSD просто команда mount, без указания типа файловой системы, предназначена только для монтирования разделов с UFS; для всех прочих файловых систем должны быть вызваны соответствующие её варианты (как в примере mount_msdosfs — для монтирования FAT любого рода); или посредством опции -t явным образом задан тип файловой системы. То есть для монтирования флэшки может быть использована такая форма:

Fixit# mount -t msdosfs /dev/da0s1 /mnt/flash

Теперь переходим в будущий корневой каталог

Fixit# cd /mnt/ad4s1a

и разворачиваем там архивы базовой системы и man-страниц (если последний у нас подготовлен):

Fixit# tar xzvf /mnt/flash/base.tgz
Fixit# tar xzvf /mnt/flash/manpages.tgz

Далее перемещаемся в загрузочный каталог грядущего корня:

Fixit# cd /mnt/ad4s1a/boot

и там уже разворачиваем архив ядра GENERIC:

Fixit# tar xzvf /mnt/dist/generic.tgz

Образовавшийся каталог /mnt/ad4s1a/boot/GENERIC переименовываем должным образом:

Fixit# mv GENERIC kernel

Вот почти и всё — прочие манипуляции откладываем до рестарта системы, который нам сейчас и надлежит обеспечить.

Для этого в первую очередь создаём (с помщью vi или ee, как душе будет угодно) файл loader.conf:

Fixit# ee /mnt/ad4s1a/boot/loader.conf

и вписываем в него пока единственную строку:

zfs_load = "YES"

Редактируем главный общесистемный конфиг:

Fixit# ee /mnt/ad4s1a/etc/rc.conf

В него также необходимо добавить только одну строку:

zfs_enable="YES"

Вкупе всё это после перезагрузки даст нам возможность использовать ZFS.

Отступление: конечно, нам есть чего ещё добавить в

Затем позаботимся о монтировании файловых систем при старте:

Fixit# ee /mnt/ad4s1a/etc/fstab

такого содержания:

/dev/ad0s4a  /		ufs     rw	1	1
/dev/ad0s4b	none	swap    sw	0	0

Последнее, что осталось — размонтировать отслужившие срок эпохи носители:

Fixit# umount /mnt/ad4s1a /mnt/flash

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

Всё очень просто, не правда ли? Не сложнее и дальше: действуем в соответствие с ранее описанным рецептом, а именно:

  • создаём пул ZFS и на нём — все необходимые файловые системы;
  • переносим туда содержимое каталогов /tmp, /var, /usr (по вкусу и потребностям);
  • обеспечиваем их монтирование в реальную файловую иерархию.

И вот теперь — действительно всё. То есть впереди, конечно, ещё большая и увлекательная работа по ручной настройке всего того, что при обычной установке мы настраивали с помощью sysinstall. Однако это уже относится к следующей теме — алгоритму доведения системы до ума, чем мы займёмся в одной из ближайших глав.

назад | к началу