Глава из книги Сага о FreeBSD
Алексей Федорчук
2008-11-26
Опять-таки, вне зависимости от дальнейших планов, на разделе /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, извлекаем загрузочный носитель и перезагружаемся.
Всё очень просто, не правда ли? Не сложнее и дальше: действуем в соответствие с ранее описанным рецептом, а именно:
И вот теперь — действительно всё. То есть впереди, конечно, ещё большая и увлекательная работа по ручной настройке всего того, что при обычной установке мы настраивали с помощью sysinstall. Однако это уже относится к следующей теме — алгоритму доведения системы до ума, чем мы займёмся в одной из ближайших глав.