Jak sprawić, by bios UEFI uruchamiał GRUB, a nie Windows?

16

TL; DR, dodane w edycji:

Pytanie brzmi:

Jak sprawić, aby BIOS wolał GRUBa niż Windows Boot Manager na tej samej partycji rozruchowej UEFI?

Problem nie dotyczy Grub; Grub robi właściwą rzecz, kiedy uruchamia go BIOS. Problem nie polega na tym, że „dysk nie jest bootowalny”, ponieważ zarówno bootstrap UEFI systemu Windows, jak i bootstrap Grub UEFI są uruchamialne. Problem polega na tym, z którego bootowania UEFI BIOS wybiera rozruch.

Konfiguruję nowy komputer i chcę, aby domyślnie uruchamiał się w systemie Ubuntu, ale mam opcję wyboru systemu Windows podczas uruchamiania. Jest to szczególnie ważne, gdy moc gaśnie i wraca; Nie będzie mnie nawet w domu.

Zacząłem od zainstalowania Ubuntu 17.04 na moim wewnętrznym dysku NVMe, podzielonym na partycje za pomocą GPT, aby użyć połowy dysku i osobnej partycji rozruchowej UEFI. GRUB uruchamia się tak dobrze, a po uruchomieniu widzę menu rozruchowe GRUB, w którym mogę wybrać wszystkie elementy, o których wie GRUB.

Następnie zainstalowałem system Windows 10 Pro z ostatnio pobranego pliku ISO. Zainstalował Windows Boot Manager na tej samej partycji UEFI i pozostawił Ubuntu nienaruszony (świetnie!), Co dobrze wpasowuje się w Windows 10.

Jednak zrobił „coś”, co powoduje, że oprogramowanie układowe UEFI natychmiast wybiera Menedżera rozruchu systemu Windows, a nie GRUB po włączeniu. Jedynym sposobem na uruchomienie systemu Linux jest teraz użycie menedżera rozruchu systemu BIOS (F11 w moim systemie BIOS) i ręczne wybranie modułu ładującego GRUB. UEFI BIOS wie, że na partycji UEFI istnieje wiele instalacji rozruchowych, ponieważ mogę wybierać między nimi w menedżerze rozruchu. Jednak gdy jestem w menu ustawień w BIOS UEFI, pozwala mi to po prostu wybrać „UEFI uruchom mój dysk wewnętrzny” w wyborze priorytetu rozruchu - nie pozwala mi wybrać, który konkretny moduł ładujący na tej partycji ma użyć . I domyślnie wybiera Windows, a nie GRUB.

Witryny internetowe (i ta strona) sugerują, że starym sposobem naprawienia tego jest uruchomienie update-grub(aby GRUB rozpoznał system Windows), a następnie grub-install(aby ponownie umieścić GRUB na urządzeniu). Zrobiłem to, ale niestety nadal zachowuje się tak, jak opisane powyżej, w którym BIOS domyślnie wybiera Menedżera rozruchu systemu Windows. ( update-grubodnajduje instalację Menedżera rozruchu systemu Windows i dodaje ją do menu, a ten element menu działa, gdy ręcznie wybieram partycję GRUB w menedżerze rozruchu UEFI).

Co mogę zrobić, aby GRUB był „domyślnym” uruchomieniem na mojej partycji rozruchowej UEFI?

Korzystanie z płyty głównej MSI X399 Carbon.

Druga edycja: Ponieważ poprawna odpowiedź ostatecznie pojawia się w komentarzu do odpowiedzi, powtórzę ją tutaj:

"BCDEDIT" in an admin shell on Windows is the working solution. The others don't work.
Jon Watte
źródło
Musisz tylko zainstalować system Windows, a następnie Linux. Nie na odwrót. Mam dokładnie odwrotny problem. Kiedy kończy się zasilanie, a potem wraca, mój komputer wpada w gruba i uruchamia się w systemie Linux, smh. Jedną rzeczą jest to, że każdy system mam na swoim dysku. W kolejności uruchamiania wybieram dysk z Linuksem i Grubem.
dmb
To zadziwiające, jak wiele osób sugeruje rzeczy, które są już sugerowane przez inne osoby, a już powiedziałem, że nie działały ani w moim oryginalnym poście, ani w komentarzach poniżej. Poprawnym rozwiązaniem było „BCDEDIT” w powłoce administracyjnej systemu Windows. Żadna z pozostałych sugestii tego nie rozwiązała (i większość z nich już próbowałem, zgodnie z moim pytaniem)
Jon Watte

Odpowiedzi:

17

Można to zrobić na kilka różnych sposobów, w tym:

  • Narzędzie instalacyjne EFI - większość plików EFI zapewnia narzędzia konfiguracyjne, do których można uzyskać dostęp, naciskając specjalny klawisz w czasie uruchamiania (zwykle Esc, Del lub klawisz funkcyjny; ale jaki to klucz różni się w zależności od systemu). Te często, ale nie zawsze, umożliwiają dostosowanie kolejności rozruchu. Jeśli oprogramowanie układowe zapewnia taką opcję, powinieneś być w stanie użyć go, aby przenieść GRUB na najwyższą pozycję. (Prawdopodobnie zostanie wywołany GRUB ubuntu, biorąc pod uwagę, że zainstalowałeś go z tej dystrybucji).
  • Powłoka EFI - Możesz użyć bcfgpolecenia w powłoce EFI w wersji 2, zgodnie z opisem na wiki Arch Linux. Jeśli twój system nie jest jeszcze skonfigurowany z łatwo dostępną powłoką, to podejście będzie prawdopodobnie trudniejsze w użyciu niż inne, ale jest niezależne od systemu operacyjnego.
  • EasyUEFI - program EasyUEFI innej firmy Windows może być najłatwiejszym sposobem na robienie tego, co chcesz. Możesz kliknąć ubuntupozycję na liście EasyUEFI i przenieść ją na górę.
  • bcdedit- Polecenie Windows bcdeditmoże zmienić kolejność uruchamiania opartą na NVRAM. W szczególności otwarcie okna wiersza polecenia administratora i pisanie bcdedit /set "{bootmgr}" path \EFI\ubuntu\shimx64.efi(opcjonalnie po nim, bcdedit /set "{bootmgr}" description "ubuntu"aby opis był rozsądny) powinno załatwić sprawę.
  • efibootmgr- To narzędzie Linux może dostosować kolejność rozruchu. Rozpocznij od sudo efibootmgrsamodzielnego pisania , aby wyświetlić opcje. Zanotuj liczbę ( Boot####) związaną z ubuntuwpisem i bieżącą kolejność rozruchu (w BootOrderwierszu). Następnie możesz wprowadzić nową kolejność rozruchu z ubuntuwpisem u góry, korzystając z -oopcji. Na przykład, jeśli bieżąca kolejność rozruchu to 0000 ubuntu0003 0007,0004 i 0007, należy wpisać sudo efibootmgr -o 0007,0000,0003,0004kolejność rozruchu.
  • refind-mkdefault- Ten skrypt zawiera rEFInd i jest sposobem na zautomatyzowanie poprzedniej procedury. Jeśli nie używasz rEFInd, musisz pobrać skrypt tutaj i ustawić go jako wykonywalny ( chmod a+x refind-mkdefault). Następnie uruchom go jako sudo ./refind-mkdefault -L ubuntulub, sudo ./refind-mkdefault -L shimx64aby GRUB był domyślnym wpisem rozruchowym.

Z każdą z tych opcji wiążą się potencjalne problemy i komplikacje. Najbardziej prawdopodobnym czynnikiem komplikującym jest to, że istnieją stare lub alternatywne ubuntuwpisy rozruchu. Ważne jest, aby przenieść prawidłową pozycję do najwyższej pozycji w kolejności rozruchu; jeśli przesuniesz niewłaściwy, skończysz albo bez zmian w zachowaniu, albo z niefunkcjonalnym uruchomieniem, co utrudniłoby uruchomienie. Jeśli używasz efibootmgr, BootCurrentlinia może pomóc ci określić, którą opcję powinieneś ustawić jako domyślną.

Istnieją inne sposoby, aby to zrobić, które są przesadne. Ponowna instalacja GRUB-a (za pośrednictwem Boot Repair lub grub-install) powinna załatwić sprawę, na przykład. Podejścia te wiążą się jednak z ryzykiem uszkodzenia znanej konfiguracji GRUB.

Zauważ też, że niektóre EFI są błędne i istnieją inne problemy, które mogą utrudnić niezawodne uruchomienie GRUB-a. Jeśli napotkasz takie problemy, możesz sprawdzić następujące pytania i odpowiedzi w AskUbuntu:

Rod Smith
źródło
Jak opisałem w pytaniu, narzędzie konfiguracji EFI nie pozwala mi wybrać domyślnie Ubuntu, chociaż pozwala mi to zrobić w menu ręcznego uruchamiania. Pozwoli mi to tylko wybrać dysk, a następnie uruchomi z niego system Windows. efibootmgr próbował zmienić kolejność rozruchu, ale BIOS nie zwracał uwagi na restart. EasyBCD nie działał - nie pozwalał mi dodawać kolejnych pozycji menu. Jednak „BCDEDIT” w powłoce administracyjnej faktycznie działał, więc dziękuję za tę opcję!
Jon Watte,
Pamiętaj, że EasyBCD i EasyUEFI to dwa różne programy tego samego dostawcy. Niestety wydaje się, że darmowa wersja EasyUEFI nie jest już dostępna - oferowane są tylko wersje próbne. Jednak BOOTICE to kolejny darmowy program, który może edytować ustawienia rozruchowe UEFI: oryginalna chińska strona , anglojęzyczna strona z opisem i zrzutami ekranu .
telcoM
Używanie sudo efibootmgr -n 0002jest znacznie lepsze niż modyfikowanie bieżącego porządku SO. Zmienia się BootNext: 0001i wychodzi BootCurrent: 0002na następny raz, pozostawiając bieżące wpisy GRUB-a nietknięte. Po prostu dodaj bash chmod +xi zawiń to polecenie przy ponownym uruchomieniu.
erm3nda
1

Miałem dokładnie ten problem w ciągu ostatnich kilku tygodni. Zorientowałem się, korzystając z tych opcji. Przed wykonaniem którejkolwiek z tych czynności zalecam przejście do BIOS / UEFI i sprawdzenie kolejności rozruchu oraz upewnienie się, gdzie najpierw instalowany jest grub.

Więc widzę, że masz dwie opcje.

opcja 1

Polecam wam najpierw instalację systemu Windows 10 . Następnie zainstaluj ubuntu. Ale wiem, że to trochę tabu, mówiąc po prostu „zainstaluj ponownie oprogramowanie”, więc zaoferuję również alternatywę.

Opcja 2

Przy obecnej konfiguracji zalecam uruchomienie komputera z dyskiem CD / flash Live Ubuntu oraz instalację i uruchomienie boot-repair. Kliknij opcję „Zalecana naprawa” i postępuj zgodnie z podanymi instrukcjami. Przejrzyj go uważnie i przeczytaj wszystkie polecenia przed wykonaniem. Spowoduje to zastąpienie bieżącej instalacji gruba nową, która, mam nadzieję, powinna to naprawić.

taterbotz
źródło
Thansk za sugestie, ale już je wypróbowałem. Przy pierwszej instalacji zainstalowałem najpierw system Windows 10, potem Ubuntu 17.04, a następnie Boot Repair. Nadal domyślnie jest system Windows, a następnie najpierw wyczyściłem i ponownie zainstalowałem Ubuntu, co prowadzi mnie tam, gdzie jestem teraz.
Jon Watte,
Zakładam, że próbowałeś zmienić kolejność rozruchu w UEFI, prawda?
taterbotz
Tak, jak mówię: „kiedy jestem w menu ustawień w BIOS UEFI, pozwala mi to po prostu wybrać„ UEFI uruchom mój dysk wewnętrzny ”w wyborze priorytetu rozruchu - nie pozwala mi wybrać, który konkretny moduł ładujący rozruchu na tej partycji, aby użyć ”
Jon Watte
1

Widzę kilka rozwiązań:

  1. Edytuj swój UEFI, aby dostosować wartość domyślną. W systemie Linux możesz użyć efibootmgr. W systemie Windows nie jestem pewien, ale myślę, że możesz uruchomić opcję odzyskiwania, która pozwala skonfigurować UEFI. Lub może wolisz zainstalować coś takiego jak rEFInd.
  2. Zmień nazwę folderu na partycji EFI. Myślę, że woli lub wraca do folderu o nazwie boot.
  3. Wystarczy użyć modułu ładującego Windows, myślę, że można go skonfigurować do uruchamiania innych systemów operacyjnych.
jiggunjer
źródło
Mógłbym edytować kolejność rozruchu za pomocą efibootmgr, ale BIOS ignoruje ją i i tak uruchamia Windows. Zmiana nazwy folderu rozruchowego (lub nawet kopiowanie gruba do „boot”) nie działa, dopóki nie usunę Microsoft. Program ładujący system Windows nie uruchamia się system operacyjny Windows nie-es (przynajmniej nie te niepodpisane.)
Jon Watte
@JonWatte Może uefi bootloader jest inny, pamiętam uruchamianie ubuntu z bootloadera Windows 7 na 32-bitowej maszynie bios. Może nadal może załadować łańcuch Grub2? Ponieważ efibootmgrnie działa, wiem, że nie kupię MSI.
jiggunjer
Tak, ta płyta główna MSI ma również inne problemy i wraca do Amazon w zamian za Gigabyte.
Jon Watte,
0

Właśnie wymieniłem płytę główną w laptopie i grub zniknął całkowicie.

Wiem, że jest to oznaczone jako naprawione, ale pomyślałem, że może ci się przydać.

Aby grub pojawił się jako opcja rozruchu. Musiałem dodać EFI do bios.

Poszedłem do „opcji listy rozruchowej” w moim biosie. Kliknął „Dodaj opcję rozruchu” (jestem świadomy, że jest to specyficzne dla systemu BIOS). To dało mi opcję nazwy pliku, która w moim przypadku była \EFI\ubuntu\grubx64.efii nadała mu nazwęgrub

Następnie przesunąłem grubwpis na początek sekwencji rozruchowej, a teraz pokazuje się jako wpis domyślny.

To znaczy mówię, że może być konieczne zlokalizowanie poprawnego pliku EFI i przeniesienie go na początek sekwencji / kolejności rozruchu.

Wes
źródło
-2

Możliwym rozwiązaniem byłoby ręczne edytowanie pliku / etc / default / grub.

sudo vim /etc/default/grub

Domyślny wpis jest określony przez GRUB_DEFAULT=ustawienie w / etc / default / grub. Pierwsza „pozycja menu” ma wartość „0”. Jeśli Ubuntu jest drugim wpisem na ekranie rozruchowym, ustaw GRUB_DEFAULT = 1.

Następnie musisz uruchomić polecenie, aby zaktualizować grub config: update-grub

Inną opcją byłoby instalowanie grub-customizera i użycie jego GUI do skonfigurowania priorytetu rozruchu.

Mr. Raspberry
źródło
Problem nie dotyczy Grub. Jak powiedziałem w poście, jeśli mogę sprawić, aby BIOS wybrał opcję uruchamiania Grub UEFI, to dostanę menu uruchamiania Grub, które pozwala mi wybrać system Windows lub Ubuntu. To jest menu, które domyślnie chcę. Niestety BIOS domyślnie wybiera Menedżera rozruchu systemu Windows.
Jon Watte,
Jak powiedziałem, możesz to naprawić w kolejności uruchamiania gruba, konfigurując Ubuntu jako pierwszy system do uruchomienia. Użyj grub-customizer, aby to zrobić za pomocą GUI. linuxandubuntu.com/home/…
Mr. Raspberry
Ponownie, Grub nawet nie uruchamia się przez BIOS. Kolejność rozruchu grub nie ma znaczenia. GRUB_DEFAULT nie ma znaczenia. To nie jest problem.
Jon Watte,