Użyję poniższego terminu BIOS , odnosząc się do pojęć, które są takie same zarówno dla nowszych systemów UEFI, jak i tradycyjnych systemów BIOS, ponieważ chociaż jest to pytanie zorientowane na UEFI, lepiej mówić o „BIOS”, np. W dokumentacji GRUB , a „BIOS / UEFI” jest zbyt niezręczny. GRUB (właściwie GRUB 2 - jest to często używane niejednoznacznie) to program ładujący instalowany przez Linuksa i używany do podwójnego uruchamiania systemu Windows.
Najpierw słowo o kolejności dysków i kolejności rozruchu. Kolejność dysków odnosi się do kolejności, w której dyski są fizycznie podłączone do magistrali na płycie głównej (pierwszy dysk, drugi dysk itp.); ta informacja jest zgłaszana przez BIOS. Kolejność rozruchuodnosi się do sekwencji, w której BIOS sprawdza dysk rozruchowy. To niekoniecznie jest to samo, co kolejność dysków i zwykle można je skonfigurować za pomocą ekranu konfiguracji BIOS. Kolejność dysków nie powinna być konfigurowalna ani nie może na nią wpływać kolejność rozruchu, ponieważ byłoby to bardzo nieprzyjazne dla systemu operacyjnego (ale teoretycznie mógłby to zrobić tępy BIOS). Ponadto, jeśli odłączysz pierwszy dysk, drugi dysk prawdopodobnie stanie się pierwszym. Użyjemy identyfikatorów UUID w konfiguracji modułu ładującego, aby uniknąć problemów takich jak ten (robią to również współczesni instalatorzy Linuksa).
Idealnym sposobem na uzyskanie tego, co chcesz, jest instalacja Linuksa na drugim dysku pod względem kolejności dysków, a następnie wybranie go najpierw pod względem kolejności rozruchu za pomocą konfiguracji UEFI. Dodatkową zaletą tego jest to, że możesz następnie użyć kolejności rozruchu BIOS / UEFI, aby wybrać dysk Windows i ominąć grub, jeśli chcesz. Powodem, dla którego zalecam Linuksa na drugim dysku jest to, że GRUB musi „załadować” natywny bootloader Windows, a bootloader Windows zawsze zakłada, że jest on na pierwszym dysku. Istnieje jednak sposób, aby go oszukać, jeśli wolisz lub potrzebujesz go na odwrót.
Mamy nadzieję, że możesz po prostu użyć płyty CD na żywo lub cokolwiek innego i zrobić to za pomocą instalatora GUI. Jednak nie wszystkie instalatory są sobie równe, a jeśli to się zepsuje i pojawią się problemy, takie jak:
Zainstalowałem Linux na pierwszym dysku i teraz nie mogę uruchomić systemu Windows, lub
Zainstalowałem Linuksa na drugim dysku, ale używając pierwszego dysku jako bootloadera, a teraz nic nie mogę uruchomić!
Następnie czytaj dalej. W drugim przypadku powinieneś najpierw spróbować ponownie zainstalować Linuksa na drugim dysku i tym razem upewnij się, że tam właśnie zmierza bootloader. Najłatwiejszym i najbardziej niezawodnym sposobem na to byłoby tymczasowe usunięcie dysku Windows z komputera, ponieważ zakładamy, że nie ma na nim zainstalowanych żadnych dodatkowych elementów, bez względu na kolejność dysków.
Po zainstalowaniu Linuksa i upewnieniu się, że można go uruchomić, podłącz ponownie dysk systemu Windows (jeśli go usunąłeś - i pamiętaj, najlepiej, aby był on najpierw pod względem kolejności dysków, a drugi pod względem kolejności kolejność rozruchu) i przejdź do następnego kroku.
Dostęp do konfiguracji GRUB
Uruchom Linux, otwórz terminal i
> su root
Zostaniesz poproszony o hasło roota. Od tego momentu jesteś superużytkownikiem w tym terminalu (do sprawdzenia, spróbuj whoami
), więc nie rób nic głupiego. Jednak nadal jesteś zwykłym użytkownikiem interfejsu GUI, a ponieważ będziemy edytować plik tekstowy, jeśli wolisz edytor GUI, będziemy musieli tymczasowo zmienić własność tego pliku i katalogu, w którym się znajduje:
> chown -R yourusername /etc/grub.d/
Jeśli pojawi się komunikat „Operacja niedozwolona”, nie su
wykonano poprawnie. Jeśli tak chown: invalid user: ‘yourusername’
, to zbyt dosłownie podjąłeś ostatnie polecenie.
Możesz teraz przejść do przeglądarki /etc/grub.d
plików i poszukać pliku o nazwie 40_custom
. To powinno wyglądać tak:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
Jeśli nie możesz go znaleźć, w terminalu głównym wprowadź następujące polecenia:
> touch /etc/grub.d/40_custom
> chmod 755 /etc/grub.d/40_custom
> chown yourusername /etc/grub.d/40_custom
Otwórz go w edytorze tekstu, skopiuj i wklej powyższą część (zaczynając w / #!/bin/sh
) i przejdź do następnego kroku.
Dodanie opcji rozruchu systemu Windows
Skopiuj i wklej to w edytorze tekstu na końcu pliku:
menuentry "MS Windows" {
insmod part_gpt
insmod search_fs_uuid
insmod ntfs
insmod chain
}
To jest lista modułów, które GRUB będzie musiał załatwić ( ntfs
może być zbędny, ale nie powinien też nic zranić). Zauważ, że jest to niepełny wpis - musimy dodać kilka kluczowych poleceń.
Znalezienie programu rozruchowego drugiego etapu systemu Windows
Twoja instalacja linuksowa prawdopodobnie automatycznie zamontowała partycję Windows i powinieneś być w stanie ją znaleźć w przeglądarce plików. Jeśli nie, wymyśl, jak to zrobić (jeśli nie jesteś pewien, jak to zrobić, zadaj pytanie na tej stronie). Gdy to zrobisz, musimy znać punkt montowania - powinno to być oczywiste w przeglądarce plików, np /media/ASDF23SF23/
. Aby zaoszczędzić trochę pisania, umieścimy to w zmiennej powłoki:
win="/whatever/the/path/is"
Po obu stronach znaku równości nie powinno być spacji. Nie dołączaj tutaj żadnych elementów ścieżki systemu Windows. Powinno to wskazywać na folder najwyższego poziomu na partycji Windows. Teraz:
cd $win
find . -name bootmgfw.efi
Może to potrwać kilka minut, jeśli masz dużą partycję, ale najprawdopodobniej pierwszą rzeczą, jaką wypluje, jest to, czego szukamy; mogą być dalsze odniesienia w systemie plików zawierające długie łańcuchy goobledygook - to nie jest to. Użyj, Ctrl-c
aby zatrzymać wyszukiwanie, gdy zobaczysz coś krótkiego i prostego, takiego jak ./Windows/Boot/EFI/bootmgfw.efi
lub ./EFI/HP/boot/bootmgfw.efi
.
Z wyjątkiem .
początku pamiętaj o tej ścieżce na później; możesz skopiować go do edytora tekstu w pustym wierszu u dołu, ponieważ będziemy go tam używać. Jeśli chcesz teraz powrócić do poprzedniego katalogu, użyj cd -
, chociaż nie ma znaczenia, gdzie jesteś w powłoce od teraz.
Ustawianie właściwych parametrów
GRUB musi być w stanie znaleźć i przekazać proces uruchamiania do drugiego etapu programu ładującego system Windows. Mamy już ścieżkę na partycji Windows, ale potrzebujemy również parametrów, aby powiedzieć GRUB-owi, gdzie jest ta partycja. W twoim systemie powinno być zainstalowane narzędzie o nazwie grub-probe
lub (np. Fedora) grub2-probe
. Wpisz, grub
a następnie naciśnij Tabdwa lub trzy razy; powinieneś zobaczyć listę zawierającą jedną lub drugą.
> grub-probe --target=hints_string $win
Powinieneś zobaczyć ciąg, taki jak:
--hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1
Wróć do edytora tekstu z konfiguracją GRUB i dodaj wiersz po wszystkich insmod
poleceniach (ale przed zamykającym nawias klamrowy), aby wyglądało to tak:
insmod chain
search --fs-uuid --set=root [the complete "hint bios" string]
}
Nie przerywaj tej linii ani nie zezwalaj na to edytorowi tekstu. Może się zawijać na wyświetlaczu - łatwym sposobem na odróżnienie jest ustawienie numeracji linii. Kolejny:
> grub-probe --target=fs_uuid $win
Powinno to zwrócić krótszy ciąg liter, cyfr i możliwych myślników, takich jak „123A456B789X6X” lub „b942fb5c-2573-4222-acc8-bbb883f19043”. Dodaj to na końcu search --fs-uuid
wiersza za ciągiem bios wskazówki, oddzielone spacją.
Następnie, jeśli (i tylko jeśli) system Windows znajduje się na drugim dysku pod względem kolejności dysków , dodaj wiersz po search --fs-uuid
wierszu:
drivemap -s hd0 hd1
To wspomniana wcześniej „sztuczka”. Uwaga: nie gwarantuje się, że będzie działać, ale nie zaszkodzi spróbować.
Wreszcie ostatnia linia powinna brzmieć:
chainloader (${root})[the Windows path to the bootloader]
}
Dla jasności, na przykład:
chainloader (${root})/Windows/Boot/EFI/bootmgfw.efi
Otóż to. Zapisz plik i sprawdź w przeglądarce plików, aby upewnić się, że naprawdę został zapisany i wygląda tak, jak powinien.
Dodaj nową opcję menu do GRUB
Odbywa się to za pomocą narzędzia o nazwie grub-mkconfig
lub grub2-mkconfig
; będzie na liście, którą znalazłeś Tabwcześniej. Możesz także wywołać komendę update-grub
. Aby to sprawdzić, po prostu wpisz go w terminalu głównym. Jeśli pojawi się komunikat „Komenda nie została znaleziona”, musisz użyć grub-mkconfig
bezpośrednio. Jeśli nie (wliczając w to dłuższy błąd), właśnie skonfigurowałeś konfigurację i możesz trochę zejść.
Aby użyć grub-mkconfig
bezpośrednio, najpierw musimy znaleźć grub.cfg
:
> find /boot -name grub.cfg
To prawdopodobnie będzie /boot/grub/grub.cfg
lub /boot/grub2/grub.cfg
.
> grub-mkconfig -o /boot/grub/grub.cfg
update-grub
automatycznie skanuje konfigurację w poszukiwaniu błędów. grub-mkconfig
nie zrobi tego, ale ważne jest, aby to zrobić, ponieważ łatwiej jest sobie z nimi teraz poradzić niż podczas próby uruchomienia komputera. W tym celu użyj grub-script-check
(lub grub2-script-check
):
> grub-script-check /boot/grub/grub.cfg
Jeśli to (lub update-grub
) powoduje błąd wskazujący numer linii, jest to numer linii w grub.cfg, ale musisz naprawić odpowiednią część w /etc/grub.d/40_custom
(plik w edytorze tekstu). Być może trzeba być rootem, aby zobaczyć poprzedni plik, więc spróbuj less /boot/grub/grub.cfg
w terminalu, naciśnij :i wprowadź numer linii. Powinieneś zobaczyć swoją pozycję menu. Znajdź literówkę, popraw go w edytorze tekstowym i uruchom update-grub
lub grub-mkconfig
ponownie.
Po zakończeniu możesz zamknąć edytor tekstu i wpisać exit
terminal, aby wyjść z trybu administratora.
Restart!
Po przejściu do menu grub przewiń szybko w dół (przed upływem limitu czasu, zwykle 5 sekund) do opcji „Windows” i przetestuj ją. Jeśli pojawi się błąd wiadomości tekstowej od grub, coś jest nie tak z konfiguracją. Jeśli pojawi się komunikat o błędzie z systemu Windows , problem występuje między tobą a firmą Microsoft. Nie martw się jednak, twój dysk Windows nie został zmodyfikowany i będziesz mógł uruchomić się bezpośrednio na nim, stawiając go na pierwszym miejscu (pod względem kolejności rozruchu) poprzez konfigurację BIOS.
Gdy ponownie wrócisz do systemu Linux, przywróć własność /etc/grub.d
katalogu i jego zawartości do pierwotnego stanu:
sudo chmod 755 /etc/grub.d/40_custom
Bibliografia
chainload $({root})
powinno byćchainload (${root})
(nie mogę go edytować, ponieważ jest to zbyt mała zmiana)./etc/grub.d
i nie jest on dodawany podczas generowania konfiguracji, dzieje się coś dziwnego. Jeśli uruchomiszgrub-mkconfig
bez-o
niego, wypluje się na standardowe wyjście, może to pomóc potwierdzić lub zaprzeczyć, że Twoje dodatki są przetwarzane.