Глава из книги Сага о FreeBSD
Алексей Федорчук
2008-11-26
Сначала всё происходит как обычно — появляется меню загрузчика FreeBSD. И вот тут имеет смысл нажать на Spacebar, дабы прекратить отсчёт времени и подумать: а нужна ли нам файловая система ZFS. И при положительном решении этого вопроса (что я настоятельно рекомендую — иначе всю катавасию с ручной установкой и затевать не стоило бы) принять соответствующие меры. Ибо по умолчанию при старте системы с "живого" диска модуль поддержки ZFS не подгружается.
Так что следует выйти из меню загрузчика выйти в его командную строку с приглашением
OK
командой
OK lsmod
убедиться, что поддержкой ZFS и не пахнет, командой
OK ls /boot/kernel/
просмотреть список доступных модулей и найти среди них нужный — zfs.ko. Который и подгрузить командой
OK load zfs
После этого повторим команду
OK lsmod
чтобы убедиться, загрузились ли модуль zfs и модуль opensolaris, от которого он зависит:
0x12cf000: /boot/kernel/zfs.ko (elf obj module, 0xf9a60) 0x13c9000: /boot/kernel/opensolaris.ko (elf obj module, 0x3728)
Теперь остаётся только загрузиться командой
OK boot
чтобы для начала попасть в панель Country Selection, где выбрать страну по умолчанию, то есть United States. И оказаться — все пути ведут в Рим — в главном меню программы sysinstall, без которой мы вроде решили обойтись, не так ли?
А что, и обойдёмся. Для этого отправляемся в пункт Fixit:

После чего выбираем использование "живой" файловой системы с CD/DVD:

И в результате попадаем в командную строку с приглашением
Fixit#
Это — обычная sh-подобная командная оболочка с довольно ограниченными возможностями. Так, история команд в ней имеется, но никакого намёка на автодополнение мы не увидим. Тем не менее, все необходимые действия в ней выполнить можно без особого труда. И первое из них —
Разумеется, разметку диска можно выполнить, повторно вызвав sysinstall из командной строки Fixit, перейдя там к пункту Configure, а в нём — к подпункту Fdisk, как об этом говорилось в предыдущих главах. Но это было бы прихлёбным плюрализмом — и мы выполним данную операцию вручную, тем более, что это не так уж и сложно. В подробностях процесс ручной разметки диска будет рассмотрен в соответствующей главе. Пока же — только пара рецептов, применимых к данному случаю.
Для начала запомним, что во FreeBSD, в отличие от Linux'а, разбиение диска и собственно разметка разделов выполняются двумя разными утилитами — fdisk и bsdlabel, а файловые системы на разделах создаются утилитой newfs.
Утилита fdisk служит для разбивки диска на слайсы (то есть первичные разделы, в понимании Windows и Linux). В целях упрощения мы сейчас ограничимся созданием одного слайса в так называемом режиме совместимости, а детали и возможные варианты рассмотрим в соответствующей главе. Исходя из предположения, что мы имеем дело с первым диском SATA, делаем это следующей командой:
Fixit# fdisk -BI /dev/ad4
в которой опция I и предписывает создание единственного слайса (/dev/ad4s1) на весь объем диска, а опция B обеспечивает помещение загрузочного кода boot0 в его MBR (о чём речь пойдёт в следующей главе).
Теперь создаём "базовую" схему разметки слайса в BSD-стиле:
Fixit# bsdlabel -wB /dev/ad4s1
В результате этого образуется устройство /dev/ad0s1c — нечто вроде контейнера для логических дисков, которые мы создадим на следующем этапе, ему присваивается метка BSD Label и устанавливается загрузчик — программы boot1 и boot2 (см. следующую главу). Просмотреть итог нашей деятельности можно той же командой без опций:
Fixit# bsdlabel /dev/ad4s1
вывод которой будет выглядеть примерно так:
# size offset fstype [fsize bsize bps/cpg] c: 976768002 0 unused 0 0 # "raw" part, don't edit
Здесь размер "контейнера" c указан в физических блоках диска (512 байт) — ими нам и придётся оперировать далее, при создании собственно логических разделов. Делается это, как ни странно, в текстовом редакторе. Команда
Fixit# bsdlabel -e /dev/ad4s1
вызывает его для прямого редактирования метки слайса в виде, указанном выше. В нашу задачу входит создать такие разделы: ad4s1a для корневой файловой системы, ad4s1b для подкачки и раздел ad4s1d, который в дальнейшем будет задействован под файловую систему ZFS. Для каждого из них потребуется задать размер и оффсет (смещение относительно начала) в тех же пятьсотдвенадцатибайтных блоках — вот зачем наличие калькулятора или листка бумаги было необходимым моментом подготовки к ручной инсталляции FreeBSD (хотя для действующего преферансиста не сложно провести соответствующие расчёты и в уме).
Касаемо размера создаваемых разделов надо сказать следующее. Под корневой раздел, вне зависимости от того, будем ли мы использовать на нём традиционную файловую систему UFS2, как это было описано в соответствующей главе, или в дальнейшем вынесем корень файловой иерархии на ZFS (о целесообразности чего я скажу чуть ниже), нам потребуется около полугигабайта.
Почему так много? А давайте подсчитаем: умолчальное ядро FreeBSD, так называемое GENERIC, вместе со всеми прилагающимися к нему модулями, занимает около 200 Мбайт (для веток 7 и 8). Прочие компоненты базовой системы, которые обязаны находиться в корневом каталоге (/bin/, /etc/, /lib/, /libexec/, /rescue/, /root/, /sbin/), добавят сюда еще пару десятков мегабайт, не больше. Зачем же остальное?
Дело в том, что первая же пересборка ядра (а если мы будем использовать какую-либо из тестируемых версий, необходимость в ней возникнет немедленно, в случае версии стабильной — достаточно скоро) удвоит нам этот объем: ибо к нему присоединяться новое ядро и его модули при сохранении, для страховки, старых. И хотя в главе о сборке ядра и "мира" мы увидим, что суммарный объем новобразованного ядра и модулей можно несколько уменьшить, экономия всё равно получится грошовой. А если мы хотим ещё и экспериментировать с ядрами (ведь читают эту главу, думаю, только "флибустьеры и авантюристы, братья по крови упругой и густой"), то раскинуть /dev/ad4s1 до 768 Мбайт сам Бог велел...
Теперь — раздел подкачки. Как уже неоднократно говорилось ранее, ZFS очень любит память. И потому при реальных ныне объемах оной в 4 Гбайт отдать под своппинг её удвоенный объём — отнюдь не впадлу. Ну а под собственно ZFS — вместилище для всего остального — отвести уже что осталось (в рассматриваемом примере с полутерабайтным винчестером это будут жалкие 450 настоящих гигабайт).
В качестве средства для редактирования метки диска по умолчанию выступает первозданный vi. Если вы испытываете стойкую неприязнь к этому редактору (или просто плохого его знаете), есть и альтернатива — редактор ee (именно поэтому я и решил дать внеочередное его описание, не дожидаясь соответствующей главы). Чтобы воспользоваться им, следует определить соответствующую переменную окружения:
Fixit# export EDITOR=ee
После этого при запуске bsdlabel с опцией -e (и в других аналогичных случаях) именно ee будет вызываться в качестве средства редактирования.
Тем не менее, каким средством редактирования метки мы бы ни воспользовались, привести её надо примерно к такому виду (в предположении, что под корневой раздел отдано всё-таки лишь 512 Мбайт):
# size offset fstype [fsize bsize bps/cpg] a: 1048576 0 4.2BSD 2048 16384 8 b: 19916186 1048576 swap 0 0 c: 976768002 0 unused 0 0 # "raw" part, don't edit d: 951144390 0 unused 0 0