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 тому що накопичувач не відповідає "завантажувальним" критеріям, тож BIOS повинен був просто пропустити накопичувач і перейти до наступного
Сергій

@Sergey Я подивився на це питання і не впевнений. Можливо, що MBR пошкоджений або прапор завантажувача встановлений на недійсне значення (не впевнений, як fdiskбуде працювати з цими випадками, хоча в оригінальній версії зроблено прапор недійсних заголовків MBR). Я радив ОП розмістити необроблений заголовок MBR, але він / вона також може захотіти "ввімкнути / вимкнути завантажувальний прапор" (встановити / скинути прапор вручну).
Прорив

Майте на увазі, що код BIOS не є загальним. Він досить специфічний для кожної материнської плати, тому він знає, які саме диски можуть бути прикріплені до яких портів.
LatinSuD

Ця відповідь не зовсім правильна. FWIU, перевіряючи наявність активного розділу та нічого такого, що робить "завантажувальний" код завантаження MBR MBR, а не BIOS. NeoSmart представляє більш правдоподібний опис: "На сумісних з IBM ПК (в основному все) останні два байти 512-байтового MBR називаються завантажувальним підписом і використовуються BIOS для визначення, чи вибраний завантажувальний диск насправді завантажувальний або ні. " Остання частина просто неправильна. Спадковий BIOS може завантажуватися з GPT (з відповідним кодом завантаження BIOS), оскільки це по суті "вільний" завантаження.
Даніель Б

@DanielB обидва ці речі безпосередньо звертаються у відповідь: "BIOS зазвичай перевіряє MBR - це його підпис в самому кінці сектору 512 байтів, а потім він просто передає керування початковому завантажувачу, розташованому в перших 446 байтах сектора завантаження " та " Більшість сучасних BIOS також шукатимуть таблицю розділів GUID, а також стару, звичайну таблицю у стилі MBR " .
Прорив
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.