Co wymaga aktualizacji przy przenoszeniu rozruchowej partycji Windows 7 (lub Vista)?


9

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.


Zastanawiam się, czy upewniłeś się, że ukryta partycja systemowa została poprawnie przeniesiona?
Colum

Którą ukrytą partycję masz na myśli? Właśnie dodałem aktualizację # 6, która mówi o dodatkowej partycji rozruchowej, i tak, też ją przeniosłem. Między MBR a początkiem partycji Windows znajdował się także inny „ukryty” obszar, ale nie powinno to mieć żadnego znaczenia - to tylko kropla danych (w moim przypadku: partycja HFS +, gdy się poruszam instalacja Boot Camp tutaj). Jedyne rzeczy, które powinny być w to zaangażowane to: mapa partycji (MBR plus schematyczna mapa partycji GUID później) i dwie zaangażowane partycje Windows (mały program uruchamiający i partycja C:). Oczywiście zaktualizowałem wszystko poprawnie. :)
SuperTempel,

Z pewnością ważne rzeczy są przechowywane \BCD\Booti 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.
Ben Voigt,

@Ben: tak, wiem o bcdedit - ale nie chcę niczego edytować, o ile mogę stwierdzić, ponieważ nie chcę zmieniać żadnej z jego opcji, ponieważ były na miejscu przed przeniesieniem partycji na nowy dysk . Wszystko, co chcę zaktualizować, to dowolny ustalony numer bloku i odwołania do identyfikatora dysku, bez użycia żadnych plików wykonywalnych systemu Windows, jeśli to możliwe.
SuperTempel,

1
To nie jest pytanie programistyczne. Jest to wiedza domena na temat programu ładującego system Windows.
nikt

Odpowiedzi:


1

Prostszy sposób

Włóż dysk instalacyjny systemu Windows Vista lub Windows 7 do napędu, a następnie uruchom komputer.
Po wyświetleniu monitu naciśnij klawisz.
Wybierz język, godzinę, walutę, klawiaturę lub metodę wprowadzania, a następnie kliknij przycisk Dalej.
Kliknij Napraw komputer.
Kliknij system operacyjny, który chcesz naprawić, a następnie kliknij przycisk Dalej.
W oknie dialogowym Opcje odzyskiwania systemu kliknij Wiersz polecenia.
Wpisz Bootrec.exe, a następnie naciśnij klawisz ENTER.

Opcje
Bootrec.exe Narzędzie Bootrec.exe obsługuje następujące opcje. Skorzystaj z opcji odpowiedniej dla twojej sytuacji.

Uwaga Jeśli odbudowanie BCD nie rozwiąże problemu z uruchomieniem, możesz wyeksportować i usunąć BCD, a następnie ponownie uruchomić tę opcję. Robiąc to, upewniasz się, że BCD jest całkowicie przebudowany.

Aby to zrobić, wpisz następujące polecenia w wierszu polecenia systemu Windows RE:
bcdedit / export C: \ BCD_Backup
c:
cd boot
attrib bcd -s -h -r
ren c: \ boot \ bcd bcd.old
bootrec / RebuildBcd

lub / FixMbr lub / FixBoot lub / ScanOs lub / RebuildBcd w zależności od sytuacji.

Zobacz: Support.Microsoft.com, aby uzyskać więcej informacji.


1
Dziękuję za próbę pomocy, ale jak mówisz, to standardowa wiedza. Potrzebuję informacji „o tym, co się dzieje”, aby osiągnąć ten cel w moim własnym pisanym programie, a nie za pomocą oprogramowania Microsoft, które wciąż jest trudne do opanowania dla zwykłego użytkownika. Chcę być w stanie zapewnić rozwiązanie użytkownikowi Mac z instalacją Boot Camp, na wypadek, gdyby musiał przenieść go na inny dysk. I jako efekt uboczny pomógłby każdemu użytkownikowi systemu Windows, ponieważ zadania byłyby takie same.
SuperTempel,

Gdybym próbował to zrobić ... Zrobiłbym dysk przed i po i zrobiłbym binarne porównanie między nimi. Powodzenia.
Essobi,

Znów jestem przed tobą. Widzisz, jestem autorem iBored, więc wiem, jak robić takie rzeczy i uwierz mi, próbowałem. Nowy format jest jednak dla mnie zbyt tajemniczy i dlatego zadaję to pytanie tutaj.
SuperTempel,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.