Dlaczego sklonowany BCD systemu Windows 7 zawiera niekompletne dane (a zatem uniemożliwia rozruch)?

9

Miałem nieszczęście, że muszę sklonować podwójnie ładujący się system Windows XP / 7, aby wymienić dysk twardy na mniejszy. Miałem wielki problem z uruchomieniem go i chciałbym zrozumieć, co się dzieje i czy mógłbym zrobić coś lepszego.

Tło: maszyna ma napęd 750 GB z 3 partycjami:

  • Windows XP
  • System Windows 7
  • Dane

Oryginalna instalacja została wykonana w taki sposób, że nie ma oddzielnej partycji odzyskiwania systemu Windows 7. Mam nadzieję, że ten fakt nieco to uprości.

Zastępuję go dyskiem 80 Gb. Partycje zostały już zmniejszone z poziomu systemu Windows 7, aby zmieściły się na mniejszym dysku.

Użyłem GParted(z PartedMagicLinux LiveCD) do skopiowania partycji. Zaznaczam partycję Windows XP jako partycję aktywną (taką samą jak na oryginalnym dysku).

Nie mogłem użyć CloneZillaani skopiować całej płyty z powodu przejścia z większego na mniejszy dysk.

Po skopiowaniu partycji ręcznie skopiowałem program ładujący (uważając, aby nie skopiować tabeli partycji):

$ dd if=/dev/sda of=/dev/sdb bs=446 count=1

Usunąłem oryginalny dysk, ustawiłem nowy tak, aby był fizycznie podłączony tak samo jak oryginalny (IDE kanał 1 master) i spróbowałem uruchomić komputer. To z powodzeniem pokazało menu rozruchu, ale nie powiodło się po wybraniu jednej z opcji (są dwie: jedna dla XP i jedna dla Win7).

Przeprowadziłem sporo badań, które pozwoliły mi stwierdzić, że dane konfiguracji rozruchu systemu Windows 7 nie zawierają wszystkiego, co powinny. Porównałem wyjście BCD z oryginalnych i nowych dysków i zauważyłem, że wpisy urządzeń na tych ostatnich były unknown. Więc ręcznie zmieniłem je, aby pasowały do ​​oryginału - tak:

$ bcdedit /set {ntldr} device partition=C:
$ bcdedit /set {default} device partition=D:
$ bcdedit /set {default} osdevice partition=D:

i ponownie uruchomiony. Tym razem mogłem uruchomić zarówno XP, jak i Win7. Muszę wykonać więcej testów, ponieważ wydają się istnieć inne różnice między dwoma BCD, ale wprowadzenie powyższych zmian przynajmniej pozwoliło na uruchomienie.

Tak więc moim pytaniem jest naprawdę pytanie, dlaczego BCD na sklonowanej partycji miałby wyglądać inaczej niż oryginał i wystarczająco, aby uniemożliwić uruchomienie?

I następstwem tego byłoby pytanie, czy powinienem robić to w inny sposób?

rozgwiazdy
źródło

Odpowiedzi:

13

Po sklonowaniu partycji zawierających systemy operacyjne Windows konieczne jest naprawienie danych konfiguracji rozruchu, jeśli sklonowane partycje nie znajdują się dokładnie w tej samej pozycji na sklonowanym dysku, jak na oryginale.

Mechanizm rozruchowy systemu Windows, ponieważ Windows Vista, przechowuje swoją konfigurację jako „Dane konfiguracji rozruchowej” (BCD) i odnosi się to do partycji, nie według numerów partycji, ale według sygnatury dysku i przesunięcia sektora. Sygnatura dysku jest 32-bitową wartością osadzoną w głównym rekordzie rozruchowym. Skopiowanie pierwszych 446 bajtów sektora 0 spowoduje skopiowanie podpisu dysku.

Jeśli działania klonujące spowodują, że sklonowane partycje dysku będą miały różne adresy sektorów początkowych, to te pierwotne (wysoce prawdopodobne, chyba że użyto klonu całego dysku), klon najprawdopodobniej nie uruchomi się, dopóki nie zostaną zastosowane te środki zaradcze.

Zasadniczo przesunięcia sektorów muszą zostać zaktualizowane, w tym celu należy użyć konsoli odzyskiwania (jest ona dostępna na instalacyjnym dysku DVD systemu Windows 7). Upewnij się, że tylko sklonowany dysk jest podłączony i uruchom komputer z instalacyjnego dysku DVD z systemem Windows 7. Na pierwszym ekranie dokonaj wyboru języka i kliknij „Dalej”. Na następnym ekranie (gdzie wyświetlany jest komunikat „zainstaluj teraz”) naciśnij SHIFT + F10, aby uzyskać wiersz polecenia.

Najpierw potwierdź, że litery dysków są na miejscu i partycje, których dotyczą:

diskpart
list volume
exit

W razie potrzeby ponownie potwierdź aktywną partycję:

diskpart
select disk 0
select part 1
detail part
select part 2
detail part
... and so-on
exit

W systemie BIOS BCD jest przechowywany w pliku, w X:\Boot\BCDktórym Xznajduje się litera dysku aktywnej partycji (dla UEFI znajduje się w partycji systemowej EFI). Zwykle ukryty, można to zobaczyć za pomocą

dir /AH X:\Boot

Można wykonać kopię zapasową w następujący sposób:

bcdedit /export X:\path\to\bcd\backup

i przywrócone

bcdedit /import X:\path\to\bcd\backup

Jeśli dysk ma wiele systemów operacyjnych, może istnieć wiele dysków BCD. Aktywny BCD to ten \Boot\BCDna partycji, który jest oznaczony jako aktywny - aktywna partycja . Aby wyświetlić jego zawartość (w kolejności rosnącej gadatliwości :)

bcdedit
bcdedit /enum
bcdedit /enum ALL
bcdedit /enum ALL /v

Aby naprawić aktywny BCD, ustal litery dysków dla odpowiednich partycji i wykonaj:

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:

lub, aby naprawić kolejny BCD (w „X: \ boot \ bcd” w tych przykładach):

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:

Na przykład mój system, który ma XP i 7 i pokazują XP jako włączony, C:a 7 włączony, D:a aktywna partycja to C:. wtedy aktywny BCD będzie na c:\boot\BCD. Menedżer rozruchu zostanie znaleziony na, C:\bootmgra diagnostyka pamięci będzie na C:\boot\memtest.exe. Wymagane polecenia to:

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:

Dzięki tym zmianom ponowne uruchomienie komputera (naciśnięcie Alt-F4 osiągnie to) i usunięcie DVD pozwoliło na pomyślne uruchomienie systemu.

Dalsza lektura:

(klon całego dysku nie powinien ponosić tych problemów, ponieważ układ partycji na kopii powinien być dokładnie taki sam jak oryginał)

rozgwiazdy
źródło
Zauważ, że bcdbootzapewnia łatwiejszy sposób na odtworzenie wpisu rozruchu, ale nie jestem pewien, czy byłby odpowiedni w scenariuszu podwójnego rozruchu XP / W7.
Harry Johnston,
Uwielbiam twoją odpowiedź, ale czy mógłbyś ją trochę posprzątać? Sądzę, że istnieje wiele dodatkowych informacji (takich jak przykładowe polecenia, gdy masz właściwe polecenie zaraz po, itp.).
Bigbio2002
Cieszę się, że podoba ci się anser, ale nie sądzę, aby zawierało wiele obcych informacji. Mam ogólne wyjaśnienie plus jeden prawdziwy przykład na końcu, który faktycznie pokazuje, jak określić partycje dla każdego wpisu, który należy zmienić. Potrzebowałem całej powyższej wiedzy, aby naprawić mój sklonowany system, więc przedstawiłem go jako pełną odpowiedź, aby przekazać jak najwięcej informacji innym.
starfry
8

Zgodnie z tą nieoficjalną dokumentacją dotyczącą elementów wewnętrznych BCD , partycje w sklepie BCD są faktycznie identyfikowane przez sygnaturę dysku i przesunięcie partycji. Skopiowałeś sygnaturę dysku (bajty MBR 440–443), ale najprawdopodobniej zmieniłeś przesunięcia partycji podczas umieszczania partycji na mniejszym dysku, dlatego BOOTMGR nie mógł już znaleźć tych partycji.

Siergiej Własow
źródło
To interesujące i na pewno wyjaśnia, dlaczego to nie zadziałałoby - przesunięcia partycji zdecydowanie byłyby inne. Dlaczego-och-dlaczego nie jest to bardziej formalnie udokumentowane, nikt nie zgaduje! Czy istnieje zaakceptowany (oficjalny lub nieoficjalny) sposób „naprawy” tego na sklonowanym dysku?
starfry
Przypuszczam, że oficjalnym sposobem jest „uruchomienie z wcześniej przygotowanego dysku naprawy systemu (lub prawdziwego nośnika instalacyjnego, jeśli go masz, a nie nośnika odzyskiwania DOEM) i uruchomienie narzędzia do naprawy systemu podczas uruchamiania ; jeśli to się nie powiedzie, zainstaluj ponownie system operacyjny ”. Nie masz pewności, czy Naprawa podczas uruchamiania odzyska również XP w twoim przypadku.
Siergiej Własow
@starfry Istnieje wiele edytorów BCD, w tym wbudowany jeden z wiersza poleceń ( bcdedit). Sam faworyzuję edytor Visual BCD. Jeśli możesz dostać się do środowiska Windows, Visual BCD ułatwia ustawienie urządzenia rozruchowego. Możesz zrobić to samo z rozruchowego dysku DVD, otwierając wiersz polecenia (myślę, że to F11 lub coś takiego) i używając go bcdedit. Odradzam naprawę systemu, jeśli masz ochotę ręcznie go naprawić, ponieważ wcześniej miałem naprawę systemu usuwania środowiska odzyskiwania na dysku.
Bob
Dzięki sergey i @bob. Zaakceptowałem tę odpowiedź, ponieważ pozwoliło mi to w pełni zrozumieć, co się dzieje. Udokumentowałem to, co teraz wiem, w osobnej odpowiedzi.
starfry
przepraszam za moją ignorancję, ale jeśli @starfry jest bajtem kopiującym bajty na sda (nie na sda1 na partycji), ale na sda na cały dysk, to dlaczego przesunięcia partycji miałyby być inne?
barlop