Когда я перемещаю загрузочный раздел NTFS с Windows на другое смещение блока, что нужно обновить, чтобы он снова стал загрузочным?
Предыстория: я планирую написать программу, которая выполняет необходимые действия , поэтому я не ищу руководства по использованию инструментов Microsoft при загрузке с DVD-диска Windows. Вместо этого мне нужно как-то самому изменить эти вещи, чтобы я мог написать решение, которое будет проще для среднего пользователя ПК, когда он хочет переместить свою систему Windows на больший жесткий диск.
В частности, вот что я попробовал:
У меня есть диск с несколькими разделами, один из которых - раздел NTFS с Windows на нем, и диск использует простой старый блок MBR 0 для разметки разделов (не более 4 разделов).
Теперь я форматирую и делаю новый, больший диск. Там я освобождаю место для раздела NTFS и копирую содержимое из раздела Windows NTFS старого диска в. И я делаю раздел "активный".
Однако, когда я пытаюсь загрузиться с этого диска, я сразу получаю сообщение об ошибке чтения, и загрузка останавливается, точный текст:
A disk read error occurred
Press Ctrl+Alt+Del to restart
Я проверил, что оба блока имеют одинаковый код загрузочного сектора в блоке 0.
Мне кажется, что-то еще может потребоваться обновление. Я предполагаю, что где-то есть абсолютная ссылка на блок, которую мне нужно обновить, возможно, указывающая на загрузчик следующего уровня или на ядро NT.
Обновление: я обнаружил, что эта статья углубляется в то, что я хочу знать. Тем не менее, он говорит, чтобы изменить boot.ini, но у меня установлена Windows 7, где такие вещи, похоже, изменились: нет boot.ini, но есть папка с именем System Volume Information с GUID и другими данными в нем, которые звучат, связанные с моей проблемой , Собираюсь продолжать копать ...
Обновление 2: благодаря ужасно выглядящему, но очень информативному веб-сайту Starman , я смог понять первый шаг: загрузочный сектор NTFS имеет поле для «скрытых» секторов. Это поле должно содержать номер сектора загрузочного сектора. Это решает сообщение «ошибка чтения». Однако теперь я получаю сообщение об ошибке «BOOTMGR отсутствует». Похоже, есть еще одно место, где должен быть скорректирован номер блока, но я не могу найти ничего в списке кода по этому поводу.
Я нахожу много сайтов помощи, предлагающих инструменты Windows для исправления этой проблемы «BOOTMGR отсутствует», но ни один из них не знает, что происходит за кулисами. Вроде как предлагать переустановить Windows, когда есть небольшая проблема с ней. По крайней мере, эти исправления, похоже, работают, в основном с использованием инструментов Bcdedit и Bootrec. Теперь, кто знает, что они делают, особенно последние, в отношении перемещенного раздела?
Обновление 3: После многих попыток проб и ошибок я считаю, что теперь решение находится в файле реестра BCD-Template , который обычно находится в \ Windows \ System32 \ config. Если я получу это обновление с помощью команды "bcdboot", Windows запустится с него. Сейчас я нахожусь в процессе выяснения, какую информацию содержит этот реестр, относящийся к вышеуказанному вопросу. Любые указатели на содержимое этого реестра приветствуются.
Обновление 4. Оказывается, что, хотя файл шаблона BCD перезаписывается и имеет другое двоичное содержимое, чем его предшественник, значения внутри не изменяются. Так что это должно быть что-то еще, что пишет bcdboot.exe. Ранее я уже проверял, изменяет ли он первые 32 загрузочных блока раздела, но они, похоже, остаются неизменными. Карта Парититона тоже не меняется. Так что же изменяет bcdboot помимо реестра BCD? Любые советы о том, как я могу отследить это? Существуют ли инструменты низкого уровня, которые показывают мне, в какие файлы записывает программа?
Обновление 5: похоже, ответ: c: \ Boot \ BCD также изменен, и это, по-видимому, ключевой файл для процесса менеджера загрузки. Я исследую это позже ...
Обновление 6: кажется важной деталью, что я изначально создал два раздела при установке Windows 7. Небольшой раздел из 204800 секторов, который выглядит как загрузочный раздел, за которым следует фактический большой раздел, содержащий систему Windows ( диск С :). Когда я попытался перенести эту установку на новый, больший диск, я оставил те же два раздела на новом диске без изменений, хотя они оказались с другим смещением. Одно это привело к сообщению «BOOTMGR отсутствует». С тех пор я использовал bcdboot.exe только в разделе Windows, который добавилфайл \ Boot \ BCD в этом разделе. Этот файл (и папка) изначально существовал только в меньшем разделе. Следовательно, эта проблема может быть более сложной в моем случае, так как один раздел (загрузчик) ссылается на другой раздел (тот, который содержит ОС), в то время как другие люди могут иметь дело только с одним разделом, содержащим оба, и, возможно, есть решение проще
Обновление 7. Найдена еще одна деталь: файл \ Boot \ BCD записывает серийный номер MBR. Если это число не совпадает, система не будет загружаться. Далее я проверю, есть ли там абсолютная ссылка на блок.
\BCD\Boot
, и вы обычно редактируете это bcdedit.exe
, а не bcdboot
. И да, отдельный раздел для привязки к загрузке (который требуется только при использовании функции полного шифрования диска, поскольку код дешифрования должен храниться вне раздела главного окна) контролирует процесс загрузки, если он существует.