Создаем загружаемый Flash-диск с FreeBSD и DOS

Часть I

Рашид Ачилов

Начальство признало необходимость установки нового сервера, подписало счета, выделило деньги - вот он, красавец! Вот только... как на него поставить FreeBSD? Дисковода нет, CDROM отсутствует, из стойки не вытащить... Да и оборудование бы проверить. Остается одно - загрузить с USB.

Наша цель - загрузиться с Flash

Поначалу задача казалась настолько несложной, что даже мысли писать об этом не возникало. Ну подумаешь, поставить систему на компьютер, в котором нет ни дисковода гибких дисков, ни CD-ROM, а жесткие диски в нем установлены вертикально, чтобы больше поместилось. К тому же он будет постоянно установлен в стойке и вытаскивать его надолго оттуда нельзя (а иначе что это за сервер?). Ведь современные компьютеры умеют грузиться с Flash. Нет такой Flash? Ну что ж, надо сделать... И не забыть при этом, что временами возникает необходимость тестирования жестких дисков, сетевых карт, xDSL-модемов и прочего оборудования на самом нижнем уровне. А какая операционная система позволит это сделать? Правильно, только MS-DOS. Нужен непосредственный доступ к оборудованию. В *NIX такое может быть обеспечено драйвером, но где вы видели драйвер, который позволяет напрямую пропустить команды канала? Значит, надо предусмотреть на Flash-диске наличие MS-DOS, а также менеджер загрузок, который позволил бы выбрать при старте одну из этих систем. Причем это должен быть не стандартный для FreeBSD BootEasy, который своим аскетичным внешним видом способен испугать кого угодно.

Это не Frenzy. И не FreeSBIE. Это FlashBOOT!

Сообщество эхо-конференции RU.UNIX.BSD откровенно недоумевало, когда я сказал о том, что собираюсь сделать. Отзывы были примерно такими: "это все ерунда, уже есть Frenzy, которая умеет грузиться с Flash, уже есть FreeSBIE, которая с версии 2.0 сможет загружаться с любого носителя, а DOS - так он вообще никому уже не нужен". Любопытно, что про то, что DOS никому не нужен, говорили люди, для которых замена жесткого диска, как правило, дешевле ремонта. Или же люди, не представляющие себе, что можно сделать с помощью, например, MHDD. На что я неизменно отвечал, что этот проект разрабатываю для себя, если кому-то он понравится - хорошо, нет - и не надо.

Итак, что же входит в состав Flash-BOOT и чем он отличается от Frenzy (FreeSBIE в настоящий момент еще не умеет грузиться с Flash и, по причинам, приведенным выше, не рассматривается).

"Frenzy - это "портативный инструмент системного администратора", LiveCD на базе ОС FreeBSD, загрузившись с которого, администратор получает полностью работоспособную систему с набором программного обеспечения для настройки, проверки и анализа сети, тестирования компьютерного "железа" и ряда других задач" - это описание Frenzy взято с [1]. После ознакомления со списком программ, входящих во Frenzy, я сразу же задался вопросом: "А для чего все это?". После некоторого более пристального изучения возник и ответ: "Так это же LiveCD на Flash, а вовсе не то, что мне нужно!"

Какие цели преследует Frenzy? Как и любой другой LiveCD - загрузиться и предоставить пользователю максимально возможное количество программ для работы. Отсюда и графическая среда, и почтовые клиенты, и разнообразные коммуникаторы - список программ, входящих во Frenzy, достаточно впечатляющий. Несомненно, это все нужные вещи. Но как с их помощью проверить целостность файловой базы? AIDE, которая по моему мнению, нужнее, чем все графические менеджеры, вместе взятые, я не нашел. Наличие программ стандартной поставки (fdisk, disklabel, sysinstall, etc.) на сайте не оговаривается, дистрибутив мне скачивать не захотелось - жаль тратить "на посмотреть" 600 Мб вовсе не бесплатного трафика. Скорее всего их нет - в состав Frenzy входит множество программ, нужно же где-то взять для них место. То есть установить FreeBSD на новый компьютер с его помощью невозможно. Наличие стандартной документации на программы (все мы люди, ну вот вылетели у меня из головы ключи некоей программы - где посмотреть, если сервера нет, связи нет и спросить не у кого?) опять же не оговаривается, скорее всего их тоже нет. Создание собственного дистрибутива Frenzy - вещь отнюдь не тривиальная, автор об этом честно предупреждает, под FreeBSD 5.х создать дистрибутив Frenzy невозможно, потому что используется burncd для записи образа.

Все вышеприведенное было сказано вовсе не с целью как-то преуменьшить заслуги автора Frenzy - "ведь если звезды зажигают, значит, это кому-нибудь нужно". Цель вышеизложенного - показать, что Frenzy и FlashBOOT создавались для решения разных задач. FlashBOOT - это не комплект программ для работы, это комплект аварийно-восстановительный с возможностью установки системы на новый компьютер, что-то среднее между Install и Fixit-дисками из стандартной поставки FreeBSD. FlashBOOT в значительно большей мере рассчитан на тех, кто понимает, что он делает, потому что установка системы в нем производится не как обычно, "не выходя из sysinstall", а по большей части ручным вводом команд. Да, это не модно. Да, это сложнее, чем обычно. Но это работает. В нем нет и скорее всего никогда не будет никаких графических сред. В нем есть то, что необходимо для установки FreeBSD на новый компьютер, для тестирования аппаратной части, для проверки файловой целостности... и все, что входит в базовую поставку стандартной системы, перечислять здесь не имеет никакого смысла. А также все, что можно запустить в DOS.

Итак, что же входит во FlashBOOT?

Состав FlashBOOT

Отчет fdisk:

# fdisk /dev/da0

******* Working on device /dev/da0 *******

parameters extracted from in-core disklabel are:

cylinders=246 heads=64 sectors/track=32 (2048 blks/cyl)

parameters to be used for BIOS calculations are:

cylinders=246 heads=64 sectors/track=32 (2048 blks/cyl)

Media sector size is 512

Warning: BIOS sector numbering starts with sector 1

Information from DOS bootblock is:

The data for partition 1 is:

sysid 4 (0x04),(Primary DOS with 16 bit FAT (< 32MB))

start 63, size 48132 (23 Meg), flag 0

beg: cyl 0/ head 1/ sector 1;

end: cyl 47/ head 12/ sector 63

The data for partition 2 is:

sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)

start 48195, size 455612 (222 Meg), flag 80 (active)

beg: cyl 47/ head 13/ sector 1;

end: cyl 499/ head 12/ sector 59

The data for partition 3 is:

<UNUSED>

The data for partition 4 is:

<UNUSED>

В качестве менеджера загрузки операционных систем используется программа, функционирующая под DOS - xFDisk, взятая с [2]. Программа была выбрана после долгой процедуры отбора менеджеров загрузки, способных:

n Загрузиться с Flash самим. Как это ни странно, это оказалось непосильной задачей для SyMon [3], Ranish Partition Manager (имеет встроенный менеджер загрузок [4]), XOSL [5] и MATTSoft Boot Manager [6].

n Загрузить FreeBSD. Это оказалось не под силу симпатичному, но, увы, бесполезному zBoot [7].

Другими прошедшими тест на возможность использования для Flash оказались BootEasy и ExtIPL. Это неудивительно, потому что BootEasy - стандартный менеджер загрузок для FreeBSD, а ExtIPL присутствует в портах (sysutils/extipl). Почему я использовал менеджер загрузок, настраиваемый под DOS, а не под FreeBSD (GRUB, например)? GRUB был установлен на первые версии FlashBOOT, но после возникновения странных проблем, когда он неожиданно отказался ставиться в область загрузки, был заменен на xFDisk, тем более что переставить DOS значительно проще, чем FreeBSD (рис. 1).

Рисунок 1. Внешний вид менеджера загрузок xFDisk

Раздел DOS

Стандартный загружаемый раздел формата FAT16 с установленной операционной системой MS-DOS 6.22. Операционная система размещена в каталоге DOS. Установлено следующее программное обеспечение:

n Dos Navigator (C:DN149).

n Multi-Edit 7.0 (C:ME70).

n Norton Utilites 8.0 (C:NORTON8).

n Множество различных программ, работающих под DOS, разнообразного назначения. Архиваторы, конвертеры, отладчики, упаковщики, драйвера оборудования - все, что может осесть на диске после более чем пяти лет работы под DOS. (C:UTILS и подкаталоги в нем).

Создано множество вариантов загрузки - загрузка EMM, загрузка драйвера звуковой карты, загрузка драйвера CDROM и загрузка драйвера USB (да-да, это есть!) во всех возможных сочетаниях. Оболочка Dos Navigator установлена вместе с большой (порядка 60) коллекцией программ просмотра файлов различного формата. Записана программа тестирования дисков на нижнем уровне MHDD. Все это покрывает практически 90% задач, для которых используется DOS, а для остального всегда есть свободное место.

Раздел FreeBSD

Отчет disklabel:

# disklabel da0s2

# /dev/da0s2:

8 partitions:

# size offset fstype [fsize bsize bps/cpg]

a: 455596 16 4.2BSD 2048 16384 28480

c: 455612 0 unused 0 0 # "raw" part, don't edit

Отчет df:

Filesystem 1K-blocks Used Avail Capacity Mounted on

/dev/da0s1 23863 19237 4626 81% /mnt/umass/dos

/dev/da0s2a 220420 166856 35932 82% /mnt/umass/ufs

Здесь разделы Flash-диска смонтированы на другом компьютере в точки монтирования /mnt/umass/dos и /mnt/umass/ufs соответственно.

Стандартный загружаемый раздел FreeBSD. Система устанавливалась при помощи /stand/sysinstall и частично вручную, без применения каких-либо скриптов. Установлены стандартные пакеты base, compat4x и man. Вручную добавлены следующие пакеты (все устанавливалось через порты):

n pcre 5.0 (требуется для nmap)

n libgpg-error 1.0 (требуется для libgcrypt)

n mc 4.6.0

n mhash 0.9.1 (требуется для aide)

n aide 0.10

n yui 3.1.15

n libgcrypt 1.2.1

n SSH2 3.2.9.1

n pkgconfig 0.17.2 (требуется для glib, mc)

n libiconv 1.9.2 (требуется для gettext, glib, mc, libgcrypt, libgpg-error)

n rar 3.41

n gettext 0.14.5 (требуется для glib, mc, libgcrypt, libgpg-error)

n glib 2.6.5 (требуется для mc)

n unzip 5.52

n nmap 3.81

n libslang 1.4.9 (требуется для mc)

n ncftp 3.1.9

n grub 0.97

Для экономии места удалены все каталоги языковых настроек (удалено все, не относящееся к русскому или английскому). Это /usr/share/locale, /usr/local/share/locale. Почищены все каталоги поддержки национальных языков (/usr/share/nls, /usr/local/share/nls). Удалены каталоги с документацией о системе /usr/share/doc, /usr/share/info.

Скачать образ Flash, упакованный RAR 3.41, можно здесь - http://support.spectrum.ru/freebsd/dosandfreebsd54.rar. Контрольная сумма MD5 равна: MD5 (dosandfreebsd54.rar) = 732ada4b8bc98a0251cfe3682c160a62.

Ядро собрано с оптимизацией под Pentium III (на более старых компьютерах нет возможности загружаться с USB). Зарегистрирован только один пользователь root, который может заходить в систему без запроса пароля. Это было настроено с помощью PAM.

Сетевая карта при старте системы не настраивается, это необходимо каждый раз делать вручную. Сделано это специально, потому что FlashBOOT - дистрибутив аварийно-восстановительный, и если он используется - значит произошло что-то нестандартное. По этой же причине не запускается ни один сетевой сервис. Впрочем, никто не помешает вам перенастроить систему по своему вкусу.

Создание

Разнообразных ошибок при попытках создания двух разделов и менеджера загрузок было столько, что я просто не знал, за какую из них браться. Первоначальный порядок действий при создании Flash был примерно такой:

n Создать раздел FAT16 и отформатировать его.

n Установить загрузчик и ядро операционной системы DOS.

n Установить менеджер загрузок.

n Создать раздел (слайс) FreeBSD, корневой раздел файловой системы и отформатировать его (асинхронное обновление должно быть отключено - мигнёт свет при загрузке, и прощайте внесенные изменения.

n Проверить, что загружается и DOS, и FreeBSD.

n Установить и настроить программное обеспечение обеих систем.

Несложный план, скажете вы. Не тут-то было. Проблемы были во всем, от установки менеджера загрузок до настройки софта. Больше всего проблем, конечно же, вызвало создание раздела FAT16 - ни тривиальными, ни нетривиальными средствами сделать это сначала просто не удавалось, потому что:

n с FAT-раздела, создаваемого во FreeBSD через /stand/sysinstall, а также через "fdisk -e", DOS грузиться категорически отказывался. Да, его можно было увидеть через USB for DOS при загрузке с дискеты, но команда sys c: завершалась аварийно. После нескольких попыток я отказался от практики создания разделов FAT во FreeBSD, так как заподозрил, что раздел FAT создается "немножко не такой", каким хотел бы его видеть загрузчик BIOS.

n Flash 2.0 объемом 256 Мб, на которой предполагалось все это создать (Kingston DataTraveler 2.0), в Windows определяется как съемный носитель и соответственно не может быть размечен средствами программ работы с разделами жесткого диска типа Acronis Disk Director или Partition Magic.

Выход из положения был найден, когда я обнаружил, что другая, более старая Flash 1.1 128 Мб (Seitek BAR) определяется Windows как жесткий диск. С помощью Acronis Disk Director на этой Flash был создан раздел FAT16 размером 23 Мб, DOS загружен с дискеты с драйверами USB for DOS и вновь созданный раздел был сделан загрузочным командой "sys a: c:".

После этого я убедился, что DOS с этой Flash загружается, и скопировал ее начало (загрузчик, таблицу разделов, FAT и только что созданные системные файлы). Копировать все 23 Мб не было необходимости, поскольку нужная информация о файловой системе сосредоточена исключительно в FAT. Образ был создан следующей командой:

# dd if=/dev/da0 of=seitek2000.dsk count=2000

Файл образа, упакованный RAR 3.41, можно скачать по ссылке [8].

После его записи на Flash командой, например:

# dd if=seitek2000.dsk of=/dev/da0

получится Flash с одним разделом DOS, в котором ничего нет, кроме ядра системы - io.sys, msdos.sys и command.com. Менеджера разделов тоже нет. Надо сказать, что в процессе создания Flash именно этот файл не раз оказывал мне неоценимую помощь - неоднократно приходилось возвращаться к началу и заново разворачивать его на Flash. Отчет fdisk по этому файлу можно скачать по ссылке [9]. Обратите внимание, что значения начала и конца раздела выражены другими цифрами, хотя обьем тот же самый. Ниже приводятся данные о разделе, созданном с помощью Acronis Disk Directory Suite в Windows.

The data for partition 1 is:

sysid 4 (0x04),(Primary DOS with 16 bit FAT (< 32MB))

start 63, size 48132 (23 Meg), flag 80 (active)

beg: cyl 0/ head 1/ sector 1;

end: cyl 2/ head 254/ sector 63

Следующее действие заключалось в подборе менеджера загрузок, такого, чтобы он мог загрузиться с Flash сам и загрузить оттуда FreeBSD. В начале статьи уже перечислены менеджеры загрузок, которые были мной испытаны и проверка которых дала отрицательный результат. Первым был проверен BootEasy, являющийся стандартным менеджером загрузок для FreeBSD - дубовым, страшненьким и абсолютно надежным. Разумеется, он заработал. После установки BootEasy первым делом был создан образ области загрузчика (первые 63 сектора Flash) для восстановления работоспособности системы во время экспериментов с загрузчиками.

Образ с загрузчиком BootEasy и двумя разделами (DOS и FreeBSD) можно скачать по ссылке [10]. Отчет fdisk по этому образу можно скачать по ссылке [11].

Образ с загрузчиком xFDisk (внешний вид которого приведен на рис. 1) и двумя разделами (DOS и FreeBSD) можно скачать по ссылке [12]. Отчет fdisk по этому образу можно скачать по ссылке [13].

SyMon, проверенный первым, не увидел ни одного раздела, программа настройки в версии 2.х отказалась запуститься, в версии 3.х захотела только создать новый раздел.

Ranish, XOSL и MATTSoft не смогли загрузиться - процесс загрузки зависал сразу после появления идентификационной надписи менеджера загрузок. Особенно обидно было за Ranish - очень симпатичный менеджер разделов. Потом был обнаружен zBoot, который наконец-то смог загрузиться, а также ExtIPL и xFDisk. После установки менеджера загрузок (в тот момент им был zBoot) с помощью менеджера разделов Ranish Partition Manager был создан раздел для FreeBSD.

Почему для создания раздела не использовалась стандартная для FreeBSD программа /stand/sysinstall? Возникло подозрение, что раздел для FreeBSD, создаваемый через sysinstall, тоже "немножко не такой", каким хотел бы его видеть менеджер загрузок. Ниже для сравнения приводятся несколько укороченные отчеты fdisk по разделам, созданным с помощью /stand/sysinstall и с помощью Ranish Partition manager.

Раздел, созданный /stand/sysinstall:

The data for partition 1 is:

sysid 4 (0x04),(Primary DOS with 16 bit FAT (< 32MB))

start 63, size 48132 (23 Meg), flag 80 (active)

beg: cyl 0/ head 1/ sector 32;

end: cyl 23/ head 34/ sector 3

The data for partition 2 is:

sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)

start 48195, size 455613 (222 Meg), flag 0

beg: cyl 23/ head 34/ sector 4;

end: cyl 245/ head 63/ sector 32

Раздел, созданный Ranish Partiiton Manager:

The data for partition 1 is:

sysid 4 (0x04),(Primary DOS with 16 bit FAT (< 32MB))

start 63, size 48132 (23 Meg), flag 80 (active)

beg: cyl 0/ head 1/ sector 1;

end: cyl 2/ head 254/ sector 63

The data for partition 2 is:

sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)

start 48195, size 455612 (222 Meg), flag 0

beg: cyl 3/ head 0/ sector 1;

end: cyl 31/ head 91/ sector 59

Как совершенно очевидно, значения цилиндр-головка-сектор отличаются, хотя размер разделов одинаковый. Более того, эти цифры отличаются и от тех, что приведены в начале статьи в плане разделов! Они изменяются, когда команда disklabel записывает загрузчик FreeBSD. На самом деле, конечно же, все эти цифры условные. На Flash нет никаких цилиндров, головок и тому подобных вещей. Вся эта терминология идет от жестких дисков и оставлена для совместимости. Поэтому неудивительно, что все работает, несмотря на изменения цифр.

Как это ни странно, нормальный раздел FreeBSD через программу /stand/sysinstall создать не удалось - как только создавался раздел программой sysinstall, так при следующей загрузке что-то непременно ломалось - переставал грузиться или DOS, или сам менеджер загрузок. Поэтому в следующей попытке раздел под FreeBSD был создан с помощью Ranish Partition Manager. Поскольку Ranish не может напрямую создать раздел FreeBSD, можно создать раздел любого типа, а потом отредактировать его тип. Тип раздела FreeBSD - 165 (при редактировании Ranish дает список типов, из которого следует выбрать нужный). Для тех, кто не хочет сам создавать разделы, существует файл xfidskboot.rar, ссылка на который приведена выше. Он содержит два раздела с правильными значениями (образ снимался уже после установки FreeBSD). После создания раздела FreeBSD раздел DOS был заполнен программным обеспечением и началась установка FreeBSD.

Здесь все тоже оказалось весьма непросто. Стандартная программа установки /stand/sysinstall хоть и имеет возможность изменения "корневого каталога установки", но не всегда этим параметром пользуется. Например, при установке пароля root, независимо от значения этого параметра, меняется пароль в /etc/master.passwd. На самом деле работа /stand/sysinstall - это последовательность выполнения некоторых операций, которые можно выполнить и вручную. И, собственно, первый этап - создание раздела для установки FreeBSD - мы уже сделали. Здесь надо отметить, что в данном контексте "раздел" - термин DOS, а не FreeBSD. Во FreeBSD это называется слайсом (slice). Слайс - это мета-раздел, для него всегда резервируется буква "c", которая не может быть использована для других разделов (например, /dev/ad0s2c). Иногда этот раздел (здесь "раздел" - уже терминология FreeBSD) еще называют "описателем слайса", потому что он всегда описывает все выделенное в слайсе пространство. Но сейчас в нем еще ничего не записано. Первым делом мы создаем внутри слайса описатель (раздел s2c) и один раздел с точкой монтирования "/", который будет использоваться как корень файловой системы. Других разделов создавать не будем - диск и так не очень большой. Для создания разделов используем команду disklabel следующим образом:

# disklabel -w /dev/da0s2

Здесь /dev/da0s2 - имя слайса, на который будет установлена FreeBSD. Слайс (в терминологии DOS "раздел") /dev/da0s1 занят под DOS.

Команда disklabel создала необходимые разделы. Но монтировать еще пока нечего, disklabel - это "fdisk для разделов FreeBSD". Это часто вызывает путаницу - как это, разделы внутри разделов? Несмотря на кажущуюся сложность, это очень удобно. Дело в том, что размер таблицы разделов (терминология DOS) не позволяет иметь более 4 разделов на одном диске. Ограничение это было введено еще во времена 20Мб жестких дисков и тогда казалось вполне разумным. Со временем оно переросло в стандарт, и, хотя уже давным-давно стало неудобным, от него не отказываются. Различные менеджеры загрузок обходят его, создавая свои таблицы разделов, которые несовместимы друг с другом. FreeBSD Team поступила просто - создается некий "мета-раздел", который был назван "слайсом", в котором находятся "разделы". Поэтому, сколько бы на самом деле не было файловых систем в слайсе FreeBSD, для менеджеров загрузок он выглядит всегда как один раздел.

Почему мы опять не используем для создания разделов в слайсе /stand/sysinstall? Потому что мной было замечено, что при непосредственном создании разделов в слайсе через disklabel DEVFS создает устойство /dev/da0s2a, отражающее созданный раздел, а при создании разделов через /stand/sysinstall - создает почему-то /dev/da0s2d, несмотря на то что /dev/da0s2a не существует (а разделы создаются строго по порядку).

Наконец раздел для FreeBSD создан. По умолчанию в нем отключено асинхронное обновление и отключено использование ACL. Проверить это можно в любое время командой tunefs:

# tunefs -p /dev/da0s1a

tunefs: ACLs: (-a) disabled

tunefs: MAC multilabel: (-l) disabled

tunefs: soft updates: (-n) disabled

tunefs: maximum blocks per file in a cylinder group: (-e) 2048

tunefs: average file size: (-f) 16384

tunefs: average number of files in a directory: (-s) 64

tunefs: minimum percentage of free space: (-m) 8%

tunefs: optimization preference: (-o) time

tunefs: volume label: (-L)

Каковы будут наши дальнейшие шаги:

n Создание файловой системы в разделе (через /stand/sysinstall).

n Установка программного обеспечения, входящего в базовую поставку (через /stand/sysinstall).

n Копирование каталога /stand.

n Установка загрузчика FreeBSD.

n Реконфигурация ядра, записываемого на Flash.

n Настройка конфигурационных файлов.

n Установка дополнительного софта.

n Настройка часового пояса (на загруженном Flash).

Предварительно на компьютере, на котором производится установка FreeBSD, на Flash необходимо создать точку (точки) монтирования для разделов DOS и FreeBSD. Допустим, эти точки монтирования созданы и называются /mnt/umass/dos для раздела DOS и /mnt/umass/ufs для раздела FreeBSD.

Запускаем /stand/sysinstall, выбираем пункт "Do post-install configuration of FreeBSD", затем "The disk Label editor", переводим курсор на da0, отмечаем его нажатием клавиши "пробел" и получаем экран FreeBSD Disklabel editor. Переводим курсор на строку da0s2a, нажимаем <M> и задаем точку монтирования, в которую будет смонтирована файловая система после ее создания. Данная точка монтирования может и не существовать, в этом случае она будет создана автоматически.

Внимание! Здесь задается точка монтирования в текущей системе, а не та точка, в которую данная файловая система будет смонтирована при загрузке!

Затем указываем, что файловая система требует создания (это может быть не определено автоматически), нажав <T> (в колонке Part буква "N" должна смениться на "Y"), убираем признак асинхронного кэширования при записи файлов, нажав <S> (в колонке Newfs вместо "UFS2+S" должно появится "UFS2") и нажимаем <W> для записи внесенных изменений на Flash. После того как sysinstall сообщит о том, что файловая система создана, она будет смонтирована в указанную точку.

Если вдруг при запуске /stand/sysinstall после сообщения "Probing devices, please wait..." вдруг происходит аварийное завершение работы sysinstall с диагностикой "BARF 107 <157>" или подобным (числа могут отличаться) - значит, на одном из установленных жестких дисков уже созданы разделы, и sysinstall не смог правильно определить эти разделы. Обнаружить это можно также по наличию в каталоге /dev странных имен устройств типа ad0s1s1. Для того, чтобы не переставлять жесткий диск в другой компьютер, можно просто стереть таблицу разделов следующей командой:

# dd if=/dev/zero of=/dev/da0 bs=512 count=63

Внимание! Цифры в выделенном фрагменте могут отличаться в зависимости от того, где установлен жесткий диск!

Для создания файловой системы можно было бы использовать и непосредственно newfs. Задаем такую команду:

# newfs -O2 /dev/da0s2a

При этом все прочие параметры будут установлены по умолчанию (на самом деле мне никогда не приходилось их править).

Выходим из FreeBSD Disklabel editor (<Q>). Выбираем в меню "Install additional distribution sets". После выбора мы попадаем в меню "Select the distributions you wish to install". Выбираем (отмечаем нажатием клавиши "пробел") пакеты base, compat4x и man. Клавишей <Tab> переходим на <OK>, попадаем в меню "Choose installation media". Здесь, прежде чем начать выбирать, что ставить, обязательно нужно изменить "корень инсталлируемой системы" - install root. Потом это сделать не будет возможности. В меню "Choose installation media" выбираем самый последний пункт "Go to the Option Screen", переводим курсор на пункт "Install root" (стрелкой вниз, по-другому не получится), нажимаем пробел, вводим "/mnt/umass/ufs" в появившееся окно и нажимаем <Q> для выхода обратно к "Choose installation media". Выбираем носитель, который содержит дистрибутив FreeBSD. Я рекомендую устанавливать или с существующей файловой системы ("Install from an existing filesystem"), или с раздела DOS ("Install from a DOS partition"). Инструкция о том, как разместить дистрибутив на разделе DOS, приводится в [15]. Почему? Запись на Flash идет медленно, если дистрибутив устанавливается, например, по FTP, то в зависимости от сервера соединение с ним будет время от времени прерываться, программа /stand/sysinstall будет выводить заново экран "Choose installation media". Это не страшно, после повторного ввода инсталляция продолжится заново, но очень надоедает. После выбора источника дистрибутива sysinstall может спросить "Running multi-user, network already configured?", отвечаем "Yes", начинается установка. Индикатор на экране отражает состояние установки каждого пакета. Установка выбранных пакетов может идти достаточно долго - один или даже несколько часов. Программа установки обязательно должна завершить работу и вернуться в меню "FreeBSD configuration". Если во время установки появляется экран "Choose installation media", значит, возник тайм-аут на соединении с носителем и необходимо еще раз указать все настройки. Это может происходить неоднократно, никак не влияя на процесс установки, но очень надоедает раза после третьего, и именно поэтому я советовал устанавливать с существующей системы или DOS-раздела.

После завершения установки всех пакетов выходим из /stand/sysinstall. Теперь у нас есть вся базовая система полностью, в том числе GENERIC ядро, /boot и все, что необходимо для загрузки. Единственное, что не переносится при ручной установке - каталог /stand. Перенос каталога /stand выполняется следующей командой:

# find -x /stand | cpio -pdum /mnt/umass/ufs

где /mnt/umass - точка в которую был смонтирован раздел FreeBSD. На вашей системе она скорее всего будет другой. (Данная команда была взята из исходных текстов самой sysinstall).

Теперь нужно установить загрузчик ядра FreeBSD на тот раздел ("слайс"), в который инсталлирована FreeBSD. Делается это командой disklabel:

# disklabel -B da0s2

Код загрузчика будет взят из файла /boot/boot, который уже к этому времени создан в процессе установки системы.

Итак, система загружается. Это было тут же проверено, и тут же zBoot меня очень сильно разачаровал - оказывается, по непонятным причинам он не способен загрузить FreeBSD. Пришлось загрузить DOS и установить xFDisk, который загружает как DOS, так и FreeBSD без всяких проблем.

Первые версии FlashBOOT использовали в качестве менеджера загрузки GRUB, но впоследствии я перешел на конфигурируемые из DOS менеджеры, потому что установка DOS проходит значительно быстрее, чем установка FreeBSD - достаточно записать на Flash файл seitek2000.dsk, описание и ссылка на который приводилась выше, - и вот установлена чистая DOS без единой дополнительной программы.

Реконфигурация ядра делается стандартным способом - создается файл конфигурации ядра, в который вписываются все необходимые опции и устройства, выполняется команда:

# cd /usr/src

# make kernel KERNCONF=Flash DESTDIR=/mnt/umass/ufs

Здесь Flash - имя файла конфигурации ядра, который должен быть создан заранее, /mnt/umass/ufs - точка монтирования, куда был смонтирован раздел FreeBSD с Flash. При этом старый каталог ядра /mnt/umass/ufs/boot/kernel будет переименован в /mnt/umass/ufs/boot/kernel.old. Если необходимо использовать модули (все или ту часть, которая перечислена в MODULES_OVERRIDE= в файле /etc/make.conf), то дополнительно нужно сделать:

# cd /sys/modules

# make all install DESTDIR=/mnt/umass/ufs

При этом модули будут помещены или в каталог ядра /mnt/umass/ufs/boot/kernel или в каталог модулей /mnt/umass/ufs/boot/modules. Подробнее о процессе пересборки ядра написано в [14].

Настройка конфигурационных файлов заключается главным образом в создании или редактировании тех файлов, которые при установке через /stand/sysinstall создаются автоматически.

Это файл /etc/fstab, в который нужно вписать строки:

# Device Mountpoint FStype Options Dump Pass#

/dev/da0s2a / ufs rw 1 1

Если этот файл изначально отсутствует, создайте его, например командой touch:

# touch /etc/fstab

Это файл /etc/motd, который содержит приветствие, выводимое при регистрации в системе. Впрочем, его можно и не создавать. Образец файла приведен ниже.

# less /etc/motd

FreeBSD 5.4-RELEASE (Sentry) #3: Thu Jul 21 19:50:40 NOVST 2005

This is only LiveFlash maintenatce system. You should know, what you want to do.

Это файл /etc/rc.conf, который содержит все настройки системы. Файл /etc/rc.conf, присутствующий в выложенном образе, приведен здесь с комментариями:

#less /etc/rc.conf

rc_conf_files="/etc/rc.conf"

tmpmfs="YES" # Создаем MFS для монтирования ее в /tmp

tmpsize="20m" # Задаем ее размер 20 Мб

varmfs="YES" # Создаем MFS для монтирования ее в /var

varsize="32m" # Задаем ее размер 32 Мб

# В сетевых интерфейсах только lo0, ни одной сетевой карты

network_interfaces="lo0"

hostname="usbflash" # Это просто наше имя

firewall_enable="YES" # Да! Здесь есть firewall. Только он не запущен.

firewall_type="open"

log_in_vain="YES"

tcp_drop_synfin="YES"

tcp_extensions="YES"

tcp_restrict_rst="YES"

inetd_enable="NO" # Не запускать inetd

sendmail_enable="NONE" # Не запускать sendmail вообще

portmap_enable="NO" # Не запускать portmap

font8x8="koi8-r-8x8"

font8x14="koi8-r-8x14"

font8x16="koi8-rb-8x16"

keyrate="fast"

keymap="ru.koi8-r"

ldconfig_paths="/usr/lib/compat /usr/local/lib"

Перед первой загрузкой обязательно нужно очистить каталоги /mnt/umass/ufs/tmp и /mnt/umass/ufs/var, потому что создание MFS для /tmp и /var при загрузке c Flash выполняется только в том случае, если они пустые. В каталоге /mnt/umass/ufs/var обычно имеется каталог empty с атрибутами schg (System Immutable), который можно увидеть по команде:

# cd /var

# ls -lo | grep empty

dr-xr-xr-x 2 root wheel schg 512 Nov 5 2004 empty

Для его удаления сначала нужно снять с него атрибут schg:

# cd /var

# chflags noschg empty

Последнее, что нужно сделать, - установить дополнительное программное обеспечение, не входящее в базовую поставку, но желательное, потому что здорово облегчает жизнь (эта фраза, несомненно, вызовет бурю возмущения со стороны "настоящих" юниксоидов, которые считают, что пользоваться каким-либо редактором, кроме vi - есть признак ламера). Список софта, который был установлен, приведен выше. К сожалению, я не нашел возможности устанавливать софт прямо из портов с указанием целевого каталога и каталога для хранения базы установленных программ, поэтому необходимый софт был запакован в пакеты командой (например):

# cd /var/db/pkg

# pkg_create -b mc-4.6.0_11

после чего файл mc-4.6.0_11.tgz (и другие нужные нам пакеты, список приведен в начале статьи) был перенесен на Flash в каталог /usr/tmp для его последующей установки в системе, загруженной непосредственно с Flash. Таким образом, в /usr/tmp были записаны все необходимые пакеты, которые потом, после установки будут удалены. Для того чтобы отслеживать изменение состояния софта, который не входит в базовую поставку, каталоги pkg и ports, которые обычно размещаются в /var/db, вынесем в /usr/share/db. Чтобы система знала, где ей искать эти каталоги, в файле /root/.cshrc установим следующие переменные окружения:

setenv PKG_DBDIR /usr/share/db/pkg

setenv PORTS_DBDIR /usr/share/db/ports

На этом наша работа непосредственно по созданию Flash закончена и начинается деятельность по ее первоначальной настройке, которую необходимо провести непосредственно в системе, загруженной с Flash. Заодно при этом проверим, что ничего не поломали в процессе установки. (На самом деле здесь нет ничего смешного - в процессе создания Flash мне пришлось один раз откатываться на самое начало из-за того, что по непонятным причинам перестал грузиться DOS.)

Первоначальная настройка

Итак, заходим в BIOS, настраиваем наш компьютер на загрузку с USB, перегружаемся и видим наконец-то загрузочное меню xFDisk. Выбираем раздел FreeBSD. Загрузка с Flash идет значительно медленнее, чем с жесткого диска, но, конечно, значительно быстрее, чем с дискет.

После загрузки системы первым делом устанавливаем дополнительные программы, пакеты которых мы заботливо сложили в /usr/tmp. Делаем это, как обычно, командой pkg_add:

# pkg_add mc-4.6.0_11.tgz

Если устанавливаемый пакет зависит от другого пакета, и этот пакет присутствует в каталоге, из которого запущен pkg_add, то он будет молча установлен. Если же pkg_add не находит пакета, от которого зависит устанавливаемый, то установка будет прервана:

# pkg_add mc-4.6.0_11.tgz

pkg_add: could not find package pkgconfig-0.17.0 !

После установки всех необходимых пакетов обязательно нужно выполнить две важные вещи, которые не забывает /stand/sysinstall, а именно - задать пароль пользователя root и настроить часовой пояс. Отсутствие в системе настроенного часового пояса не влияет на даты создания или изменения файла, поскольку они хранятся в "Unix time" (число секунд с 1 января 1970 г.), но влияет на значение даты, выводимой по команде date, подставляемой во все текстовые журналы, и отображаемой всеми командами.

Изменить пароль пользователя root просто:

# passwd root

Changing local password for root

New Password:

Retype New Password:

Для настройки часового пояса воспользуемся /stand/sysinstall. Выбираем в главном меню "Do post-install configuration of FreeBSD", затем "Set which time zone you're in". На вопрос "Is this machine clock set to UTC" отвечаем по умолчанию (а по умолчанию стоит "No", и это нам подходит). Затем выбираем регион (Asia), страну (Russian Federation) и подходящий часовой пояс. В меню "Russian Federation Time Zones" часовые пояса указаны относительно Москвы. Допустим, мы выбрали зону "Moscow+03 - Novosibirsk". На последний вопрос "Does the abbreviation 'NOVST' look reasonable?" отвечаем утвердительно и выходим из программы /stand/sysinstall.

После установки часового пояса нужно немного почистить Flash. В стандартной поставке присутствует достаточное количество файлов и каталогов, которые никогда и никому не понадобятся. Это каталоги, содержащие информацию о том, какие денежные единицы в Бурунди, и сообщения для некоторых программ на иврите и франко-канадском, а также некоторая документация по системе. И пусть они не так уж и много места занимают - на Flash вообще места немного. Хотя, например, объем каталога /usr/local/share/locale может достигать десятков мегабайт.

Итак:

n Каталоги /usr/share/locale и /usr/local/share/locale - удаляем все, что не ru_RU, en_GB, en_US, la_LN. Оставляем также UTF-8 и bg_BG.CP1251. Последний используется в ru_RU.CP1251.

n Каталоги /usr/share/nls и /usr/local/share/nls - точно так же удаляем все, что не ru_RU, en_GB, en_US, la_LN. Оставляем также C, POSIX и bg_BG.CP1251. Последний по причине, изложенной выше.

n Каталог /usr/share/doc - удаляем полностью. Вряд ли нам понадобится та документация, что там хранится.

n Каталог /usr/share/info - удаляем полностью. Точно так же (хотя, конечно, эти каталоги можно и не удалять).

Всё! Выполняем последнюю проверку на то, что в процессе установки FreeBSD ничего не было поломано (а такое однажды случилось) путем загрузки поочередно FreeBSD и DOS.

Возможные ошибки

Процесс создания Flash очень критичен к ошибкам. Малейшая неточность - и все приходится начинать сначала. Поэтому, приступая к созданию собственного образа, сначала обдумайте, а стоит ли это делать, может, проще развернуть готовый и модифицировать его?

Помните, что:

n Далеко не все Flash распознаются программами типа Acronis Disk Director/Partition Magic как жесткие диски. Это значит, что из-под DOS/Windows создать раздел нужного размера будет невозможно. Если при установке Flash в компьютер с Windows Acronis Disk Director/Partition Magic его не видит, значит, Flash распознан как сменный носитель и создать на нем раздел можно только записью образа seitek2000.dsk так, как описано в начале раздела "Создание". Некоторые Flash-диски, например Transcend JetFlash, имеют в своем составе специальные утилиты, позволяющие переключаться между режимами "жесткий диск" и "сменный носитель".

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

# dd if=/dev/da0 of=backup.dsk count=63

n После установки менеджера загрузок обязательно проверьте, что и DOS, и FreeBSD загружаются. Появление меню менеджера загрузок - еще не показатель его работы.

n Не загружайте драйвера USB for DOS, если на компьютере USB клавиатура или мышь, в момент инициализации драйвера клавиатура (мышь) обязательно зависнет.

n Если стандартный FDISK для DOS говорит, что на разделе DOS UNKNOWN filesystem - значит, раздел DOS создан неправильно.

n Если при создании файловой системы в пустом слайсе FreeBSD она помещается на /dev/da0s2d, а не на /dev/da0s2a, выйдите из sysinstall и создайте файловую систему вручную, как было описано выше.

n Если при копировании какого-либо базового пакета появляется окно "Choose installation media" - не паникуйте. Это просто оборвалась связь с сервером, с которого берется дистрибутив. Укажите, где расположен дистрибутив заново. Запись на Flash идет долго, поэтому перед тем, как устанавливать систему на Flash, лучше скопируйте дистрибутив на локальный диск.

n При генерации пароля пользователя root, при создании дополнительных пользователей и при настройке часового пояса sysinstall всегда изменяет файлы в /etc, а не в "Install Root".

n Указывать Install Root следует после того, как были созданы файловые системы. Во время создания файловых систем они монтируются в те точки, которые задаются на экране FreeBSD Disklabel editor, так что если вы зададите Install Root в самом начале, то созданные файловые системы будут смонтированы, например, в /mnt/tmp/mnt/tmp вместо /mnt/tmp.

n Обязательно дождитесь завершения работы sysinstall, когда она устанавливает базовые пакеты. Даже если на экране ничего не обновляется, процесс работы можно отслеживать по индикатору Flash - как правило, он мигает, когда идет процесс чтения/записи данных.

Заключение

Раньше непременным атрибутом каждого системного администратора была загружаемая дискета (или несколько дискет), с которой выполнялась и установка систем, и их проверка. Но дисковод гибких дисков - ненадежная вещь, да и емкость дискеты невелика.

Загружаемая Flash, описанная здесь, может пригодиться любому системному администратору - и тому, у которого под столом стоит единственный сервер, и тому, у которого в серверной ряды стоек, забитых 19" корпусами, потому что позволяет отказаться от такой ненадежной вещи, как дисковод гибких дисков и не устанавливать в корпус привод CD-ROM.

Пусть работать с ним не так просто, как хотелось бы, зато возможности его практически равны возможности нормальной FreeBSD. Установил Flash в корпус, поставил достаточное количество ОЗУ и перенаправление журнальной информации - и вот, пожалуйста, готовый маршрутизатор. Запустил Disk Editor c раздела DOS - и можно попытаться восстановить удаленный файл. Запустил MHDD - и можно попытаться протестировать и восстановить диск на самом нижнем уровне.

Я благодарю Александра Дёмина, сетевого администратора из московской группы компаний "Спектрум", за предоставленный хостинг файла образа Flash.

Литература и ссылки:

1. http://frenzy.org.ua/ - домашняя страница проекта Frenzy.

2. http://www.mecronome.de/xfdisk - домашняя страница менеджера загрузок xFDisk.

3. http://www.symon.ru/ - домашняя страница менеджера загрузок SyMon.

4. http://www.ranish.com/part - домашняя страница программы Ranish Partition Manager.

5. http://www2.arnes.si/~fkomar/xosl.org - домашняя страница менеджера загрузок XOSL.

6. http://www.penguin.cz/~mhi/mbtmgr - домашняя страница менеджера загрузок MATTSoft Bootmanager.

7. http://www.zbmsoft.com/ - домашняя страница менеджера загрузок zBoot.

8. http://www.granch.ru/~shelton/fileZ/flashboot/seitek2000.rar - начальный образ Flash-диска. Один раздел DOS 23 Мб, без менеджера загрузок. Контрольная сумма MD5 файла равна: MD5 (seitek2000.rar) = fff2b36eda90f2ff9558e588c7afbc55. Длина файла в упакованном виде 514006 байт, в распакованном 1024000 байт (2000 секторов по 512 байт).

9. http://www.granch.ru/~shelton/fileZ/flashboot/seitek2000.fdisk - отчет fdisk, созданный по образу seitek2000.dsk при монтировании этого образа RAM-диском.

10. http://www.granch.ru/~shelton/fileZ/flashboot/booteasy.rar - образ области загрузчика (первые 63 сектора). Два раздела (DOS и FreeBSD). Контрольная сумма MD5 файла равна: MD5 (booteasy.rar) = 67f70ae4fbda870d7eb64fdc07f649ac. Длина файла в упакованном виде 7330 байт, в распакованном виде 32256 байт (63 сектора по 512 байт).

11. http://www.granch.ru/~shelton/fileZ/flashboot/booteasy.fdisk - отчет fdisk, созданный по образу booteasy.dsk при монтировании этого образа RAM-диском.

12. http://www.granch.ru/~shelton/fileZ/flashboot/xfdiskboot.rar - образ области загрузчика (первые 63 сектора). Два раздела (DOS и FreeBSD). Контрольная сумма MD5 файла равна: MD5 (xfdiskboot.rar) = 0a1b605ebe9994fb8eaad4b134dd02aa. Длина файла 19852 байта в упакованном виде, 32256 в распакованном виде (63 сектора по 512 байт).

13. http://www.granch.ru/~shelton/fileZ/flashboot/xfdiskboot.fdisk - отчет fdisk, созданный по образу xfdiskboot.dsk при монтировании этого образа RAM-диском.

14. http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-building.html - Глава 8, пункт 3 "Руководства пользователя FreeBSD", посвященная пересборке ядра.

15. http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/install-diff-media.html - Глава 2, пункт 2.13.4 "Руководства пользователя FreeBSD", посвященная подготовке собственных источников установки, в том числе и c раздела DOS.

Обновлено: 12.03.2015