MBR для FreeBSD находится в /boot/boot0. Это копия MBR, так как настоящая MBR должна располагаться в специальном месте диска, вне области FreeBSD.
boot0 очень прост, так как программа в MBR может иметь размер, не превышающий 512 байт. Если вы установили MBR FreeBSD и несколько операционных систем на ваш жесткий диск, то во время загрузки вы увидите нечто похожее на следующее:
Известно, что другие операционные системы, в частности 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 для того, чтобы ваши изменения были восприняты системой, что должно быть подтверждено сообщениями на экране.
Концептуально первый и второй этапы загрузки являются частями одной и той же программы, в той же самой области диск. Из-за ограничений на объем дискового пространства они были разделены на две, но вы всегда должны устанавливать их вместе.
Они располагаются в загрузочном секторе загрузочного слайса, то есть там, где boot0 или любая другая программа из MBR ожидает найти программу, которую следует запустить для продолжение процесса загрузки. Файлы в каталоге /boot являются копиями реальных файлов, которые хранятся вне файловой системы FreeBSD.
boot1 очень прост, так как он тоже может иметь размер, не превышающий 512 байт, и знает достаточно о метке диска FreeBSD, хранящей информацию о слайсе, для того, чтобы найти и запустить boot2.
boot2 устроен несколько более сложно, и умеет работать с файловой системой FreeBSD в объёме, достаточном для нахождения в ней файлов, и может предоставлять простой интерфейс для выбора и передачи управления ядру или загрузчику.
Так как загрузчик устроен гораздо более сложно, и дает удобный и простой способ настройки процесса загрузки, boot2 обычно запускает его, однако раньше его задачей был запуск непосредственно самого ядра.
Если вам когда-либо понадобится заменить установленные boot1 и boot2, то используйте утилиту disklabel(8).
# disklabel -B diskslice
Здесь diskslice являются диском и слайсом, с которых вы загружаетесь, такие, как ad0s1 в случае первого слайса на первом диске IDE.
Режим Dangerously DedicatedЕсли вы используете только имя диска, к примеру, ad0, в команде disklabel(8) вы создадите диск в режиме эксклюзивного использования, без слайсов. Это, скорее всего, вовсе н то, что вы хотите сделать, так что дважды проверьте параметры команды disklabel(8), прежде, чем нажать Return.
Передача управления загрузчику является последним, третьим этапом в процессе начальной загрузки, а сам загрузчик находится в файловой системе, обычно как /boot/loader.
Загрузчик являет собой удобный в использовании инструмент для настройки при помощи простого набора команд, управляемого более мощным интерпретатором с более сложным набором команд.
Во время инициализации загрузчик пытается произвести поиск консоли, дисков и определить, с какого диска он был запущен. Соответствующим образом он задаёт значения переменных и запускает интерпретатор, которому могут передаваться пользовательские команды как из скрипта, так и в интерактивном режиме.
Затем загрузчик читает файл /boot/loader.rc, который по умолчанию использует файл /boot/defaults/loader.conf, устанавливающий подходящие значения по умолчанию для переменных и читает файл /boot/loader.conf для изменения в этих переменных. Затем с этими переменными работает loader.rc, загружающий выбранные модули и ядро.
И наконец, по умолчанию загрузчик выдерживает 10-секундную паузу, ожидая нажатия клавиши, и загружает ядро, если этого не произошло. Если ожидание было прервано, пользователю выдается приглашение, которое воспринимает простой набор команд, в помощью которых пользователь может изменить значения переменных, выгрузить все модули, загрузить модули и окончательно продолжить процесс загрузки или перезагрузить машину.
Далее следуют наиболее часто используемые команды загрузчика. Полное описание всех имеющихся команд можно найти на странице справки о команде loader(8).
Продолжает загрузку ядра, если не будет прерван в течение указанного в секундах промежутка времени. Он выводит счетчик, и по умолчанию выдерживается интервал в 10 секунд.
Продолжить процесс загрузки указанного ядра, если оно было указано, и с указанными параметрами, если они были указаны.
Повторно провести тот же самый процесс автоматической настройки модулей на основе переменных, что был произведен при загрузке. Это имеет смысл, если до этого вы выполнили команду unload, изменили некоторые переменные, например, наиболее часто меняемую kernel.
Вывод сообщений подсказки из файла /boot/loader.help. Если в качестве темы указано слово index, то выводится список имеющихся тем.
Выполнить файл с указанным именем. Файл считывается и его содержимое интерпретируется строчка за строчкой. Ошибка приводит к немедленному прекращению выполнения команды include.
Загружает ядро, модуль ядра или файл указанного типа с указанным именем. Все аргументы после имени файла передаются в файл.
Выводит список файлов по указанному маршруту или в корневом каталоге, если маршрут не был указан. Если указан параметр -l, будут выводиться и размеры файлов.
Выводится список всех устройств, с которых могут быть загружены модули. Если указан параметр -v, выводится дополнительная информация.
Выводит список загруженных модулей. Если указан параметр -v, то выводится дополнительная информация.
Вывод указанного файла с паузой при выводе каждой строки LINES.
Выполнить немедленную перезагрузку машины.
Задает значения переменных окружения загрузчика.
Удаление из памяти всех загруженных модулей.
Вот несколько примеров практического использования загрузчика:
Чтобы просто загрузить ваше ядро обычным образом, но в однопользовательском режиме:
boot -s
Для выгрузки обычных ядра и модулей, а потом просто загрузить ваше старое (или другое) ядро:
unload load kernel.old
Вы можете использовать kernel.GENERIC для обозначения стандартного ядра, поставляемого на установочном диске, или kernel.old для обращения к ранее установленному ядру (после того, как, например, вы обновили или отконфигурировали новое ядро).
Note: Для загрузки ваших обычных модулей с другим ядром используйте такие команды:
unload set kernel="kernel.old" boot-conf
Для загрузки скрипта конфигурации ядра (автоматизированный скрипт, который выполняет то, что вы обычно делаете в конфигураторе ядра во время загрузки):
load -t userconfig_script /boot/kernel.conf