Kiedy przeniosę startową partycję NTFS z Windows na inne przesunięcie bloku, co wymaga aktualizacji, aby znów była bootowalna?
Tło: Planuję napisać program, który wykonuje niezbędne działania , dlatego nie szukam przewodników dotyczących korzystania z narzędzi Microsoft, uruchamiając system z dysku DVD systemu Windows. Zamiast tego muszę samodzielnie zmodyfikować te rzeczy, aby móc napisać rozwiązanie, które jest łatwiejsze dla przeciętnego użytkownika komputera, gdy chce przenieść swój system Windows na większy dysk twardy.
W szczególności oto, co próbowałem:
Mam dysk z kilkoma partycjami, z których jedna to partycja NTFS z systemem Windows, a dysk używa zwykłego starego bloku MBR 0 dla układu partycji (nie więcej niż 4 partycje).
Teraz formatuję i dzielę na nowy, większy dysk. Tam robię miejsce dla partycji NTFS i kopiuję zawartość z partycji NTFS starego dysku na. I włączam partycję jako „aktywną”.
Jednak gdy próbuję uruchomić komputer z tego dysku, natychmiast pojawia się komunikat „błąd odczytu” i ładowanie zatrzymuje się, dokładny tekst to:
A disk read error occurred
Press Ctrl+Alt+Del to restart
Sprawdziłem, czy oba dyski mają ten sam kod sektora rozruchowego w bloku 0.
Wydaje mi się, że coś innego może wymagać aktualizacji. Wydaje mi się, że gdzieś istnieje absolutne odniesienie do bloku, które muszę zaktualizować, prawdopodobnie wskazując na moduł ładujący następnego poziomu lub jądro NT.
Aktualizacja: znalazłem ten artykuł dogłębnie w tym, co chcę wiedzieć. Mówi się jednak o modyfikacji boot.ini, ale mam tutaj zainstalowany system Windows 7, w którym wydaje się, że coś się zmieniło: nie ma boot.ini, ale folder o nazwie Informacje o woluminie systemowym z identyfikatorem GUID i innymi danymi, które wydają się związane z moim problemem . Będzie dalej kopać ...
Aktualizacja 2: Dzięki strasznie wyglądającej, ale bardzo pouczającej stronie Starmana udało mi się wymyślić pierwszy krok: sektor rozruchowy NTFS ma pole dla „ukrytych” sektorów. To pole musi zawierać numer sektora sektora rozruchowego. Rozwiązuje to komunikat „błąd odczytu”. Teraz jednak pojawia się błąd „Brak BOOTMGR”. Wygląda na to, że istnieje inne miejsce, w którym trzeba zmienić numer bloku, ale nie mogę znaleźć niczego na liście kodów na ten temat.
Znajduję wiele stron pomocy sugerujących narzędzia Windows do rozwiązania tego problemu „Brakuje BOOTMGR”, ale wydaje się, że nikt nie wie, co dzieje się za kulisami. Jak sugerowanie ponownej instalacji systemu Windows, gdy jest z tym mały problem. Przynajmniej te poprawki wydają się działać, głównie w przypadku narzędzi Bcdedit i Bootrec. Kto wie, co robią, zwłaszcza ten ostatni, w odniesieniu do przeniesionej partycji?
Aktualizacja 3: po wielu próbach i próbach, myślę, że teraz rozwiązanie leży w pliku rejestru szablonu BCD , zwykle znajdującym się w \ Windows \ System32 \ config. Jeśli otrzymam tę aktualizację za pomocą polecenia „bcdboot”, system Windows uruchomi się z niego. Właśnie zastanawiam się, jakie informacje zawiera ten rejestr w związku z powyższym pytaniem. Wszelkie wskazówki dotyczące zawartości tego rejestru są mile widziane.
Aktualizacja 4: Okazuje się, że chociaż plik szablonu BCD zostaje przepisany i ma inną zawartość binarną niż jego poprzednik, wartości w nim się nie zmieniają. Musi to być coś innego, co pisze bcdboot.exe. Wcześniej sprawdziłem, czy zmienia pierwsze 32 bloki rozruchowe partycji, ale wydaje się, że pozostają niezmienione. Mapa Parititon również się nie zmienia. Co więc modyfikuje bcdboot oprócz rejestru BCD? Wszelkie wskazówki, jak mogę to prześledzić? Czy istnieją narzędzia niskiego poziomu, które pokazują mi, do jakich plików program zapisuje?
Aktualizacja 5: Wydaje się, że odpowiedź brzmi: c: \ Boot \ BCD jest również zmieniona i wydaje się, że jest to plik klucza dla procesu menedżera rozruchu. Zbadam to później ...
Aktualizacja 6: Wydaje się być ważnym szczegółem, że pierwotnie miałem dwie partycje utworzone podczas instalowania systemu Windows 7: Mała partycja 204800 sektorów, która wydaje się być partycją rozruchową, a następnie rzeczywista, duża partycja zawierająca system Windows ( dysk C :). Kiedy próbowałem przenieść tę instalację na nowy, większy dysk, zachowałem te same dwie partycje w nienaruszonym stanie na nowym dysku, chociaż skończyły one na innym przesunięciu. To samo doprowadziło do komunikatu „Brak BOOTMGR”. Od tego czasu używałem bcdboot.exe tylko na partycji Windows, która została dodanaplik \ Boot \ BCD na tej partycji. Ten plik (i folder) pierwotnie istniał tylko na mniejszej partycji. W związku z tym problem ten może być w moim przypadku bardziej skomplikowany, ponieważ jedna partycja (pasek rozruchowy) odnosi się do innej partycji (ta zawierająca system operacyjny), podczas gdy inne osoby mogą mieć do czynienia tylko z jedną partycją zawierającą obie, i być może rozwiązaniem jest prostsze.
Aktualizacja 7: Znaleziono jeszcze jeden szczegół: plik \ Boot \ BCD rejestruje numer seryjny MBR. Jeśli ten numer nie pasuje, system nie uruchomi się. Następnie przetestuję, czy jest tam zapisane absolutne odniesienie do bloku.
\BCD\Boot
i normalnie można to edytować za pomocą bcdedit.exe
, nie bcdboot
. I tak, osobna partycja do ładowania systemu rozruchowego (wymagana tylko w przypadku korzystania z funkcji szyfrowania całego dysku, ponieważ kod deszyfrowania musi być przechowywany poza główną partycją systemu Windows) kontroluje proces rozruchu, jeśli taki istnieje.