Коли я переміщу завантажувальний розділ 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. Якщо це число не збігається, система не завантажиться. Далі я перевірю, чи там зберігається абсолютна посилання на блок.
\BCD\Boot
, і ви зазвичай редагуєте це за допомогою bcdedit.exe
, ні bcdboot
. І так, окремий розділ для обв’язки завантаження (який потрібен лише тоді, коли ви використовуєте функцію шифрування повного диска, оскільки код дешифрування повинен зберігатися поза основним розділом Windows) контролює процес завантаження, якщо він існує.