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