Що потребує оновлення під час переміщення завантажувального розділу Windows 7 (або Vista)?


9

Коли я переміщу завантажувальний розділ 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: Завдяки жахливому, але дуже інформативному сайту Starman , я зміг зрозуміти перший крок: У завантажувальному секторі NTFS є поле для «прихованих» секторів. Це поле має містити номер сектора завантажувального сектора. Це вирішує повідомлення про помилку читання. Однак тепер я отримую помилку "BOOTMGR відсутня". Схоже, є ще одне місце, де номер блоку має бути скоригований, але я не можу знайти нічого з цього переліку коду.

Я знаходжу багато довідкових сайтів, які пропонують інструменти Windows для виправлення цієї проблеми "BOOTMGR відсутня", але ніхто, здається, не знає, що відбувається за кадром. Начебто б запропонували перевстановити Windows, коли з цим виникають невеликі проблеми. Принаймні, ці виправлення, здається, спрацьовують, здебільшого за допомогою інструментів Bcdedit і Bootrec. Тепер, хто знає, що вони роблять, особливо останній, щодо переміщеного розділу?

Оновлення 3: Після безлічі спроб проб і помилок я вважаю, що рішення лежить у файлі реєстру BCD-Template , який зазвичай знаходиться всередині \ Windows \ System32 \ config. Якщо я оновлюю це за допомогою команди "bcdboot", Windows запускається з нього. Зараз я розбираюся, яку інформацію містить цей реєстр, що стосується вищезазначеного питання. Будь-які вказівки до вмісту цього реєстру можна вітати.

Оновлення 4: Виявляється, що, хоча файл BCD-Template перезаписується і має інший бінарний вміст, ніж його попередник, значення всередині не змінюються. Тож має бути щось інше, що пише bcdboot.exe. Раніше я вже перевіряв, чи змінює він перші 32 завантажувальні блоки розділу, але вони, здається, залишаються незмінними. Карта Parititon також не змінюється. Так що ж таке, що bcdboot модифікує крім реєстру BCD? Будь-які поради, як я можу це простежити? Чи є інструменти низького рівня, які показують мені, в які файли пише програма?

Оновлення 5: Здається, відповідь виглядає так: c: \ Boot \ BCD також змінено, і це, здається, є ключовим файлом для процесу менеджера завантаження. Я розслідую це пізніше ...

Оновлення 6: Здається, важливою деталлю було те, що у мене спочатку було створено два розділи, коли я встановив Windows 7: Невеликий розділ з 204800 секторів, який, як видається, є розділом для завантаження, а потім фактичний, великий розділ, що містить систему Windows ( диск C :). Коли я намагався перенести цю інсталяцію на новий, більший диск, я залишив ці два розділи недоторканими на новому диску, хоча вони закінчилися з іншим зміщенням. Це само по собі призвело до повідомлення "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. І так, окремий розділ для обв’язки завантаження (який потрібен лише тоді, коли ви використовуєте функцію шифрування повного диска, оскільки код дешифрування повинен зберігатися поза основним розділом Windows) контролює процес завантаження, якщо він існує.
Бен Войгт

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

1
Не питання програмування. Це знання про домен про завантажувач Windows.
ніхто

Відповіді:


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 залежно від ситуації.

Дивіться: Support.Microsoft.com для отримання більш детальної інформації.


1
Дякуємо за спробу допомогти, але, як ви говорите, це стандартні знання. Мені спеціально потрібна інформація "що відбувається", щоб досягти цього в моїй власній письмовій програмі, а не за допомогою програмного забезпечення Майкрософт, з яким все ще важко обробити тривіального користувача. Я хочу мати можливість надати рішення користувачеві Mac із встановленням Boot Camp, якщо йому потрібно перенести це на інший диск. І в якості побічного ефекту це також допоможе будь-якому іншому користувачеві Windows, оскільки завдання будуть такими ж.
SuperTempel

Якби я намагався це зробити ... Я б увімкнув диск до і після і зробив двійкове порівняння між ними. Удачі.
Essobi

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