Czy można uruchomić system Windows 8.1 bez własnego menedżera rozruchu?

10

Próbowałem wymyślić łatwiejszy sposób instalowania podwójnego uruchamiania systemu Windows i Linux na moim laptopie, niekoniecznie w tej kolejności. Na ogół musimy najpierw zainstalować system Windows, a następnie zainstalować system Linux i umożliwić GRUB-owi obsługę systemu Windows.

Więc staram się znaleźć sposób na ominięcie tego nieznośnego procesu instalacji (Windows) i po prostu użyć obrazu, aby bezpośrednio skopiować na mój dysk. Pozwoliłoby mi to również zachować mojego menedżera rozruchu (GRUB). (nie że nie mogę go później przywrócić, ale polityka firmy Microsoft polega na monopolizacji, w tym przypadku zaprzeczając istnieniu innych menedżerów rozruchu w systemie).

Najpierw uzyskałem legalną kopię systemu Windows 8.1, a następnie zainstalowałem ją na maszynie wirtualnej za pomocą VirtualBox. Następnie utworzyłem partycję NTFS na dysku twardym z partycjami GPT i skopiowałem zawartość partycji Windows z obrazu .vdi na nowo utworzoną partycję.

Oczywiście to jeszcze nie działa. Nie wiem jak zastąpić bootmgr. To daje

File: \Boot\BCD
Status: 0xc000000e
Info: The Boot Configuration Data for your PC is missing or contains errors.

ponieważ nie może znaleźć tego pliku z innej partycji, która jest używana do uruchamiania, odzyskiwania systemu itp.

Teraz przeczytałem, że bootmgr ostatecznie uruchamia program winload.exe, aby uruchomić system Windows. Nie mam pojęcia, co dalej robić.

Uważam, że powinien działać teoretycznie, ponieważ mam wszystkie pliki wymagane do uruchomienia systemu Windows. Uważam też, że nie powinienem być jedynym, który o tym pomyślał, dlatego może mi brakować czegoś bardzo podstawowego. Może to już zrobione?

Nie mam pojęcia, jak działa uruchamianie. Zrozumiałem, że kiedy uruchamiasz podwójnie system Windows i Linux, łączysz program ładujący Windows z Linuksem. Staram się w jakiś sposób pozbyć się bootloadera Windows.

EDYTOWAĆ

Patrzyłem na pliki binarne bootmgri \Boot\BCD. bootmgrodczytuje plik BCD i wyświetla listę opcji, spośród których możesz wybrać rozruch.

Informacje takie jak wykonanie winload.exeznajdują się w pliku BCD. Teraz myślę, że bootmgrsam jest wykonywany przez syslinux przy użyciu chain.c32modułu. To, co próbuję zrobić, to jakoś uruchomić bootloader systemu Windows, tj. winload.exeBezpośrednio z syslinux (jeśli to możliwe), lub zmodyfikować bootmgrtak, aby uruchamiał się winload.exesam (którego ścieżka będzie bezpośrednio w bootmgrpliku wykonywalnym) bez szukania BCD lub czegokolwiek innego.

Hibernacja (która wymaga innej procedury) nie ma dla mnie znaczenia na tym etapie.

Edytuj swoje pytanie, aby poinformować nas o rodzaju oprogramowania układowego i (jeśli EFI), czy włączyłeś moduł wsparcia zgodności w ustawieniach oprogramowania układowego

Moje oprogramowanie to EFI (z włączonym CSM) i zwykle uruchamiam Arch Arch przy użyciu GRUB-a. Odkryłem, że bootmgrdziała System32\winload.exena starszych systemach i System32\winload.efina EFI.

Mam 0.0pomysł na to, co robić stąd. Przez ostatnie 10 dni próbowałem wprowadzić zmiany w BCD i myślę, że wkrótce osiągnę sukces. Ale to nie ma znaczenia, ponieważ tak naprawdę chcę to całkowicie ominąć Menedżera rozruchu systemu Windows.

Jeśli masz jakiś pomysł, czy istnieje sposób na wykonanie tego winload.efiz powłoki EFI (tylko zgadnij), lub jakiejś innej modyfikacji GRUB-a, aby uruchomił Windows w trybie EFI bez modułu ładującego.

Wszelkie porady są mile widziane.

Uzupełnienie

Następujące posty na forum mogą dostarczyć użytecznych informacji:

http://reboot.pro/topic/19371-chainload-directly-to-winloadexe/

1.

Grub4dos może teraz ładować program ładujący (np. NTLDR lub BOOTMGR), ponieważ może działać jako zamiennik kodu zawartego w „normalnym” sektorze rozruchowym (tj. Około 300 bajtów kodu maszynowego).

Ten kod po prostu ustawia kilka parametrów, a następnie wywołuje moduł ładujący.

Nawet to (było) wcale nie było łatwe do zrozumienia i powielenia z innym kodem.

Program ładujący systemu NT, taki jak BOOTMGR, ma mniej więcej w jednym .exe system operacyjny „w trybie rzeczywistym” (nie do końca w przeciwieństwie do DOS) oraz narzędzia / narzędzia do analizowania zarówno zwykłego tekstu, jak i gałęzi rejestru, nie można tego ponownie łatwo napisane od podstaw.

Dobrzy ludzie @ReactOS pracują nad napisaniem FREELDR (który ma być zamiennikiem znacznie prostszego NTLDR) od YEARS (i wierzcie mi, że wśród programistów ReactOS są naprawdę dobrzy i dobrzy w tym chłopaki).

To wydaje się (ale nie jest to udokumentowane wyraźnie), że udało im się uruchomić doświadczalnie Server 2003 z NTLDR.

2)

Dzięki wprowadzeniu obsługi (U) EFI, BootMgr pomaga wyodrębnić różnicę między BIOS a (U) EFI. Na przykład tutaj są dwie sekwencje:

BIOS (PCAT) -> BootMgr { BootMgr stub -> embedded BootMgr.exe } -> WinLoad.exe -> Windows
64-bit (U)EFI -> BootMgFw.efi -> BootMgr.efi -> WinLoad.efi -> Windows

WinLoad oczekuje obecności określonego środowiska (w tym API). Zajmuje się tym BootMgr, więc [prawie] ten sam program WinLoad będzie działał w każdym środowisku.

W rzeczywistości (U) EFI definiuje metodę przechowywania i pobierania parametrów rozruchowych, więc BCD BootMgr obejmuje ten sam cel, niezależnie od BIOS / (U) EFI.

Ale poza różnicami BIOS i (U) EFI, BootMgr pozwala dokonać „wyboru rozruchu”, podczas gdy WinLoad uruchamia określony system operacyjny, który wie, jak się uruchomić.

W zależności od tego, jakie środowisko oczekuje WinLoad, może być możliwe bezpośrednie wywołanie WinLoad. Wimboot Michaela Browna wywołuje bezpośrednio BootMgr PE [1], aby mógł bezpośrednio wywołać WinLoad, z tym wyjątkiem, że WinLoad prawdopodobnie chce więcej środowiska. Możesz spróbować!

[1] Nie mylić z BootMgr, który mogą wywoływać GRUB4DOS i Syslinux 'chain.c32. Ten program BootMgr zawiera kod pośredniczący, który wie, jak wywołać osadzony program BootMgr PE.

osolmaz
źródło
1
Nie podałeś jeszcze wystarczających informacji. Edytuj swoje pytanie, aby poinformować użytkowników, czy to urządzenie ma oprogramowanie układowe EFI, czy stare oprogramowanie typu PC / AT. W tej chwili mówisz o programach ładujących MBR na dyskach partycjonowanych EFI, co jest ( chyba że używasz jednego z moich programów lub H. Petera Anvina) nonsensem i prawdopodobnie nie jest to sposób, w jaki ładuje się maszyna .
JdeBP,
Zasady, które
opisujesz,
@JdeBP Masz rację. W pewnym momencie korzystałem z obu. Użyłem syslinux z metodą pc \ at. Następnie zainstalowałem GRUB na partycji EFI. Więc mój laptop obsługuje oba, ale za każdym razem miałem taki sam wynik. W międzyczasie postaram się poinformować. Z drugiej strony, czy rozumiesz, co próbuję osiągnąć? Zapominając o tym, co opisałem wcześniej, może możesz dać mi radę, czy jest to wykonalne, czy nie.
osolmaz,
Nie prosiłem o typ oprogramowania bezczynnie. To niezbędny punkt odniesienia, który musisz podać. Bez tego ludzie nie mogą nawet rozpocząć właściwej odpowiedzi. Edytuj swoje pytanie, aby poinformować nas o rodzaju oprogramowania układowego i (jeśli EFI), czy włączyłeś moduł wsparcia zgodności w setupnarzędziu oprogramowania układowego .
JdeBP,
@JdeBP Zredagowałem pytanie.
osolmaz

Odpowiedzi:

5

Aby odpowiedzieć na twoje pierwotne pytanie, nie. Nie można załadować systemu Windows bez przechodzenia przez jego własny program ładujący (w przypadku instalacji UEFI bootmgfw.efi). Wynika to z faktu, że system Windows oczekuje, że bootmanager tam będzie ORAZ wywołania winload.efi. Jeśli tak się nie stanie, system Windows ulegnie awarii do momentu rozwiązania problemu. Jest wiele przyczyn tego (praktyczne i ignoranckie). Wynika to głównie z faktu, że Microsoft napisał bootmanagera do obsługi wszystkich rzeczy (ładowanie systemu operacyjnego, ładowanie środowiska odzyskiwania, środowisko pseudo pre-os itp.). Jedynym sposobem na osiągnięcie jakiegokolwiek pozoru rozsądku jest łańcuchowe obciążenie za pomocą Grub-efi.

ChrisR.
źródło
Zanim zaakceptuję to jako odpowiedź, muszę zapytać: czy to zadanie byłoby żmudnie trudne do zrealizowania, głównie ze względu na ilość hakowania na niskim poziomie wymaganą do oszukiwania dowolnego programu zaangażowanego w proces; oszustwem jest to, że Windows nadal uważa, że ​​został uruchomiony przy użyciu własnego bootmanagera, podczas gdy w rzeczywistości było to coś innego ... I domyślam się, że każda wersja Windows wymagałaby osobnego wysiłku. Ale to nie czyni zadania niemożliwym, po prostu bardzo trudne, prawda?
osolmaz
3
Nie powiedziałbym, że jest to całkowicie niemożliwe (w programowaniu), ale musiałbyś przerobić wywołania wywoływane przez bootmgfw.efi w systemie operacyjnym Windows. Ilość hakowania niskiego poziomu związana z koniecznością odtworzenia wywołań protokołu rozruchu niskiego poziomu do modułu ładującego system operacyjny jest zbyt droga w stosunku do czasu. Będziesz musiał nie tylko oszukać Windows, aby uwierzył, że bootmgfw.efi tam był, ale także, że BCD istnieje i że został stworzony przez własne narzędzia i tak dalej.
ChrisR.
2

Musisz dodać moduł ładujący EFI systemu Windows do listy opcji uruchamiania w oprogramowaniu układowym UEFI. W ten sposób będziesz mógł wybrać, czy:

  1. GRUB2 powinien zostać załadowany lub
  2. moduł ładujący systemu Windows powinien zostać załadowany

W tym miejscu powinny być również widoczne dodatkowe opcje, takie jak napęd DVD, zewnętrzne dyski twarde lub rozruch sieciowy. Program ładujący UEFI zwykle znajduje się na partycji \EFI( /boot/efi/). Ponieważ właśnie skopiowałeś obraz dysku twardego systemu Windows bez prawidłowej instalacji systemu Windows, partycja EFI bieżącego komputera może nie zawierać odpowiedniego programu ładującego. Dlatego konieczne jest

  1. Skopiuj program ładujący na partycję EFI
  2. Dodaj system Windows jako opcję uruchamiania obok GRUB2

Powinieneś być w stanie wybrać, który system operacyjny ma zostać uruchomiony, po prostu zmieniając kolejność uruchamiania w systemie BIOS. Naciśnięcie przycisku na moim laptopie F12powoduje wyświetlenie menu wyboru programu ładującego.

Do tych kroków użyję efibootmgri wykonam kroki z tego samouczka :

Konieczne będzie skopiowanie odpowiedniego pliku bootmgfw.efina partycję EFI w systemie Linux \EFI\Microsoft\Boot\bootmgfw.efilub w /boot/efi/Microsoft/Boot/bootmgfw.efiprzypadku korzystania z niego:

# mkdir -p /boot/efi/EFI/Microsoft
# cp -r Microsoft /boot/efi/EFI/Microsoft

gdzie Microsoftjest folder zawierający oryginalne pliki EFI dla twojej wersji Windows.

Następnie musisz dodać .efiplik do wpisów rozruchowych UEFI, używając:

# efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\Microsoft\\Boot\\bootmgfw.efi -L "Windows Boot Manager"

gdzie oczywiście musisz zmienić /dev/sdai -p 1wprowadzić poprawne wartości dla twojego urządzenia dyskowego i numeru partycji.

Uwaga: jeśli masz laptopa Lenovo:

Należy również pamiętać, że co najmniej jeden producent (Lenovo) wysyła produkty ze znanym błędem, który powoduje, że system odmawia rozruchu, chyba że nazwa modułu ładującego to „Windows Boot Manager” lub „Red Hat Enterprise Linux”.

Uruchomienie komputera powinno wtedy pokazać coś takiego (jeśli przytrzymasz odpowiednie klawisze podczas procesu uruchamiania):

Windows Boot Manager
ubuntu
USB CD
USB FDD
ATAPI CD
ATA HDD2

(etc.)

i bcdeditw systemie Windows pokazuje to:

C:\WINDOWS\system32>bcdedit /enum firmware

Firmware Boot Manager
---------------------
identifier              {fwbootmgr}
displayorder            {bootmgr}
                        {bb086763-b111-11e2-bf8e-806e6f6e6963}
                        {8e7fb978-8bc8-11e2-bf2f-806e6f6e6963}
timeout                 0

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
integrityservices       Enable
default                 {current}
resumeobject            {ec215a09-8bc4-11e2-bf2b-0024d7eb75a4}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 2

(...)

Firmware Application (101fffff)
-------------------------------
identifier              {bb086763-b111-11e2-bf8e-806e6f6e6963}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\ubuntu\grubx64.efi
description             ubuntu
jmiserez
źródło
1
Bardzo ładnie wyjaśnione, dziękuję. Kilka dni temu udało mi się zrobić to samo, ale nadal używam osobnej partycji dla menedżera rozruchu EFI systemu Windows i poprzez ładowanie łańcuchowe za pomocą GRUB. Teraz dowiedziałem się, że mogę również użyć mojego oryginalnego EPS. Poza tym zamiast bcdedit użyłem hivex do naprawy BCD; Zamierzam napisać zbiór bezpłatnych narzędzi, aby móc manipulować plikami BCD w systemie Linux. Ale staram się osiągnąć coś innego. Jeśli bootmgfw.efi w jakiś sposób wykonuje plik winload.efi, dlaczego nie miałbym możliwości uruchomienia pliku winload.efi bezpośrednio z GRUB?
osolmaz
Rozumiem. Więc chcesz pominąć ładowanie Menedżera rozruchu systemu Windows (bootmgfw.efi) i załadować moduł ładujący systemu Windows (winload.efi) bezpośrednio, czytając BCD System Store? (Przechodząc od definicji tutaj .) To ciekawe, nigdy nie słyszałem, żeby ktoś to robił. Jaka jest twoja motywacja, dlaczego konieczne jest bezpośrednie ładowanie winload.efi? Czy masz również pełną kopię \EFI\Boot\Microsoftfolderu do przetestowania (jest tam kilka plików)?
jmiserez
Cóż, gdybym to osiągnął, nie musiałbym nawet czytać BCD, mógłbym po prostu dodać wpis w GRUB dla partycji. (Wykluczam tutaj hibernację i odzyskiwanie systemu). Moją motywacją jest to, że znacznie łatwiej byłoby zainstalować system Windows bez obawy, że będziesz musiał go naprawić później. Przydatny do sysadminów, instalacji wsadowych i tak dalej (i dla mnie ^^). Jeśli chodzi o to, dlaczego bezpośrednie ładowanie pliku winload.efi: radzenie sobie z zamkniętymi plikami rejestru Windows (binarnie) jest o wiele bardziej nużące niż zajmowanie się plikami konfiguracyjnymi zwykłego tekstu, takimi jak GRUB. Po prostu łatwiej jest wyeliminować środkowego człowieka.
osolmaz
1
Rozumiem, co masz na myśli, tak, byłoby to bardzo przydatne. Zastanawiam się, czy 1) są jakieś zmienne, które bootmgfw.efi przekazuje do winload.efi po uruchomieniu, oraz 2) czy może występować problem z bezpiecznym uruchomieniem i potrzebnym łańcuchem certyfikatów. Czy wiesz, co tak inherit {bootloadersettings}naprawdę oznacza sklep BCD?
jmiserez
1
3) Ponieważ użyłem hivex, mogę zgadnąć, który obiekt odpowiada. W ulu znajduje się obiekt ustawień „globalnych”, a każdy inny obiekt ma do niego odniesienie. Mogę powiedzieć, że tylko dwa obiekty są wystarczające do uruchomienia systemu Windows: 1: obiekt Windows Boot Manager ze stałym identyfikatorem użytkownika {9dea862c-5cdd-4e70-acc1-f32b344d4795} 2: obiekt zawierający informacje o partycji i ścieżkę bootloadera dla faktycznego katalogu głównego systemu Windows. Najtrudniejsze było zrozumienie struktury danych binarnych, która określa partycję. Zostało to w większości wykonane przez wodny: bitbucket.org/wodny/libbcd/src .
osolmaz
0

Możesz wykonywać instalacje w dowolnej kolejności, np. Instalując GNU / Linux, a następnie Windows lub vice-verse.

Po zainstalowaniu wszystkich systemów operacyjnych wykonaj następujące czynności.

  1. Pobierz „Boot Repair Disk” stąd. http://sourceforge.net/projects/boot-repair-cd/

  2. Utwórz bootowalny dysk USB na żywo z niego (instrukcje na pendrivelinux.com)

  3. Lub wypal plik ISO na płycie CD.

  4. Uruchom przez to i postępuj zgodnie z instrukcjami wyświetlanymi na ekranie. Będziesz miał ponownie zainstalowany GRUB zawierający wszystkie zainstalowane systemy operacyjne.

Wszystkiego najlepszego.

Raju Devidas
źródło
1
Jestem tego świadomy. Chcę czegoś innego. Pytam, czy system Windows można uruchomić bezpośrednio bez ładowania łańcucha.
osolmaz