Если вы имеете дело с "классической" 512-байтной загрузочной записью (MBR в стиле DOS) - всё довольно просто.
DOS-like MBR состоит из 3 частей: первые 446 байт несут в себе непосредственно код загрузчика (bootcode), который умеет передавать управление загрузкой компьютера загрузочному сектору, находящемуся в одном из разделов диска; следующие 64 байта описывают "основные" разделы диска (4 по 16 байт); оставшиеся 2 байта - это сигнатура 55h AAh
.
Если код загрузчика был стёрт, как-то повреждён, затёрт нулями или заменён другим загрузчиком, не знающим ничего про FreeBSD, но таблица разделов осталась на месте - загрузиться в установленную на один из разделов FreeBSD можно, просто воспользовавшись загрузчиком любой другой FreeBSD для старта.
- Начните загрузку любой BSD-like операционной системы (я проверял этот метод на FreeBSD 6.0, 7.0, 8.0, 8.1, 8.2, 8.3, 8.4, 9.2 и Frenzy 1.4) с другого носителя - HDD, CD, с USB-флэшки, через сеть по PXE, через virtual media посредством BMC/KVM, etc.
- В процессе загрузки выберите опцию "Escape to loader prompt" на экране загрузчика (она будет под номером "6" в старых дистрибутивах FreeBSD, "3" в FreeBSD 9, "8" в Frenzy)
- Теперь выгружайте ядро "чужой" FreeBSD, в загрузчике которой находитесь, и его модули, с помощью команды
unload
- Найдите дисковое устройство, на котором находится FreeBSD, в которую необходимо загрузиться (обычно это что-то вроде
disk0s1a
) с помощью команды lsdev
- Выберите это устройство "основным" ("current") для загрузчика, дав команду
set currdev="disk0s1a"
- Перечитайте
loder.conf
с вашего диска (там могут быть критичные для правильной загрузки хаки, вроде подключения модулей ядра для работы с сетевыми картами) командой read-conf boot/loader.conf
- И, наконец, загрузите вашу ОС командой
boot-conf
Когда ваша недоступная для самостоятельной загрузки FreeBSD загрузилась, останется только починить её загрузчик. В своём случае я использовал sysinstall
, пункт Custom -> Partition, W, <Yes>
, BootMgr
("Install the FreeBSD Boot Manager"), <OK>
, Q, <Exit>
, <Exit Install>
. Однако эта утилита объявлена устаревшей с момента выхода 9.0-RELEASE и убрана из базовой системы с момента выхода 10.0-RELEASE. Есть и альтернативный способ восстановить загрузчик, воспользовавшись резервной копией, хранящейся в /boot
(за подсказку спасибо @dile):
# gpart bootcode -b /boot/mbr /dev/yourbootdevice