LINUX.ORG.RU
решено ФорумTalks

Загрузка ОС, MBR


1

2

Нашел статью про MBR: Здесь Так вот, функция MBR — «переход» в тот раздел жёсткого диска, с которого следует исполнять «дальнейший код» (непосредственно загрузчик ОС - GRUB или windows-загрузчик ?): 1) Произошла загрузка MBR в память:

 * BIOS проводит начальную инициализацию оборудования («железа»)
   
 * BIOS определяет, с какого устройства производить дальнейшую загрузку: дискета, флеш-накопитель, жёсткий диск и т. д. (выбор устройства зависит от версии и от настроек BIOS)

 * BIOS считывает один сектор (512 байт), который находится по адресу: «цилиндр 0, головка 0, сектор 1», и помещает его в область памяти по адресу 0000:7c00
   
 * BIOS проверяет, что этот сектор оканчивается сигнатурой 55ААh

 * BIOS передаёт управление по адресу 0000:7c00 (то есть сектору MBR)

Выбор загрузочного раздела и проверка целостности MBR:

* MBR копирует себя с адреса 0000:7c00 на адрес 0000:0600 (освобождая место для будущей загрузки уже собственно загрузчика ОС)

* MBR просматривает по очереди все записи о разделах и ищет первую запись об «активном» (== «загрузочном») разделе (то есть ищет раздел, отмеченный как 80h)

* В случае успеха (раздел, помеченный как 80h — найден) MBR запоминает номер этого раздела

    [если просмотрены все 4 записи и не найден раздел, помеченный как 80h, то вызывается INT 18h. Это возвращает управление обратно в BIOS, что может приводить либо к загрузке BASIC, либо к повторной попытке загрузить систему с диска, либо к перезагрузке компьютера — в зависимости от версии и реализации BIOS]


* MBR просматривает все оставшиеся записи и проверяет, что это единственный активный раздел (что больше разделов, помеченных 80h, на данном физическом диске не существует)

    [если находятся другие разделы, помеченные 80h, то MBR выводит сообщение об ошибке (обычно это что-то типа «Invalid partition table»), после чего система зависает в бесконечном цикле, из которого можно выйти только перезагрузкой компьютера]


* MBR проверяет, что в данном поле для всех 4-х разделов нет иных значений, кроме «00h» и «80h»

    [если находятся разделы, помеченные значением, отличным от 00h или 80h, то MBR выводит сообщение об ошибке («Invalid partition table»), система зависает, требуется перезагрузка компьютера]

На этом заканчивается проверка MBR и начинается подготовка к загрузке ОС:


* MBR считывает первый сектор логического диска, помеченного как «загрузочный» и помещает этот сектор по адресу 0000:7c00

Собственно вопросы:

  • Если у меня несколько ОС на разных разделах, следовательно несколько загрузочных разделов, помеченных как 80h? (или пометка 80h относится к загрузочному разделу с системой «загрузка по умолчанию»?).
  • С момента «MBR считывает первый сектор логического диска, помеченного как «загрузочный» и помещает этот сектор по адресу 0000:7c00» и «MBR передает управление по адресу 0000:7c00 (то есть загрузочному сектору выбранного логического раздела диска)» в память грузится Grub или загрузчик windows ? Но вначале при включении компьютера первое, что в вижу на жкране монитора - Grub.

Так как все происходит ? Заранее благодарен за ответы!

BIOS занимается поиском устройства, который помечен парой байтов как загрузочный. После нахождения такового, он загружает первый сектор в память и передаёт управление на него. Дальнейший ход загрузки зависит от поведения загрузчика. В случае windows происходит примерно так, как описано в статье (MBS->чтение таблицы разделов в поисках активного раздела->запуск загрузчика из раздела). В случае GRUBа - он читает свои части в том месте, где установлен и выполняет их.

sched
()
Ответ на: комментарий от sched

BIOS занимается поиском устройства, который помечен парой байтов как загрузочный.

BIOS же вроде ничего не ищет, а промто читает сектор в память с того устройства, которое первое стоит в его настройках очередности.

dikiy ★★☆☆☆
()
Ответ на: комментарий от sched

Что вы имеете в виду под «читает свои части в том месте, где установлен» ? Вообще, стало интересно разобраться с MBR, потому что сейчас стоят на разных разделах win xp, 7 и дебиан ну и подумал снести уже xp. Но дело в том, что снеся эту ос, как бы не перестал грузиться загрузчик окон и как пункт «windows loader» пропадет из Grub.

thunriv
() автор топика
Ответ на: комментарий от sched

Если первое устройство не загрузочное, то он переходит к следующему. Это и есть поиск.

только это к 80h не имеет никакого отношения. гугл вещает, что загрузочный сектор (будь-то MBR или кусок груба) должен начинаться с AA55h.

dikiy ★★☆☆☆
()
Ответ на: комментарий от thunriv

Что вы имеете в виду под «читает свои части в том месте, где установлен»

ну читает с жесткого диска то, что не влезло в 512 байт.

dikiy ★★☆☆☆
()
Ответ на: комментарий от thunriv

Но дело в том, что снеся эту ос, как бы не перестал грузиться загрузчик окон и как пункт «windows loader» пропадет из Grub.

не пропадет. grub может загрузить семерку самостоятельно.

dikiy ★★☆☆☆
()
Ответ на: комментарий от thunriv

Вообще, стало интересно разобраться с MBR, потому что сейчас стоят на разных разделах win xp, 7 и дебиан ну и подумал снести уже xp. Но дело в том, что снеся эту ос, как бы не перестал грузиться загрузчик окон и как пункт «windows loader» пропадет из Grub.

Если загрузчик Grub, то можешь Винду сносить смело. Потом из /boot/grub/menu.lst просто удалишь соотв. пункт (это для grub1).
А вот люди сносят Линукс и получают небутабельный комп. А все потому, что они по факту снесли Grub фазу 2, которая находилась на одном разделов Линукс.

Kroz ★★★★★
()
Ответ на: комментарий от dikiy

А причём тут 80h? BIOS при загрузке имеет список по приоритету устройств, среди которых он ищет загрузочное. Если первое устройство без сигнатуры 55AAh, он обращается ко второму и т.д, т.е. ищет загрузочное устройство.

sched
()
Ответ на: комментарий от sched

А причём тут 80h? BIOS при загрузке имеет список по приоритету устройств, среди которых он ищет загрузочное. Если первое устройство без сигнатуры 55AAh, он обращается ко второму и т.д, т.е. ищет загрузочное устройство.

тем, что MBR сам по себе потом отдельно ищет загрузочные разделы с меткой 80h. ТС может запутаться. Поэтому я и указал на это различие.

dikiy ★★☆☆☆
()
Ответ на: комментарий от Kroz

А вот люди сносят Линукс и получают небутабельный комп. А все потому, что они по факту снесли Grub фазу 2, которая находилась на одном разделов Линукс.

и вот это одна из причин, почему я до сих пор пользуюсь LILO - он не убиваемый. LILO сможет загрузить ядро даже если ты ФС форматнул, так как номера физических секторов-то он уже запомнил :)

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 1)
Ответ на: комментарий от sched

BIOS при загрузке имеет список по приоритету устройств, среди которых он ищет загрузочное

BIOS нашла устройство с сигнатурой, загрузило MBR, отдало ему управление, а в таблице разделов не указано ни одного бутабельного. Что произойдет?

Kroz ★★★★★
()
Ответ на: комментарий от dikiy

Так, ещё раз:

BIOS же вроде ничего не ищет, а промто читает сектор в память с того устройства, которое первое стоит в его настройках очередности.

ИМХО, BIOS таки ищет. Если в списке устройств первое не помечено сигнатурой 55AA, то он обращается ко второму и далее по списку.

Иначе в ситуации 1) DVD 2)жёсткий диск, когда вставлена пустая болванка, компьютер бы вообще не загружался.

sched
()
Ответ на: комментарий от dikiy

управление вернется в BIOS и он начнет пищать :)

Нет, ЕМНИП просто повиснет черным экраном. Хотя, судя по этому, напишет что-то вроде Missing Operating System.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от dikiy

Grub может грузить семерку самостоятельно ? Разве? Он вроде chainloader делает на виндовый загрузчик и тот потом грузит винду. А виндовый загрузчик как раз на диске с вин ХП, которую я хочу снести.

thunriv
() автор топика
Ответ на: комментарий от Kroz

Нет, ЕМНИП просто повиснет черным экраном. Хотя, судя по этому, напишет что-то вроде Missing Operating System.

это от BIOS зависит. Он возвращает управления в БИОС, а тот уже висит, или васик пускает, или пищит.

dikiy ★★☆☆☆
()
Ответ на: комментарий от thunriv

Grub может грузить семерку самостоятельно ? Разве? Он вроде chainloader делает на виндовый загрузчик и тот потом грузит винду.

а на диске с семеркой его нет чтоли?

dikiy ★★☆☆☆
()
Ответ на: комментарий от thunriv

Lilo может и найдет все ОС на харде.

лило ничего не найдет, если ты ему не пропишешь.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Это невалидный источник. Там по неясной причине называется кусок кода от Microsoft от ms-dos 3 до win95 стандартом. С таким же успехом можно обозвать стандартным загрузчик от любых других систем. Код варьируется по версиям операционной системы и по типу файловой системы. Microsoft это не документирует (во всяком случае я не встречал такой документации), не говоря уже о том, с каких пор Microsoft стала определять стнадарты MBR.

По поводу возвращения управления назад в BIOS: в статье упомянут вызов 18 прерывания. Это передача управления только технически (как и вызов функции для чтения диска загрузчиком), а я говорил про общую логику загрузки.

sched
()
Ответ на: комментарий от sched

Это невалидный источник. Там по неясной причине называется кусок кода от Microsoft от ms-dos 3 до win95 стандартом.

ну вызови fdisk /mbr и скинь сюда первый сектор. а мы его дизассембируем.

По поводу возвращения управления назад в BIOS: в статье упомянут вызов 18 прерывания. Это передача управления только технически

это передача в BIOS и технически и фактически.

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

но таки стандартным загрузчиком обзывают именно загрузчик dos/win9x. Потому что он дожил аж до сегодняшнего дня.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

ну вызови fdisk /mbr и скинь сюда первый сектор. а мы его дизассембируем.

То, что он сегодня на какой-то конкретной машине такой, не значит что завтра он будет таким же. Microsoft с бодуна захочет и поменяет свой загрузчик и кинет всех тех, кто рассчитывает на определённые, взятые ниоткуда предположения о том, что такое «стандартный_загрузчик».

это передача в BIOS и технически и фактически.

В таком смысле можно утверждать, что на BIOS передаётся управление не только в случае отсуствия активного раздела, но по нескольку раз во время чтения диска вызовом 13ого прерывания.

но таки стандартным загрузчиком обзывают именно загрузчик dos/win9x. Потому что он дожил аж до сегодняшнего дня.

Юзер на форуме обзывает? Где валидные доказательства того, что Microsoft определяет «стандартные загрузчики» и что «стандартный загрузчик» - это тот, который в dos 3.

sched
()
Ответ на: комментарий от sched

но таки стандартным загрузчиком обзывают именно загрузчик dos/win9x. Потому что он дожил аж до сегодняшнего дня.

Юзер на форуме обзывает? Где валидные доказательства того, что Microsoft определяет «стандартные загрузчики» и что «стандартный загрузчик» - это тот, который в dos 3.

Кроме тебя одного все всё поняли. Уймись.

это передача в BIOS и технически и фактически.

В таком смысле можно утверждать, что на BIOS передаётся управление не только в случае отсуствия активного раздела, но по нескольку раз во время чтения диска вызовом 13ого прерывания.

int 13 и int 18 это совсем разные вещи.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Кроме тебя одного все всё поняли. Уймись.

Это не аргумент. Давай доказательства. Без них твои выводы основаны на «больших достижениях» Василиев Пупкиных по дизассемблированию кусков кода, которому придаются «божественные» характеристики стандарта.

int 13 и int 18 это совсем разные вещи.

You don't say?

sched
()
Ответ на: комментарий от sched

ты этот код можешь и сам дизассемблировать, если не веришь «Пупкиным». Но я отлично знаю, что ты там найдешь :)

В общем - свободен, трололо.

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 1)
Ответ на: комментарий от dikiy

Он на диске с XP вроде как. Сначала устанавливался ХП, потом на другой основной раздел ставилась 7-ка и потом уже ставился Debian на третий основной раздел. Загружался Grub, который не видел винд, а только Дебиан. Помогло update-grub, после чего в списке загрузки Gruba появился загрузчик винды, через который можно загрузить или вХП или в7. P.S. На лэплопе вообще если смотреть ин-фу о разделах, есть раздел C, являющийся основным и при этом он в зеленой рамке( доп. раздел тобишь) и + он логический диск. Как такой может быть? Ведь основной раздел и доп. раздел это не одно и то же. При этом, так как он основной, я могу на него ОС поставить, но при этом он логический диск, а на лог. диск нельзя поставить ОС...

thunriv
() автор топика
Ответ на: комментарий от dikiy

ты этот код можешь и сам дизассемблировать

Угу. Даже менял - делал самопальный загрузчик для 2х win98, русской и японской. Утрамбовывал в 1 сектор.

cadaber ★★
()
Ответ на: комментарий от thunriv

но при этом он логический диск, а на лог. диск нельзя поставить ОС...

нельзя, если эта ОС от мелкософта. Остальные ОС можно.

dikiy ★★☆☆☆
()
Ответ на: комментарий от thunriv

Помогло update-grub, после чего в списке загрузки Gruba появился загрузчик винды, через который можно загрузить или вХП или в7.

update-grub должен был chainloader от каждой винды отдельно продетектить. Так что они независимы.

dikiy ★★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.