MBR: Как BIOS определяет, является ли диск загрузочным или нет?

12

Пытаясь ответить на этот вопрос о askubuntu: Как удалить GRUB, я прочитал статью о MBR в Википедии, а также отличный ответ на несколько связанный вопрос здесь, на Superuser, однако мне все еще не ясно одно:

Что именно заставляет BIOS решать, является ли диск загрузочным или нет? Как последовательность загрузки пропускается с диска № 1 и продолжает попытки загрузки с диска № 2, если в системе установлено более одного диска?

Насколько я понимаю, единственное, что BIOS обычно проверяет на MBR, это его подпись в самом конце 512-байтового сектора, а затем он просто передает управление начальному загрузчику, расположенному в первых 446 байтах загрузочного сектора.

Означает ли это, что первые 446 байтов загрузочного сектора ДОЛЖНЫ содержать какой-либо значимый код загрузчика, даже если диск не является загрузочным?

После того, как BIOS передал управление загрузчику на диске № 1, на котором не было «загрузочных» разделов - как именно вызывается загрузчик на втором диске?

Извините, если это слишком технически :) Короткий вопрос: "Как именно BIOS пропускает диск и продолжает пытаться загрузиться со следующего?"

Сергей
источник

Ответы:

16

Что именно заставляет BIOS решать, является ли диск загрузочным или нет?

BIOS решает, является ли диск загрузочным, основываясь на 16-байтовой записи раздела, присутствующей после области кода MBR (хранится в таблице, начиная с 446- го байта). Первый байт в каждой записи раздела представляет загрузочный статус диска (и устанавливается на « 0x80загрузочный», или, 0x00если нет). Некоторые BIOS могут проверять другие части MBR (например, типы разделов, контрольные суммы), но основным требованием является флаг загрузки.

Как последовательность загрузки пропускается с диска № 1 и продолжает попытки загрузки с диска № 2, если в системе установлено более одного диска?

Это зависит от реализации, и поэтому вам нужно правильно выбрать порядок загрузки. В большинстве случаев BIOS просматривает каждый носитель в установленном вами порядке и определяет, может ли он загружаться с этого устройства (через данные MBR). Если это возможно, он делает - если нет, он продолжает цикл через другие устройства (опять же, в порядке, который вы выбрали).

После того, как BIOS передал управление загрузчику на диске № 1, на котором не было «загрузочных» разделов - как именно вызывается загрузчик на втором диске?

Как только будет найдено допустимое загрузочное устройство (т. Е. Установлен флаг загрузки и пройдены другие дополнительные проверки), BIOS копирует сектор MBR в ОЗУ. Затем BIOS перемещает указатель инструкций в начало этого местоположения (используя JUMPинструкцию), где находится сегмент кода MBR, и затем запускается компьютер.

Если BIOS поддерживает спецификацию загрузки BIOS , код MBR может вернуть управление BIOS с определенной инструкцией, сигнализируя об ошибке загрузки и предлагая попробовать следующее устройство. Старые BIOS просто выводят сообщение об ошибке. Хорошо, если ваш BIOS поддерживает, можете ли вы загрузиться с USB.

Насколько я понимаю, единственное, что BIOS обычно проверяет на MBR, это его подпись в самом конце 512-байтового сектора, а затем он просто передает управление начальному загрузчику, расположенному в первых 446 байтах загрузочного сектора.

Это правильно, хотя следует отметить, что большинство современных BIOS также будут искать таблицу разделов GUID, а также более старую, обычную таблицу в стиле MBR.

Означает ли это, что первые 446 байтов загрузочного сектора ДОЛЖНЫ содержать какой-либо значимый код загрузчика, даже если диск не является загрузочным?

Нет , но диск должен иметь действительную таблицу разделов MBR или GUID - в противном случае он не будет обнаружен компьютером. Хотя часть кода MBR действительно может быть пустой, первый сектор диска должен иметь правильно сформированный MBR / GPT.

Прорвать
источник
Спасибо за очень подробный ответ. Таким образом, критерием для допустимого загрузочного устройства является наличие загрузочного раздела в таблице разделов и некоторые «другие дополнительные проверки»? Я просто немного сбит с толку, потому что в оригинальном вопросе о AskUbuntu автор показывает, что все разделы на диске не являются загрузочными, и все же он видит ошибку, вызванную поломкой GRUB - которая вообще не должна была вызываться BIOS потому что диск не соответствует «загрузочным» критериям, поэтому BIOS должен был просто пропустить диск и перейти к следующему
Сергей
@ Сергей, я посмотрел на этот вопрос и не уверен. Возможно, что MBR поврежден, или загрузочный флаг установлен на недопустимое значение (не уверен, как fdiskбудут обрабатываться эти случаи, хотя в оригинальной версии действительно были помечены неверные заголовки MBR). Я посоветовал оператору опубликовать необработанный заголовок MBR, но он / она может также захотеть «включить» / выключить загрузочный флаг (чтобы установить / сбросить флаг вручную).
Прорыв
Имейте в виду, что код BIOS не является общим. Он довольно специфичен для каждой материнской платы, поэтому он знает, какие диски там могут быть подключены к каким портам.
LatinSuD
Этот ответ не совсем правильный. FWIU, проверка на наличие активного раздела и прочего - это то, что делает загрузочный код MBR «по умолчанию», а не BIOS. NeoSmart представляет более правдоподобное описание: «На IBM-совместимых ПК (в основном, во всем) последние два байта 512-байтовой MBR называются загрузочной подписью и используются BIOS для определения, является ли выбранный загрузочный диск действительно загрузочным или не." Последняя часть просто неверна. Устаревший BIOS может загружаться из GPT (с соответствующим загрузочным кодом BIOS), потому что это, по сути, загрузка в «свободном стиле».
Даниэль Б
@DanielB Обе эти вещи прямо рассмотрены в ответе: «BIOS обычно проверяет MBR - это его подпись в самом конце 512-байтового сектора, а затем он просто передает управление начальному загрузчику, расположенному в первых 446 байтах. загрузочного сектора » и « большинство современных BIOS также будут искать таблицу разделов GUID, а также более старую, традиционную таблицу в стиле MBR » .
Прорыв