Чому клонований BCD Windows 7 містить неповні дані (а отже, запобігає завантаженню)?


9

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

Передумови: машина має привід 750 Гб на 3-х розділах:

  • Windows XP
  • Windows 7
  • Дані

Початкова установка була виконана таким чином, що немає окремого розділу відновлення Windows 7. Сподіваюся, цей факт дещо спрощує справи.

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

Я використовував GPartedPartedMagicLinux 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 на клонованому розділі здасться відмінним від оригіналу та таким чином, щоб запобігти завантаженню?

А подальше завдання - запитати, чи варто робити це іншим способом?

Відповіді:


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 - це той, який знаходиться в at \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 дозволить системі успішно завантажуватися.

Подальше читання:

(цільний диск не повинен страждати від цих проблем, оскільки макет розділу на копії повинен бути точно таким же, як у оригіналі)


Зауважте, що bcdbootце простіший спосіб відтворити запис завантаження, але я не впевнений, що це було б підходящим у сценарії подвійного завантаження XP / W7.
Гаррі Джонстон

Я люблю вашу відповідь, але ви могли б, будь-ласка, трохи її почистити? Я думаю, що є багато сторонньої інформації (наприклад, команди, коли у вас є фактична команда відразу після тощо).
Bigbio2002

Я радий, що тобі подобається ансер, але я не думаю, що там багато чужої інформації. У мене є загальне пояснення плюс один реальний приклад в кінці, який фактично демонструє, як визначати розділи для кожного запису, який потрібно змінити. Мені потрібні були всі вищезазначені знання, щоб виправити свою клоновану систему і, таким чином, подав це як відповідь у повному обсязі, щоб надати якомога більше інформації іншим.
starfry

7

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


Це цікаво і, безумовно, пояснює, чому це не спрацювало - зсуви розділів, безумовно, були б іншими. Чому-о-чому це формально не документально підтверджено - це хтось здогадається! Чи існує прийнятий (офіційний чи неофіційний) спосіб "відремонтувати" це на клонованому диску?
starfry

Я припускаю, що офіційним способом є «завантаження з попередньо підготовленого диска для відновлення системи (або реального інсталяційного носія, якщо у вас є, а не носія для відновлення DOEM) та запустіть« Ремонт запуску » ; якщо це не вдалося, перевстановіть ОС ”. Не впевнений, чи відновлення запуску також відновить XP у вашому випадку.
Сергій Власов

@starfry Там є багато редакторів BCD, включаючи вбудований командний рядок one ( bcdedit). Я сам віддаю перевагу редактору Visual BCD. Якщо ви можете потрапити в середовище Windows, Visual BCD дозволяє легко встановити завантажувальний пристрій. Ви можете зробити те ж саме з завантажувального DVD, відкривши командний рядок (я думаю, це був F11 чи щось таке) і використовуючи bcdeditтам. Я б рекомендував проти відновлення системи, якщо ви хочете виправити це вручну, оскільки раніше у мене було відновлення системи, щоб видалити середовище відновлення на диску.
Боб

Дякую, сергій та @bob. Я прийняв цю відповідь, тому що це змусило мене повністю зрозуміти, що відбувається. Я окремо відповів на те, що зараз знаю.
starfry

Вибачте моє невігластво, але якщо @starfry є байтом для байтового копіювання через sda (не sda1 розділ), але sda на весь диск, то чому б компенсація розділу не відрізнялася?
барлоп
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.