Руководство FreeBSD
Пред. | Глава 12. Процесс загрузки FreeBSD | След.

# 12.3. MBR и первый, второй и третий этапы загрузки

## 12.3.1. MBR, `/boot/boot0`

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

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

Пример 12-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 и так далее.

Однако если вы используете Linux и предпочитаете, чтобы процесс загрузки управлялся через LILO, вы можете отредактировать файл `/etc/lilo.conf` для FreeBSD или выбрать Leave The Master Boot Record Untouched в процессе установки FreeBSD. Если вы установили менеджер загрузки FreeBSD, то вы можете снова загрузить Linux и изменить конфигурационный файл `/etc/lilo.conf` для LILO, добавив следующий параметр:

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

который позволит загружать FreeBSD и Linux посредством LILO. В нашем примере мы используем XY для обозначения номера диска и раздела. Если вы используете диск SCSI, то вам может потребоваться заменить /dev/hdXY на что-то типа /dev/sdXY, где снова используется обозначение XY. Строка loader=/boot/chain.b может быть опущена, если обе операционные системы располагаются на одном и том же диске. Вы можете теперь запустить `/sbin/lilo -v` для того, чтобы ваши изменения были восприняты системой, что должно быть подтверждено сообщениями на экране.

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

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

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

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

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

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

Пример 12-2. Образец экрана `boot2`

    >> FreeBSD/i386 BOOT
    Default: 0:ad(0,a)/kernel
    boot:

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

    # disklabel -B diskslice

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

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

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

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

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

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

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

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

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

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

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

autoboot секунды

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

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

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

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

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

### 12.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

Пред. | Начало | След.
Проблема загрузки | Уровень выше | Взаимодействие с ядром во время загрузки

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

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