9

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

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

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

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

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

Я использовал GParted (из PartedMagic Linux 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 на клонированном разделе выглядит иначе, чем оригинал, и настолько, чтобы предотвратить загрузку?

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

2 ответа2

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 позволили системе успешно загрузиться.

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

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

7

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .