Почему клонированная дискета Windows 7 содержит неполные данные (и, следовательно, предотвращает загрузку)?

9

У меня было несчастье, когда мне нужно было клонировать Windows XP / 7 с двойной загрузкой, чтобы заменить его жесткий диск меньшим. У меня были большие проблемы с загрузкой, и я хотел бы понять, что происходит, и могу ли я сделать что-то лучше.

Справочная информация: на машине установлен накопитель на 750 Гб с 3 разделами:

  • Windows XP
  • Windows 7
  • Данные

Первоначальная установка была сделана таким образом, что нет отдельного раздела восстановления Windows 7. Я надеюсь, что этот факт несколько упрощает вещи.

Я заменяю его на диск 80 Гб. Разделы уже были сжаты в Windows 7, чтобы они помещались на меньший диск.

Я использовал GParted(из PartedMagicLinux LiveCD), чтобы скопировать разделы. Я отмечаю раздел Windows XP как активный раздел (такой же, как на исходном диске).

Я не смог использовать CloneZillaили сделать полную копию диска из-за перехода с большего на меньший диск.

После копирования разделов я вручную скопировал загрузчик (стараясь не копировать таблицу разделов):

$ dd if=/dev/sda of=/dev/sdb bs=446 count=1

Я удалил исходный диск, установил новый, чтобы он был физически подключен так же, как и исходный (ведущий IDE канал 1), и попытался загрузиться. Это успешно представило загрузочное меню, но не удалось выбрать любую из этих опций (их две: одна для XP и одна для Win7).

Я провел немало исследований, которые позволили мне понять, что данные конфигурации загрузки Windows 7 не содержат всего, что должно. Я сравнил вывод BCD с оригинального и нового дисков и отметил, что записи устройства на последнем были unknown. Поэтому я вручную изменил их, чтобы они соответствовали оригиналу - вот так:

$ bcdedit /set {ntldr} device partition=C:
$ bcdedit /set {default} device partition=D:
$ bcdedit /set {default} osdevice partition=D:

и перезагрузился. На этот раз я мог загрузить как XP, так и Win7. Мне нужно провести больше тестов, потому что между двумя BCD, похоже, есть и другие различия, но внесенные выше изменения, по крайней мере, позволили загрузиться.

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

И последующим шагом было бы спросить, должен ли я делать это по-другому?

starfry
источник

Ответы:

13

После клонирования разделов, содержащих операционные системы Windows, необходимо исправить данные конфигурации загрузки, если клонированные разделы находятся не на той же позиции на клонированном диске, как на оригинале.

Механизм загрузки Windows, начиная с Windows Vista, сохраняет свою конфигурацию как «Данные конфигурации загрузки» (BCD), и это относится к разделам не по номерам разделов, а по сигнатуре диска и смещению сектора. Подпись диска - это 32-разрядное значение, встроенное в основную загрузочную запись. Копирование первых 446 байтов сектора 0 приведет к копированию подписи диска.

Если действия клонирования приводят к тому, что клонированные разделы диска имеют разные адреса начальных секторов, чем исходные (весьма вероятно, если не использовался клон всего диска), то клон, скорее всего, не сможет загрузиться до тех пор, пока эти средства не будут применены.

По сути, необходимо корректировать смещения секторов, и для этого вам нужно будет использовать консоль восстановления (это доступно на установочном DVD-диске Windows 7). Убедитесь, что подключен только клонированный диск, и загрузитесь с установочного DVD-диска Windows 7. На первом экране выберите язык и нажмите «Далее». На следующем экране (где отображается «Установить сейчас») нажмите SHIFT + F10, чтобы получить командную строку.

Во-первых, проверьте буквы дисков, которые на месте и разделы, к которым они относятся:

diskpart
list volume
exit

Также, если вам нужно, повторно подтвердите активный раздел:

diskpart
select disk 0
select part 1
detail part
select part 2
detail part
... and so-on
exit

В системе BIOS BCD хранится в файле, X:\Boot\BCDгде Xнаходится буква диска активного раздела (для UEFI это системный раздел EFI). Обычно скрытый, это можно увидеть с

dir /AH X:\Boot

Это может быть зарезервировано следующим образом:

bcdedit /export X:\path\to\bcd\backup

и восстановлен

bcdedit /import X:\path\to\bcd\backup

Если на диске установлено несколько операционных систем, может быть несколько BCD. Активный BCD - это тот, \Boot\BCDчто находится в разделе, который помечен как активный - активный раздел . Перечислить его содержимое (в порядке возрастания многословия :)

bcdedit
bcdedit /enum
bcdedit /enum ALL
bcdedit /enum ALL /v

Чтобы исправить активный BCD, установите буквы дисков для правильных разделов и выполните:

bcdedit /set {default} osdevice partition=X:
bcdedit /set {default} device partition=X:
bcdedit /set {bootmgr} device partition=X:
bcdedit /set {memdiag} device partition=X:
bcdedit /set {ntldr} device partition=X:

или исправить другую BCD (в этих примерах "X: \ boot \ bcd"):

bcdedit /store X:\boot\bcd /set {default} osdevice partition=X:
bcdedit /store X:\boot\bcd /set {default} device partition=X:
bcdedit /store X:\boot\bcd /set {bootmgr} device partition=X:
bcdedit /store X:\boot\bcd /set {memdiag} device partition=X:
bcdedit /store X:\boot\bcd /set {ntldr} device partition=X:

Например, в моей системе установлены XP и 7, и они показывают, что XP включен, C:а 7 включен, D:а активный раздел есть C:. тогда активный BCD будет в c:\boot\BCD. Диспетчер загрузки будет найден по адресу, C:\bootmgrа диагностика памяти - по адресу C:\boot\memtest.exe. Необходимые команды:

bcdedit /set {ntldr} device partition=C:
bcdedit /set {memdiag} device partition=C:
bcdedit /set {bootmgr} device partition=C:
bcdedit /set {default} device partition=D:
bcdedit /set {default} osdevice partition=D:

С этими изменениями перезагрузка компьютера (нажатие Alt-F4 позволит это сделать) и удаление DVD позволили системе успешно загрузиться.

Дальнейшее чтение:

(клон всего диска не должен страдать от этих проблем, потому что расположение разделов на копии должно быть точно таким же, как и у оригинала)

starfry
источник
Обратите внимание, что bcdbootэто упрощает воссоздание загрузочной записи, но я не уверен, что она подойдет для сценария двойной загрузки XP / W7.
Гарри Джонстон
Мне нравится ваш ответ, но не могли бы вы немного его почистить? Я думаю, что есть много посторонней информации (например, примеры команд, когда у вас есть фактическая команда сразу после, и т. Д.).
Bigbio2002
Я рад, что вам нравится ансер, но я не думаю, что там много посторонней информации. У меня есть общее объяснение плюс один реальный пример в конце, который фактически показывает, как определить разделы для каждой записи, которую необходимо изменить. Мне потребовались все вышеперечисленные знания, чтобы исправить мою клонированную систему и, таким образом, представить ее как полный ответ, чтобы предоставить как можно больше информации другим.
звездный день
8

Согласно этой неофициальной документации по внутренним компонентам BCD , разделы в хранилище BCD фактически идентифицируются по сигнатуре диска и смещению раздела. Вы скопировали подпись диска (байты MBR 440–443), но, скорее всего, изменили смещения разделов при размещении разделов на меньшем диске, поэтому BOOTMGR больше не смог найти эти разделы.

Сергей Власов
источник
Это интересно и, безусловно, объясняет, почему это не будет работать - смещения разделов будут определенно другими. Почему-о-о-о, это не более официально задокументировано, можно только догадываться! Есть ли принятый (официальный или неофициальный) способ «починить» это на клонированном диске?
Starfry
Я полагаю, что официальным способом является «загрузка с предварительно подготовленного диска для восстановления системы (или с реального установочного носителя, если он у вас есть, а не с носителя для восстановления DOEM) и запуск восстановления при загрузке ; если это не удается, переустановите ОС ». Не уверен, восстановит ли Startup Repair и XP в вашем случае.
Сергей Власов
@starfry Существует много редакторов BCD, включая встроенную командную строку one ( bcdedit). Я предпочитаю Visual BCD Editor самостоятельно. Если вы можете войти в среду Windows, Visual BCD позволяет легко установить загрузочное устройство. Вы можете сделать то же самое с загрузочного DVD, открыв командную строку (я думаю, что это был F11 или что-то) и используя bcdeditтам. Я бы порекомендовал не восстанавливать систему, если вы решили исправить ее вручную, так как у меня была функция восстановления системы, которая ранее удаляла среду восстановления на диске.
Боб
Спасибо, Сергей и Боб. Я принял этот ответ, потому что он заставил меня полностью понять, что происходит. То, что я теперь знаю, я задокументировал в отдельном ответе.
Звездный день
простите за мое незнание, но если @starfry - это байт для байт-копирования поверх sda (не sda1 раздела), а sda для всего диска, то почему смещения раздела будут другими?
Барлоп