Re: Почему VBR упорно не грузит BootMgr?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 13.10.24 11:55
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

Послушал я твои мучения...

Ты помнишь, что BIOS грузит MBR так, что передаёт ей один-единственный параметр — хэндл диска для int 10h — в DL? И что MBR делает то же самое для того VBR, который запускает из активного раздела (по крайней мере, все MBR что я видел — никуда не сохраняют номер раздела, с которого загрузились)?

А теперь вопрос — пусть у тебя установлено две разных NTFS на диск, каждая загрузочная. Как VBR, не имея указания, откуда её запустили, получит, откуда грузить то своё продолжение в виде 8 секторов? Можно тут остановиться и подумать, откуда взять дежурную порцию святого духа для решения этого вопроса.

Я вот порылся и нашёл роспись, что делает VBR. И вот там есть один интересный момент: по 0x001C находится такой 4-байтный параметр, как абсолютный адрес блока, с которого выполнять загрузку хвоста VBR (тех 8 секторов, где уже код чтения NTFS, поиска файла BOOTMGR или ранее NTLDR). Этот параметр должен меняться при установке VBR, чтобы она знала, какую именно FS она грузит. Другого источника этого параметра я не нашёл, всё остальное там одинаково.

Дальше у меня отказывает фантазия, что за проверка могла сработать для защиты от кривой загрузки. Но совпадение VBR у двух загрузочных разделов на одном диске, как я понял из этого, означает, что что-то установлено неверно.

Я таки присоединюсь к советам коллег взять какой-то бутменеджер извне. Acronis, GRUB, кто угодно — по идее они все должны отрабатывать эту ситуацию, грузя BOOTMGR своими силами. Без обид, пожалуйста — но по исходному письму ты как-то явно не докопался до проблемы загрузки и вообще её раньше не представлял себе. (В доке GRUB явно сказано, есть команды: "ntldr /ntldr" для версий раньше 7ки; "ntldr /bootmgr" для версий после.)

Но учти, что у них такая же проблема начального бутстрапа. Её решает EFI, иначе же загрузчику приходится самому это делать, причём в пределах своих ~400 байт после исключения BPB и таблицы разделов. GRUB решает это тем, что собирает в своём загрузочном разделе файл core.img, в него сваливает readonly драйвера FS и прочее что нужно, в него самого пишет его локации на диске, а его локацию пишет в свой VBR. В результате только этот core.img неперемещаемый, остальное может свободно мигрировать. У других загрузчиков свои подходы, но где-то они всё это решают.

(Ну и к тому же у GRUB (+Linux) максимальный упор сейчас на уникальные id файловых систем и GPT разделов, чтобы можно было меньше думать о смещениях.)

Ну или перечитай код VBR и сделай вывод сам. Интересно будет почитать, что ты скажешь про это.
The God is real, unless declared integer.
Отредактировано 13.10.2024 12:27 netch80 . Предыдущая версия . Еще …
Отредактировано 13.10.2024 12:23 netch80 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.