Bootrec /FIXBOOT против Bootrec /FIXMBR
Согласно Microsoft, вот что делает Bootrec /FIXBOOT:
"This option writes a new boot sector to the system partition by using a boot sector that's compatible with Windows Vista or Windows 7"
И вот что делает Bootrec /FIXMBR:
"This option writes a Windows 7 or Windows Vista-compatible MBR to the system partition"
Разве MBR - это не просто загрузочный сектор? Какие другие типы загрузочных секторов это исправит? Я запутался, когда бы использовал один поверх другого - разве mbr не использует только окна загрузочного сектора?
1 ответ
Это оказалось очень интересным вопросом. Есть много ссылок на эту тему, но они неоднозначны в описании различий / отношений между ними. Лучшее описание конфигурации жесткого диска для ОС Windows, которое я нашел, это: http://www.ntfs.com/hard-disk-basics.htm.
Похоже, что MBR и таблица разделов находятся в одном и том же секторе диска. MBR "меньше" в том смысле, что это самое первое на диске, которое затем использует таблицу разделов для продолжения процесса загрузки на конкретную ОС. Два параметра команды эффективно исправляют различные ссылки в цепочке загрузки:
/ fixmbr заменяет информацию и небольшой исполняемый файл, который читает таблицу разделов, чтобы найти, где может находиться ОС. Таким образом, это существует на любом диске, который был отформатирован и эффективно существует для чтения следующего небольшого фрагмента на жестком диске, который сообщает, где должна находиться ОС. По сути, это не обязательно элемент, специфичный для Windows.
/ fixboot заменяет следующую часть - запись в таблице разделов, которая указывает, где находится фактический загружаемый исполняемый файл для ОС. Так что это исправление следующей ссылки в цепочке процесса загрузки. Эта команда создает специфический для Windows результат, который напоминает жесткому диску, где искать Windows, в частности.
/FixMBR
записывает загрузочный сектор диска (обычно называемый
MBR
), в то время как
/FixBoot
пишет загрузочный сектор раздела (обычно называемый
VBR
или PBR).
Все сводится к тому, как Windows загружается в системах с BIOS (без UEFI). Как мы знаем, из-за ограничений прошивки BIOS (она работает в реальном режиме и не может получить доступ к более чем 1 МБ ОЗУ), она не может загружать и запускать фактическую ОС (например, ядро Windows или Linux). Таким образом, система выполняет процесс начальной загрузки поэтапно от небольшого кода к более крупному. Вот почему у нас есть загрузчики.
На первом (или нулевом) этапе BIOS загружает первый сектор выбранного диска в ОЗУ и начинает выполнение с заданного смещения. Это происходит во всех BIOS-совместимых системах, независимо от установленной ОС. Таким образом, первый сектор, участвующий в загрузке (привязке), называется загрузочным сектором.
Разве MBR - это не просто загрузочный сектор?
Да. MBR - это загрузочный сектор, с которым мы чаще всего взаимодействуем.
/FixMBR
пишет "в системный раздел" некорректно. MBR записывается в первый сектор диска (даже на GPT-дисках).
Разве MBR не единственный загрузочный сектор, который использует Windows?
Нет. Он также использует VBR/PBR.
В зависимости от установленного загрузчика и ОС на разделах может быть больше загрузочных секторов. В случае Windows исполняемый код в MBR находит активный раздел или загрузочный раздел (Windows называет его системным разделом) в таблице разделов (также часть MBR) и выполняет загрузочный сектор этого раздела (VBR), который содержит код BootMgr. К настоящему времени VBR достаточно велик, чтобы понять структуру файловой системы, поэтому он выполняет
\bootmgr
файл (помещается в корень активного раздела), который считывает его конфигурацию из файла BCD (обычно
\Boot\BCD
) и работает
winload.exe
(или показывает меню выбора, если BCD содержит несколько записей), который запускает ядро Windows. Подробнее см. Здесь.
Но не все ОС загружаются одинаково. GRUB (популярный загрузчик в мире Linux), например, устанавливает себя в MBR, которая выполняет следующий этап (ы), записываемый в несколько секторов сразу после MBR. Он читает свою конфигурацию из
/grub/grub.cfg
(помещен в
/boot
раздел, который может отличаться от установочного раздела Linux, смонтированного в
/
) и загружает ядро Linux (или показывает меню выбора, если
grub.cfg
содержит несколько записей). GRUB и другие загрузчики, такие как SYSLINUX, также могут быть записаны в VBR.
В мультизагрузочной системе
grub.cfg
обычно включает запись для Windows, поэтому именно MBR GRUB (а не Windows) выполняет BootMgr в VBR (даже если он не находится в активном разделе), когда запись Windows выбирается пользователем. Если пойти дальше, GRUB можно настроить для прямого запуска
\bootmgr
исполняемый файл (с помощью ntldr
команда вместо значения по умолчанию chainloader
), полностью минуя исполняемый код VBR.
Когда вы решите вернуться к исходной загрузке Windows, запустите
BootRec /FixMBR
, и GRUB исчез. И наоборот, мы также можем сделать загрузку GRUB BootMgr для Windows, изменив BCD с помощью сторонних инструментов, таких как EasyBCD или BootICE, или с помощью Windows
bcdedit
инструмент для добавления новой записи.
Перезапись VBR обычно не требуется, за исключением случаев, когда вы случайно (или намеренно) записываете, например, GRUB в VBR активного раздела Windows. В этом случае
BootRec /FixBoot
также требуется для успешного возобновления собственной загрузочной цепочки Windows.
Обратите внимание, что обе приведенные выше команды просто перезаписывают исполняемую часть MBR/VBR, другие части остаются нетронутыми, например, таблица разделов в MBR. Подобно таблице разделов в MBR, описывающей структуру разделов, блок параметров BIOS в NTFS VBR описывает структуру файловой системы.
/FixBoot
не может исправить проблемы в BPB.
Например, если вы замените Windows Active Partition или переместите установку на другой диск так, чтобы номер начального сектора раздела изменился, Windows не загрузится, даже если вы исправите MBR / VBR и воссоздадите / исправите записи BCD (используя
bcdboot
/
bcdedit
). В одном из полей BPB жестко запрограммирован номер первого сектора раздела, который необходимо исправить. Вы можете увидеть подробности здесь.