Menedżer rozruchu systemu Windows Chainload z innego?


3

Czy można użyć Menedżera rozruchu systemu Windows do załadowania innego Menedżera rozruchu systemu Windows?

Na przykład (jak) mogę użyć menedżera rozruchu, C:\bootmgrktóry czyta, C:\boot\BCDaby załadować inny menedżer rozruchowy, D:\bootmgrktóry używa D:\boot\BCD?


Jaki problem starasz się dokładnie rozwiązać?
Ramhound

@Ramhound: Mam UEFI i starszy moduł ładujący BIOS (zainstalowany na różnych dyskach - jeden MBR, jeden GPT) i chcę, aby korzystały z tej samej bazy danych konfiguracji rozruchu.
Mehrdad,

czy wykluczyłeś możliwość, że Twoja płyta główna będzie mogła uruchomić się na jednym z nich, po prostu zmieniając kolejność uruchamiania?
Ramhound,

@Ramhound: Huh? Staram się unikać posiadania dwóch sklepów BCD, jeśli to możliwe - już mogę dobrze przełączać się między systemami operacyjnymi.
Mehrdad,

Odpowiedzi:


1

BOOTMGR wyszuka gałąź \boot\bcdna partycji, którą uważa za aktywną partycję rozruchową (zazwyczaj aktywną partycję na dysku 0). Na komputerach EFI wersja EFI bootmgr ładuje się \boot\bcdz ESP (EFI System Partition), który zawsze ma postać FAT32 i zwykle około 100 MiB lub więcej.

Twoje pytanie jest jednak bardzo mylące. Ty mówisz

odczytuje C: \ boot \ BCD, aby załadować inny menedżer rozruchu D: \ bootmgr, który używa D: \ boot \ BCD

Ale powiedz

Co? Staram się unikać dwóch sklepów BCD, jeśli to możliwe

Czy w tym przykładzie, który próbujesz osiągnąć, nie są to dwa różne pliki BCD na dwóch różnych partycjach?

Więc nie jestem pewien, co dokładnie próbujesz zrobić. Jeśli próbujesz sprawić, aby starsza wersja BOOTMGR załadowała tę samą bazę danych BCD, z której korzysta EFI BOOTMGR, tak, byłoby to możliwe. Musisz zmodyfikować emulację bootrecord na dysku (fałszywy MBR, który służy do zatrzymywania komputerów, które nie rozumieją GPT przed ponownym zainicjowaniem dysków i utraty danych), aby wskazać obecność co najmniej dwóch partycji, czyli ESP i Windows partycja, z ESP oznaczonym jako aktywny.

W ten sposób, jeśli BIOS w trybie starszym (lub BIOS, który nie obsługuje UEFI) próbuje uruchomić komputer z dysku GPT ze zmodyfikowanym MBR emulacji, zobaczy partycję ESP jako „zwykłą” partycję rozruchową i wczytaj z niego (za pośrednictwem jego bootsectora, który musisz upewnić się, że został poprawnie napisany za pomocą narzędzia takiego jak bootsectlub bootrec) BOOTMGR, który z kolei odczyta ten sam \boot\bcdna tej samej partycji.


Przepraszam, zdaję sobie sprawę, że mój komentarz był mylący - miałem na myśli to, że nie chcę mieć dwóch sklepów BCD, które mają zduplikowane wpisy (co byłoby inaczej wymagane, jeśli nie mogę wykonać ładowania łańcucha, aby załadować inny sklep BCD ). Dobrze jest mieć dwa osobne sklepy; po prostu nie powinny się pokrywać. Zamiast tego chcę, aby jeden moduł ładujący mógł ładować wpisy drugiego modułu ładującego, aby nie musiałem wymieniać systemu operacyjnego dwa razy (raz w każdym). czy to możliwe?
Mehrdad

1
@ Mehrdad: jest to oszałamiająca i sprzeczna specyfikacja. Każdy bootloader potrzebuje wpisów dla każdego uruchamianego systemu operacyjnego i każdej aplikacji rozruchowej (zazwyczaj inny bootloader). Koniecznie będzie N wpisów w każdym z N programów ładujących, jeśli każdy z nich będzie mógł ładować inne.
kreemoweet

@kreemoweet: co dokładnie jest tutaj „sprzeczne”? Nie ma podstawowego powodu, dla którego każdy moduł ładujący potrzebowałby oddzielnej bazy danych. Być może taki jest obecny stan rzeczy, ale nie ma w tym nic „sprzecznego” lub „oszałamiającego”. Mogę sobie wyobrazić alternatywny system, w którym tak nie byłoby.
Mehrdad


0

Chcesz:

Uruchom C:, zaczynając bootmgrod specjalnie skonfigurowanego BCD w C:\Boot.
Jeden wpis rozruchowy w tym BCD powinien rozpocząć inny, bootmgrna D:\którym ładuje BCD d:\Bootróżne wpisy rozruchowe.

Poprawny?


Aby to zrobić:

Uzyskaj obraz sektora rozruchowego D:\

  1. Uruchom Linuksa, dd if=/dev/sda2 of=bootsec_D.img bs=512 Count=1^
  2. mount /dev/sda2 /media/sda2
  3. cp bootsec_D.img /media/sda2
  4. umount /dev/sda2

To bootsec_D.imgmoże być następnie chainloaded z bootmgrzwykły sposób.
Na przykład z Visual_BCD dodającym nowy moduł ładujący bootsector. Skonfiguruj poprawnie partycję i ścieżkę.


Mam nadzieję, że pomogło.

Działa na moim komputerze, mam nadzieję, że również u ciebie.


Autor powiedział już, że nie chce używać takiego rozwiązania.
Ramhound

0

Chcesz, aby pierwszy bootmgr załadował dodatkowy bootmgr zamiast ładować jeden z typowych programów ładujących system operacyjny

„jeśli to działa”, należy dodać następujące wpisy do pierwszego C: \ boot \ BCD

bcdedit /create /d "Chainloaded Bootmgr" /application BOOTSECTOR
bcdedit /set {ID} device partition=d:
bcdedit /set {ID}  path \bootmgr
bcdedit /displayorder {ID} /addlast

powinno to utworzyć pozycję menu „Chainloaded Bootmgr”; po uruchomieniu powinien załadować drugi bootmgr z D:


Autor powiedział już, że nie chce korzystać z tego rozwiązania.
Ramhound

@Ramhound, gdzie to powiedział? te 2 sklepy nie pokrywają się i to jest dokładnie to, czego chce autor.
Pat
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.