13.3. Менеджер загрузки и этапы загрузки
Пред. | Глава 13. Процесс загрузки FreeBSD | След.

## 13.3. Менеджер загрузки и этапы загрузки

### 13.3.1. Менеджер загрузки

Код MBR или менеджера загрузки время от времени называют нулевой стадией процесса загрузки. В этом разделе мы обсудим два из упомянутых ранее менеджеров загрузки: boot0 и LILO.

MBR для FreeBSD находится в `/boot/boot0`. Это копия MBR, так как настоящая MBR должна располагаться в специальном месте диска, вне области FreeBSD.

`boot0` очень прост, так как программа в MBR может иметь размер, не превышающий 512 байт. Если вы установили MBR FreeBSD и несколько операционных систем на ваш жесткий диск, то во время загрузки вы увидите нечто похожее на следующее:

Менеджер загрузки boot0: MBR, устанавливаемый программой установки FreeBSD или утилитой boot0cfg(8), основан на `/boot/boot0`. (`boot0` очень прост, так как программа в MBR может иметь размер, не превышающий 446 байт, так как часть первого сектора диска занята таблицей слайсов и сигнатурой `0x55AA`). Если вы установили boot0 и несколько операционных систем на ваш жесткий диск, то во время загрузки вы увидите нечто похожее на следующее:

Пример 13.1. Образец экрана `boot0`
F1 DOS F2 FreeBSD F3 Linux F4 ?? F5 Drive 1 Default: F2

Известно, что другие операционные системы, в частности, Windows® 95, записывают поверх существующей MBR свою собственную. Если так случилось в вашем случае, или же вы хотите заменить существующую MBR на MBR от FreeBSD, то воспользуйтесь следующей командой:

`#` `fdisk -B -b /boot/boot0 `device``

Здесь `device` является устройством, с которого вы загружаетесь, таким, как `ad0` в случае первого диска IDE, `ad2` в случае первого диска IDE на втором контроллере IDE, `da0` для первого диска SCSI и так далее. Если вы используете MBR нестандартного вида, воспользуйтесь boot0cfg(8).

Менеджер загрузки LILO: Для того, чтобы этот менеджер загрузки мог загружать FreeBSD, загрузите Linux и добавьте к существующему файлу конфигурации `/etc/lilo.conf` такие строки:

other=/dev/hdXY table=/dev/hdb loader=/boot/chain.b label=FreeBSD

Укажите диск с основным разделом FreeBSD в терминах Linux, заменив `X` буквой диска, используемой в Linux, а `Y` — номером основного раздела. Если вы используете диски SCSI, замените `/dev/hd` на `/dev/sd`. Строка `loader=/boot/chain.b` может быть опущена, если обе операционные системы находятся на одном диске. Теперь запустите `/sbin/lilo -v` для того, чтобы ваши изменения были восприняты системой, что должно быть подтверждено сообщениями на экране.

### 13.3.2. Этап первый, `/boot/boot1`, и этап второй, `/boot/boot2`

Концептуально первый и второй этапы загрузки являются частями одной и той же программы, в одной области диска. Из-за ограничений на объем дискового пространства они были разделены на две, но вы всегда должны устанавливать их вместе. Они копируются инсталлятором или утилитой bsdlabel (см. ниже) из общего файла `/boot/boot`.

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

`boot1` очень прост, так как он не может иметь размер, превышающий 512 байт, и знает лишь о метке диска FreeBSD, хранящей информацию о слайсе, для того, чтобы найти и запустить `boot2`.

`boot2` устроен несколько более сложно, и умеет работать с файловой системой FreeBSD в объёме, достаточном для нахождения в ней файлов, и может предоставлять простой интерфейс для выбора и передачи управления ядру или загрузчику.

Так как загрузчик устроен гораздо более сложно, и дает удобный и простой способ настройки процесса загрузки, `boot2` обычно запускает его, однако раньше его задачей был запуск непосредственно самого ядра.

Пример 13.2. Образец экрана `boot2`
>> FreeBSD/i386 BOOT Default: 0:ad(0,a)/boot/loader boot:

Если вам когда-либо понадобится заменить установленные `boot1` и `boot2`, то используйте утилиту bsdlabel(8):

`#` `bsdlabel -B `diskslice``

Здесь `diskslice` являются диском и слайсом, с которых вы загружаетесь, например, `ad0s1` в случае первого слайса на первом диске IDE.

### Режим Dangerously Dedicated:

Если вы используете только имя диска, к примеру, `ad0`, в команде bsdlabel(8) вы создадите диск в режиме эксклюзивного использования, без слайсов. Это, скорее всего, вовсе не то, что вы хотите сделать, так что дважды проверьте параметры команды bsdlabel(8), прежде, чем нажать Return.

### 13.3.3. Третий этап, `/boot/loader`

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

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

#### 13.3.3.1. Процесс работы загрузчика

Во время инициализации загрузчик пытается произвести поиск консоли, дисков и определить, с какого диска он был запущен. Соответствующим образом он задаёт значения переменных и запускает интерпретатор, которому могут передаваться пользовательские команды как из скрипта, так и в интерактивном режиме.

Затем загрузчик читает файл `/boot/loader.rc`, который по умолчанию использует файл `/boot/defaults/loader.conf`, устанавливающий подходящие значения по умолчанию для переменных и читает файл `/boot/loader.conf` для изменения в этих переменных. Затем с этими переменными работает `loader.rc`, загружающий выбранные модули и ядро.

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

#### 13.3.3.2. Встроенные команды загрузчика

Далее следуют наиболее часто используемые команды загрузчика. Полное описание всех имеющихся команд можно найти на странице справки о команде loader(8).

autoboot `секунды`

  Продолжает загрузку ядра, если не будет прерван в течение указанного в секундах промежутка времени. Он выводит счетчик, и по умолчанию выдерживается интервал в 10 секунд.

boot [`-параметры`] [`имя ядра`]

  Продолжить процесс загрузки указанного ядра, если оно было указано, и с указанными параметрами, если они были указаны. Загрузка и использование указанного ядра возможны лишь после выгрузки текущего ядра, а выгрузка текущего ядра производится командой unload.

boot-conf

  Повторно провести тот же самый процесс автоматической настройки модулей на основе переменных, что был произведен при загрузке. Это имеет смысл, если до этого вы выполнили команду `unload`, изменили некоторые переменные, например, наиболее часто меняемую `kernel`.

help [`тема`]

  Вывод сообщений подсказки из файла `/boot/loader.help`. Если в качестве темы указано слово `index`, то выводится список имеющихся тем.

include `имя файла` …

  Выполнить файл с указанным именем. Файл считывается и его содержимое интерпретируется строчка за строчкой. Ошибка приводит к немедленному прекращению выполнения команды include.

load [`-t` `тип`] `имя файла`

  Загружает ядро, модуль ядра или файл указанного типа с указанным именем. Все аргументы после имени файла передаются в файл.

ls [`-l`] [`маршрут`]

  Выводит список файлов по указанному маршруту или в корневом каталоге, если маршрут не был указан. Если указан параметр `-l`, будут выводиться и размеры файлов.

lsdev [`-v`]

  Выводится список всех устройств, с которых могут быть загружены модули. Если указан параметр `-v`, выводится дополнительная информация.

lsmod [`-v`]

  Выводит список загруженных модулей. Если указан параметр `-v`, то выводится дополнительная информация.

more `имя файла`

  Вывод указанного файла с паузой при выводе каждой строки `LINES`.

reboot

  Выполнить немедленную перезагрузку машины.

set `переменная`, set `переменная`=`значение`

  Задает значения переменных окружения загрузчика.

unload

  Удаление из памяти всех загруженных модулей.

#### 13.3.3.3. Примеры использования загрузчика

Вот несколько примеров практического использования загрузчика:

- Чтобы просто загрузить ваше ядро обычным образом, но в однопользовательском режиме:

  `boot -s`

- Для выгрузки обычных ядра и модулей, а потом просто загрузить ваше старое (или другое) ядро:

  `unload` `load `kernel.old``

  Вы можете использовать `kernel.GENERIC` для обозначения стандартного ядра, поставляемого на установочном диске, или `kernel.old` для обращения к ранее установленному ядру (после того, как, например, вы обновили или отконфигурировали новое ядро).

  ### Примечание:

  Для загрузки ваших обычных модулей с другим ядром используйте такие команды:

  `unload` `set kernel="`kernel.old`"` `boot-conf`

- Для загрузки скрипта конфигурации ядра (автоматизированный скрипт, который выполняет то, что вы обычно делаете в конфигураторе ядра во время загрузки):

  `load -t userconfig_script `/boot/kernel.conf``

#### 13.3.3.4. Загрузочные экранные заставки

Предоставил Joseph J. Barbish.

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

Есть два базовых окружения во FreeBSD. Первое — это окружение командной строки текстовой виртуальной консоли. По завершении загрузки системы вам предоставляется консольное приглашение ввода логина. Второе окружение — это графическое окружение рабочего стола X11. После установки X11 и одной из графических оболочек, таких как GNOME, KDE или XFce, становится возможным запуск рабочего стола Х11 командой `startx`.

Некоторые пользователи предпочитают графический интерфейс входа традиционному текстовому приглашению ввода логина. Менеджеры экранов, наподобие XDM для Xorg, gdm для GNOME, kdm для KDE (а также другие, доступные из коллекции портов), изначально предоставляют графический интерфейс входа. После успешного входа в систему они запускают соответствующий оконный менеджер.

В текстовом окружении экранная заставка скрывает все подробности процесса загрузки и сообщения стартовых скриптов до момента выдачи приглашения ввода логина. Если используется экранная заставка перед входом в графическое окружение, то пользователи получают визуально более чистый старт системы, чем-то напоминающий опыт работы с Microsoft® Windows® или с иной не unix-подобной системой.

##### 13.3.3.4.1. Экранная заставка в действии

В качестве заставки можно использовать лишь содержащие 256 цветов изображения формата BMP (`.bmp`) или изображения формата PCX (`.pcx`) от ZSoft. К тому же, для вывода на стандартный VGA адаптер, файл изображения заставки должен иметь разрешение не более 320 на 200 пикселей.

Чтобы можно было использовать изображения большего размера, вплоть до максимального 1024 на 768, активируйте поддержку VESA. Активация может быть осуществлена либо подключением модуля VESA во время загрузки системы, либо сборкой специализированного ядра с добавленной опцией `VESA` (смотрите Глава 9, Настройка ядра FreeBSD). Поддержка режима VESA дает пользователям возможность отображать заставку, перекрывающую всю видимую область экрана.

Отображаемая во время загрузки заставка может быть убрана нажатием любой клавиши на клавиатуре.

С настройками по умолчанию заставка также становится хранителем экрана в консольном окружении. После некоторого бездействия экран сменится заставкой, яркость которой будет периодически изменяться от её максимального значения к минимальному и обратно. Подобное поведение заставки может быть переопределено добавлением строки `saver=` в `/etc/rc.conf`. В качестве значения опции `saver=` можно выбрать одно из встроенных имен хранителей экранов, а с полным перечнем можно ознакомиться на странице справочника splash(4). Хранитель экрана, используемый по умолчанию, называется «warp». Заметьте, что установка опции `saver=` в `/etc/rc.conf` воздействует исключительно на текстовые виртуальные консоли. Она не влияет на менеджеры экранов X11.

Несколько сообщений загрузчика, включая меню загрузки и счетчик, отображаются во время загрузки, даже если экран-заставка активирован.

Файлы-примеры с изображениями для заставок могут быть скачаны из галереи по адресу http://artwork.freebsdgr.org. Установив порт `sysutils/bsd-splash-changer`, между загрузками вы получите автоматическую смену случайно выбираемых изображений заставок.

##### 13.3.3.4.2. Активация экранной заставки

Файл изображения для заставки (`.bmp` или `.pcx`) следует разместить в корневой файловой системе, например в каталоге `/boot`.

Для работы заставки с разрешением, доступным при загрузке (256 цветов и не более 320х200 точек), отредактируйте `/boot/loader.conf`, добавив в него следующие строки:

splash_bmp_load="YES" bitmap_load="YES" bitmap_name="`/boot/splash.bmp`"

Для получения больших разрешений видео режима (вплоть до максимального 1024x768), внесите в `/boot/loader.conf` следующие записи:

vesa_load="YES" splash_bmp_load="YES" bitmap_load="YES" bitmap_name="`/boot/splash.bmp`"

Вышеприведённый пример подразумевает, что файл ``/boot/splash.bmp`` содержит изображение заставки. Если же требуется выводить файл формата PCX, то используйте следующие строки (в зависимости от необходимого разрешения может также потребоваться строка `vesa_load="YES"`):

splash_pcx_load="YES" bitmap_load="YES" bitmap_name="`/boot/splash.pcx`"

Возможное имя файла не ограничено одним лишь словом «splash». Оно может выбираться произвольно, например: ``splash_640x400`.bmp` или ``blue_wave`.pcx`. Важен лишь тип файла: он должен быть либо BMP, либо PCX.

Далее приведены еще две полезные опции `loader.conf`:

`beastie_disable="YES"`

  Эта опция отключит меню загрузчика, но приглашение с обратным отсчетом останется. Даже при не отображаемом меню во время отсчета возможен выбор номера варианта загрузки.

`loader_logo="beastie"`

  Эта установка заменит слова «FreeBSD», которые отображаются справа от меню загрузчика, цветным логотипом демона, который занимал это место в предыдущих релизах FreeBSD.

За более детальной информацией обратитесь к следующим страницам справочника: splash(4), loader.conf(5) и vga(4).

Пред. | Наверх | След.
13.2. Проблема загрузки | Начало | 13.4. Взаимодействие с ядром во время загрузки

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.