Что необходимо обновить при перемещении загрузочного раздела Windows 7 (или Vista)?


9

Когда я перемещаю загрузочный раздел 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. Если это число не совпадает, система не будет загружаться. Далее я проверю, есть ли там абсолютная ссылка на блок.


Просто интересно, вы убедились, что скрытый системный раздел был перемещен правильно?
Колум

Какой скрытый раздел вы имеете в виду? Я только что добавил обновление № 6, в котором говорится о дополнительном загрузочном разделе, и да, я тоже это перенес. Была также еще одна «скрытая» область между MBR и началом раздела (ов) Windows, но это не должно иметь никакого значения - это просто блок данных (в моем случае: раздел HFS + во время перемещения установка Boot Camp здесь). Должны быть задействованы только следующие: карта разделов (карта разделов MBR плюс GUID после этого) и два задействованных раздела Windows (небольшой загрузчик и раздел C:). Я обновил все правильно, конечно. :)
SuperTempel

Скорее всего, важные вещи хранятся в \BCD\Boot, и вы обычно редактируете это bcdedit.exe, а не bcdboot. И да, отдельный раздел для привязки к загрузке (который требуется только при использовании функции полного шифрования диска, поскольку код дешифрования должен храниться вне раздела главного окна) контролирует процесс загрузки, если он существует.
Бен Фойгт

@Ben: да, я знаю о bcdedit - но я не хочу ничего редактировать, насколько я могу судить, поскольку я не хочу изменять какие-либо его параметры, как они были до того, как я переместил разделы на новый диск , Все, что я хочу обновить, - это любые фиксированные номера блоков и ссылки на идентификаторы дисков без использования исполняемых файлов Windows, если это возможно.
SuperTempel

1
Не вопрос программирования. Это знание предмета о загрузчике Windows.
никто не

Ответы:


1

Более простой способ?

Вставьте установочный диск Windows Vista или Windows 7 в дисковод и запустите компьютер.
Нажмите клавишу, когда вам будет предложено.
Выберите язык, время, валюту, клавиатуру или способ ввода и нажмите кнопку Далее.
Нажмите «Восстановить компьютер».
Выберите операционную систему, которую вы хотите восстановить, и нажмите кнопку Далее.
В диалоговом окне «Параметры восстановления системы» нажмите «Командная строка».
Введите Bootrec.exe и нажмите клавишу ВВОД.

Параметры
Bootrec.exe Инструмент Bootrec.exe поддерживает следующие параметры. Используйте опцию, которая подходит для вашей ситуации.

Примечание. Если восстановление BCD не решает проблему запуска, вы можете экспортировать и удалить BCD, а затем снова запустить эту опцию. Делая это, вы убедитесь, что BCD полностью перестроен.

Для этого введите в командной строке Windows RE следующие команды:
bcdedit / export C: \ BCD_Backup
c:
cd boot
attrib bcd -s -h -r
ren c: \ boot \ bcd bcd.old
bootrec / RebuildBcd

или / FixMbr или / FixBoot или / ScanOs или / RebuildBcd в зависимости от ситуации.

Смотрите: Support.Microsoft.com для более подробной информации.


1
Спасибо за попытку помочь, но, как вы указываете, вы говорите о стандартных знаниях. Мне особенно нужна информация о том, что происходит, для достижения этой цели в моей собственной письменной программе, а не с использованием программного обеспечения Microsoft, которое все еще трудно обработать для обычного пользователя. Я хочу иметь возможность предоставить решение для пользователя Mac с установкой Boot Camp на случай, если ему понадобится перенести это на другой диск. И как побочный эффект этого, это помогло бы любому другому пользователю Windows, поскольку задачи были бы такими же.
SuperTempel

Если бы я пытался сделать это ... я бы сделал диск до и после и сделал бы двоичное сравнение между ними. Удачи.
Эссоби

Я снова впереди тебя. Видите, я автор iBored, поэтому я знаю, как делать такие вещи, и, поверьте мне, я пытался. Новый формат слишком загадочен для меня, и поэтому я задаю этот вопрос здесь.
SuperTempel
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.