GRUB (Polski)
GRUB (GRand Unified Bootloader) to boot loader. Obecny GRUB jest również określany jako GRUB 2. Oryginalny GRUB, lub GRUB Legacy, odpowiada wersji 0.9x. Ta strona opisuje wyłącznie GRUB 2.
esp
oznacza punkt montowania partycji systemowej EFI aka ESP.Obsługiwane systemy plików
GRUB posiada własne wsparcie dla wielu systemów plików, w szczególności FAT32, ext4, Btrfs lub XFS. Zobacz #Nieobsługiwane systemy plików dla niektórych zastrzeżeń.
/boot
, chyba że wyłączone zostaną niekompatybilne funkcje. Zazwyczaj można tego uniknąć, używając oddzielnej partycji rozruchowej /boot z powszechnie obsługiwanym systemem plików, takim jak FAT32.Systemy UEFI
- Zaleca się przeczytanie i zrozumienie stron Unified Extensible Firmware Interface, Partitioning#GUID Partition Table i Arch boot process#Under UEFI.
- Podczas instalacji w celu użycia UEFI ważne jest, aby uruchomić nośnik instalacyjny w trybie UEFI, w przeciwnym razie efibootmgr nie będzie w stanie dodać wpisu rozruchowego GRUB UEFI. Instalacja na awaryjnej ścieżce rozruchowej[broken link: invalid section] będzie nadal działać nawet w trybie BIOS, ponieważ nie dotyka pamięci NVRAM.
- Aby uruchomić komputer z dysku przy użyciu UEFI, wymagana jest partycja systemowa EFI. Postępuj zgodnie z EFI system partition#Check for an existing partition, aby dowiedzieć się, czy już ją masz, w przeciwnym razie musisz ją utworzyć.
- Cały ten artykuł zakłada, że wstawianie dodatkowych modułów GRUB2 poprzez
insmod
jest możliwe. Jak omówiono w #Shim-lock, nie jest tak w przypadku systemów UEFI z włączonym Secure Boot. Jeśli chcesz użyć jakiegokolwiek dodatkowego modułu GRUB, który nie jest zawarty w standardowym pliku GRUB EFIgrubx64.efi
w systemie z włączonym Secure Boot, musisz ponownie wygenerować GRUB EFIgrubx64.efi
za pomocągrub-mkstandalone
lub ponownie zainstalować GRUB za pomocągrub-install
z dołączonymi dodatkowymi modułami GRUB.
Instalacja
- Oprogramowanie UEFI nie jest implementowane w sposób spójny przez różnych producentów. Procedura opisana poniżej ma działać na szerokiej gamie systemów UEFI, ale osoby doświadczające problemów pomimo zastosowania tej metody są zachęcane do dzielenia się szczegółowymi informacjami i, jeśli to możliwe, znalezionymi obejściami dla konkretnego przypadku sprzętowego. Dla takich przypadków przygotowano artykuł GRUB/EFI examples.
- Sekcja zakłada instalację GRUB-a dla x64 (64-bitowego) UEFI. W przypadku IA32 (32-bitowego) UEFI (nie mylić z 32-bitowymi procesorami), zastąp
x86_64-efi
przezi386-efi
tam, gdzie jest to właściwe. Postępuj zgodnie z instrukcjami w Unified Extensible Firmware Interface#Checking the firmware bitness, aby określić bitowość UEFI.
Najpierw zainstaluj pakiety grub i efibootmgr: GRUB jest programem ładującym, podczas gdy efibootmgr jest używany przez skrypt instalacyjny GRUB-a do zapisywania wpisów rozruchowych w pamięci NVRAM.
Następnie wykonaj poniższe kroki, aby zainstalować GRUB na dysku:
- Zamontuj partycję systemową EFI i w pozostałej części tej sekcji zastąp
esp
jej punktem montowania. - Wybierz identyfikator programu ładującego, tutaj o nazwie
GRUB
. Katalog o tej nazwie zostanie utworzony wesp/EFI/
w celu przechowywania pliku binarnego EFI i jest to nazwa, która pojawi się w menu rozruchowym UEFI w celu identyfikacji wpisu rozruchowego GRUB. - Wykonaj poniższe polecenie, aby zainstalować aplikację GRUB EFI
grubx64.efi
doesp/EFI/GRUB/
i zainstalować jej moduły do/boot/grub/x86_64-efi/
.
- Note:
- Upewnij się, że instalujesz pakiety i uruchamiasz polecenie
grub-install
z systemu, w którym GRUB będzie zainstalowany jako bootloader. Oznacza to, że jeśli uruchamiasz system ze środowiska instalacji, musisz znajdować się w chroot podczas uruchamianiagrub-install
. Jeśli z jakiegoś powodu konieczne jest uruchomieniegrub-install
spoza zainstalowanego systemu, należy dołączyć opcję--boot-directory=
ze ścieżką do zamontowanego katalogu/boot
, np--boot-directory=/mnt/boot
. - Niektóre płyty główne nie obsługują
bootloader-id
ze spacjami
- Upewnij się, że instalujesz pakiety i uruchamiasz polecenie
# grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB
Po zakończeniu powyższej instalacji, główny katalog GRUB znajduje się w /boot/grub/
. Przeczytaj GRUB/Tips and tricks#Alternative install method, aby dowiedzieć się jak wskazać alternatywną lokalizację. Zauważ, że grub-install
próbuje również utworzyć wpis w menedżerze rozruchu oprogramowania układowego, nazwany GRUB
w powyższym przykładzie - to jednak nie powiedzie się, jeśli wpisy rozruchowe są pełne; użyj efibootmgr, aby usunąć niepotrzebne wpisy.
Pamiętaj o wygenerowaniu głównego pliku konfiguracyjnego po sfinalizowaniu konfiguracji.
--removable
, GRUB zostanie zainstalowany w esp/EFI/BOOT/BOOTX64.EFI
(lub esp/EFI/BOOTIA32.EFI
dla i386-efi
. (lub esp/EFI/BOOT/BOOTIA32.EFI
dla celu i386-efi
) i będziesz miał dodatkową możliwość rozruchu z dysku w przypadku zresetowania zmiennych EFI lub przeniesienia dysku do innego komputera. Zwykle można to zrobić, wybierając sam dysk, podobnie jak w BIOS-ie. W przypadku podwójnego rozruchu z systemem Windows należy pamiętać, że system Windows zwykle umieszcza tam plik wykonywalny EFI, ale jego jedynym celem jest odtworzenie wpisu rozruchowego UEFI dla systemu Windows. Jeśli instalujesz GRUB na Mac, będziesz musiał użyć tej opcji.
Jeśli wykonasz aktualizację UEFI, aktualizacja ta może usunąć istniejące wpisy rozruchowe UEFI. W związku z tym jest to potencjalna strategia awaryjna, aby mieć włączony „wymienny” wpis rozruchowy.
--efi-directory
i--bootloader-id
są specyficzne dla GRUB UEFI,--efi-directory
zastępuje--root-directory
, który jest przestarzały.- Można zauważyć brak opcji device_path (np.:
/dev/sda
) w poleceniugrub-install
. W rzeczywistości każda podana opcja device_path zostanie zignorowana przez skrypt instalacyjny GRUB UEFI. W rzeczywistości programy ładujące UEFI w ogóle nie używają kodu rozruchowego MBR ani sektora rozruchowego partycji.
Zobacz Rozwiązywanie problemów z UEFI w przypadku problemów. Dodatkowo zobacz GRUB/Tips and tricks#UEFI further reading.
Obsługa Secure Boot
GRUB w pełni obsługuje bezpieczny rozruch przy użyciu kluczy CA lub shim, jednak polecenie instalacji różni się w zależności od tego, którego zamierzasz użyć.
- Nieprawidłowe skonfigurowanie Secure Boot może uniemożliwić uruchomienie systemu. Jeśli z jakiegokolwiek powodu nie możesz uruchomić systemu po włączeniu bezpiecznego rozruchu, powinieneś wyłączyć go w oprogramowaniu układowym i ponownie uruchomić system.
- Ładowanie niepotrzebnych modułów w bootloaderze może potencjalnie stanowić zagrożenie dla bezpieczeństwa, używaj tych poleceń tylko wtedy, gdy ich potrzebujesz.
Klucze CA
Aby skorzystać z kluczy CA, polecenie jest następujące:
# grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB --modules=„tpm” --disable-shim-lock
Shim-lock
Podczas korzystania z Shim-lock, GRUB może zostać pomyślnie uruchomiony w trybie Secure Boot tylko wtedy, gdy jego plik binarny EFI zawiera wszystkie moduły niezbędne do odczytu systemu plików zawierającego obrazy vmlinuz i initramfs.
Od wersji GRUB 2.06.r261.g2f4430cc0
, ładowanie modułów w trybie bezpiecznego rozruchu poprzez insmod
nie jest już dozwolone, ponieważ naruszałoby to oczekiwanie, aby nie ładować dowolnego kodu. Jeśli moduły GRUB-a nie są osadzone w pliku binarnym EFI, a GRUB spróbuje załadować je sideloadem/insmod
em, GRUB nie uruchomi się z komunikatem:
error: prohibited by secure boot policy błąd: zabronione przez politykę bezpiecznego rozruchu
Ubuntu, zgodnie z oficjalnym skryptem kompilacji, osadza następujące moduły GRUB w podpisanym pliku binarnym GRUB EFI grubx64.efi
:
- „podstawowe” moduły, niezbędne do uruchomienia systemu z płyty CD lub dysku z prostą partycją:
all_video
,boot
,btrfs
,cat
,chain
,configfile
,echo
,efifwsetup
,efinet
,ext2
,fat
,font
,gettext
,gfxmenu
,gfxterm
,gfxterm_background
,gzio
,halt
,help
,hfsplus
,iso9660
,jpeg
,keystatus
,loadenv
,loopback
,linux
,ls
,lsefi
,lsefimmap
,lsefisystab
,lssal
,memdisk
,minicmd
,normal
,ntfs
,part_apple
,part_msdos
,part_gpt
,password_pbkdf2
,png
,probe
,reboot
,regexp
,search
,search_fs_uuid
,search_fs_file
,search_label
,sleep
,smbios
,squash4
,test
,true
,video
,xfs
,zfs
,zfscrypt
,zfsinfo
- moduły „specyficzne dla platformy” dla architektury x86_64-efi, niezbędne dla np.:
play
: aby odtwarzać dźwięki podczas uruchamianiacpuid
: do procesora podczas uruchamianiatpm
: do obsługi Measured Boot / Trusted Platform Modules
- moduły „zaawansowane”, składający się z modułów:
cryptodisk
: uruchamianie z szyfrowanych w trybie zwykłym dysków.gcry_algorithm
: do obsługi określonych algorytmów haszujących i szyfrującychluks
: do uruchamiania z dysków szyfrowanych za pomocą LUKS:lvm
: uruchamianie z dysków woluminów logicznych LVMmdraid09
,mdraid1x
,raid5rec
,raid6rec
: do uruchamiania z wirtualnych dysków RAID.
Musisz skonstruować listę modułów GRUB w postaci zmiennej powłoki, którą oznaczamy jako GRUB_MODULES
. Możesz użyć najnowszego skryptu Ubuntu jako punktu startowego i usunąć moduły, które nie są potrzebne w twoim systemie. Pominięcie modułów sprawi, że proces uruchamiania będzie stosunkowo szybszy i zaoszczędzi trochę miejsca na partycji ESP.
Potrzebny jest również plik/sekcja Secure Boot Advanced Targeting (SBAT) zawarty w pliku binarnym EFI, aby poprawić bezpieczeństwo; jeśli GRUB jest uruchamiany z programu ładującego UEFI shim. Ten plik/sekcja SBAT zawiera metadane o pliku binarnym GRUB (wersja, opiekun, deweloper, adres URL upstream) i ułatwia shimowi blokowanie niektórych wersji GRUB-a przed załadowaniem, jeśli mają luki w zabezpieczeniach[1][2], jak wyjaśniono w dokumencie UEFI shim bootloader secure boot life-cycle improvements od shim.
Shim bootloadera UEFI pierwszego stopnia nie uruchomi grubx64.efi
, jeśli brakuje sekcji SBAT z grubx64.efi
!
Jeśli GRUB jest zainstalowany, przykładowy plik SBAT .csv znajduje się pod /usr/share/grub/sbat.csv
.
Ponownie zainstaluj GRUB używając dostarczonego pliku /usr/share/grub/sbat.csv
i wszystkich potrzebnych GRUB_MODULES
i podpisz go:
# grub-install --target=x86_64-efi --efi-directory=esp --modules=${GRUB_MODULES} --sbat /usr/share/grub/sbat.csv # sbsign --key MOK.key --cert MOK.crt --output esp/EFI/GRUB/grubx64.efi esp/EFI/GRUB/grubx64.efi # cp esp/EFI/GRUB/grubx64.efi esp/EFI/BOOT/grubx64.efi
Uruchom ponownie komputer, wybierz klucz w MokManager, a Secure Boot powinien działać.
Korzystanie z Secure Boot
Po instalacji zobacz Secure Boot#Implementing Secure Boot, aby uzyskać instrukcje dotyczące jego włączenia.
Jeśli używasz metody kluczy CA, zarządzanie kluczami, rejestracja i podpisywanie plików może być zautomatyzowane za pomocą sbctl, zobacz Secure Boot#Assisted process with sbctl po szczegóły.
Systemy BIOS
Instrukcje specyficzne dla tablicy partycji GUID (GPT)
W konfiguracji BIOS/GPT wymagana jest partycja rozruchowa BIOS. GRUB osadza swój core.img
na tej partycji.
- Przed wypróbowaniem tej metody należy pamiętać, że nie wszystkie systemy będą w stanie obsłużyć ten schemat partycjonowania. Przeczytaj więcej na Partitioning#GUID Partition Table.
- Partycja rozruchowa BIOS-u jest potrzebna GRUB-owi tylko w konfiguracji BIOS/GPT. W konfiguracji BIOS/MBR, GRUB używa luki post-MBR do osadzenia
core.img
. W przypadku GPT nie ma jednak gwarantowanego niewykorzystanego miejsca przed pierwszą partycją. - W przypadku systemów UEFI ta dodatkowa partycja nie jest wymagana, ponieważ w tym przypadku nie odbywa się osadzanie sektorów rozruchowych. Jednak systemy UEFI nadal wymagają partycji systemowej EFI.
Utwórz partycję mebibajtową (+1M
z fdisk lub gdisk) na dysku bez systemu plików i z typem partycji GUID 21686148-6449-6E6F-744E-656564454649
.
- Wybierz typ partycji
BIOS boot
dla fdisk. - Wybierz kod typu partycji
ef02
dla gdisk. - Dla parted ustaw/aktywuj flagę
bios_grub
na partycji.
Ta partycja może być w dowolnej kolejności, ale musi znajdować się na pierwszych 2 TiB dysku. Partycja ta musi zostać utworzona przed instalacją GRUB-a. Gdy partycja będzie gotowa, zainstaluj bootloader zgodnie z poniższymi instrukcjami.
Przestrzeń przed pierwszą partycją może być również użyta jako partycja rozruchowa BIOS-u, choć będzie poza specyfikacją wyrównania GPT. Ponieważ partycja nie będzie regularnie używana, można pominąć kwestie wydajności, chociaż niektóre narzędzia dyskowe będą wyświetlać ostrzeżenie o tym. W fdisk lub gdisk utwórz nową partycję zaczynającą się od sektora 34 i rozciągającą się do 2047 i ustaw jej typ. Aby widoczne partycje zaczynały się od podstawy, rozważ dodanie tej partycji jako ostatniej.
Instrukcje dotyczące głównego rekordu rozruchowego (MBR)
Zwykle odstęp post-MBR (po 512-bajtowym regionie MBR i przed początkiem pierwszej partycji) w wielu systemach partycjonowanych MBR wynosi 31 KiB, gdy kwestie wyrównania cylindra zgodności z DOS są spełnione w tablicy partycji. Zaleca się jednak, aby odstęp po MBR wynosił około 1 do 2 MB, aby zapewnić wystarczającą ilość miejsca na osadzenie GRUB-a core.img
(FS#24103). Zaleca się użycie narzędzia do partycjonowania, które obsługuje 1 MiB wyrównywanie partycji, aby uzyskać tę przestrzeń, a także aby spełnić inne kwestie niezwiązane z 512-bajtowymi sektorami (które nie są związane z osadzaniem core.img
).
Instalacja
Zainstaluj pakiet grub. (Zastąpi on grub-legacyAUR, jeśli jest już zainstalowany):
# grub-install --target=i386-pc /dev/sdX
gdzie i386-pc
jest celowo używane niezależnie od rzeczywistej architektury, a /dev/sdX
jest dyskiem (nie partycją), na którym ma zostać zainstalowany GRUB. Na przykład /dev/sda
lub /dev/nvme0n1
, lub /dev/mmcblk0
. Zobacz Device file#Block device names by zapoznać się ze schematem nazewnictwa urządzeń blokowych.
Teraz należy wygenerować główny plik konfiguracyjny.
Jeśli używasz LVM dla swojego /boot
, możesz zainstalować GRUB na wielu dyskach fizycznych.
Zobacz grub-install(8) i GRUB Manual po więcej szczegółów na temat polecenia grub-install
.
Konfiguracja
W zainstalowanym systemie GRUB ładuje plik konfiguracyjny /boot/grub/grub.cfg
przy każdym uruchomieniu systemu. Możesz postępować zgodnie z #Generowany grub.cfg, aby użyć narzędzia, lub #Własny grub.cfg, aby utworzyć go ręcznie.
Generowany grub.cfg
Ta sekcja obejmuje tylko edycję pliku konfiguracyjnego /etc/default/grub
. Więcej informacji można znaleźć w GRUB/Tips and tricks.
/etc/default/grub
i/lub plikach w /etc/grub.d/
. Generowanie głównego pliku konfiguracyjnego
Po instalacji należy wygenerować główny plik konfiguracyjnego /boot/grub/grub.cfg
. Na proces generowania mogą wpływać różne opcje w /etc/default/grub
i skrypty w /etc/grub.d/
. Lista opcji w /etc/default/grub
i zwięzły opis każdej z nich znajduje się na stronie dokumentacji GNU.
Jeśli nie wykonałeś dodatkowej konfiguracji, automatyczne generowanie określi główny system plików systemu do uruchomienia dla pliku konfiguracyjnego. Aby to się powiodło, ważne jest, aby system był uruchomiony lub chrootowany.
- Domyślną ścieżką pliku jest
/boot/grub/grub.cfg
, a nie/boot/grub/i386-pc/grub.cfg
. - Jeśli próbujesz uruchomić grub-mkconfig w kontenerze chroot lub systemd-nspawn, możesz zauważyć, że nie działa:
grub-probe: error: failed to get canonical path of /dev/sdaX
. W takim przypadku spróbuj użyć arch-chroot, jak opisano w poście BBS.
Użyj narzędzia grub-mkconfig do wygenerowania /boot/grub/grub.cfg
:
# grub-mkconfig -o /boot/grub/grub.cfg
Domyślnie skrypty generujące automatycznie dodają wpisy menu dla wszystkich zainstalowanych jąder Arch Linux do wygenerowanej konfiguracji.
- Po zainstalowaniu lub usunięciu jądra, wystarczy ponownie uruchomić powyższe polecenie grub-mkconfig.
- Aby uzyskać wskazówki dotyczące zarządzania wieloma wpisami GRUB-a, na przykład podczas korzystania z jąder linux i linux-lts, zobacz GRUB/Tips and tricks#Multiple entries.
Aby automatycznie dodać wpisy dla innych zainstalowanych systemów operacyjnych, zobacz #Wykrywanie innych systemów operacyjnych.
Dodatkowe niestandardowe pozycje menu można dodać edytując /etc/grub.d/40_custom
i ponownie generując /boot/grub/grub.cfg
. Możesz też utworzyć /boot/grub/custom.cfg
i dodać je tam. Zmiany w /boot/grub/custom.cfg
nie wymagają ponownego uruchomienia grub-mkconfig, ponieważ /etc/grub.d/41_custom
dodaje niezbędną instrukcję source
do wygenerowanego pliku konfiguracyjnego.
/etc/grub.d/40_custom
może być użyty jakoszablon do utworzenia /etc/grub.d/nn_custom
, gdzie nn
definiuje pierwszeństwo, wskazując kolejność wykonywania skryptu. Kolejność wykonywania skryptów określa ich umiejscowienie w menu rozruchowym GRUB-a. nn
powinno być większe niż 06
, aby zapewnić, że niezbędne skrypty są wykonywane jako pierwsze.Zobacz #Przykłady wpisów w menu startowym, aby zapoznać się z przykładami niestandardowych wpisów w menu.
Wykrywanie innych systemów operacyjnych
Aby grub-mkconfig wyszukiwał inne zainstalowane systemy i automatycznie dodawał je do menu, zainstaluj pakiet os-prober i zamontuj partycje, z których uruchamiane są inne systemy. Następnie ponownie uruchom grub-mkconfig. Jeśli otrzymasz następujące dane wyjściowe: Warning: os-prober will not be executed to detect other bootable partitions
, edytuj /etc/default/grub
i dodaj/usuń komentarz:
GRUB_DISABLE_OS_PROBER=false
Następnie spróbuj ponownie.
- Dokładny punkt montowania nie ma znaczenia, os-prober odczytuje
mtab
w celu zidentyfikowania miejsc do wyszukiwania wpisów startowych. - Pamiętaj, aby montować partycje za każdym razem, gdy uruchamiasz grub-mkconfig, aby za każdym razem uwzględnić inne systemy operacyjne.
- os-prober może nie działać poprawnie po uruchomieniu w chroot. Spróbuj ponownie po ponownym uruchomieniu systemu, jeśli tego doświadczysz.
Windows
W przypadku systemu Windows zainstalowanego w trybie UEFI należy upewnić się, że partycja systemowa EFI zawierająca Menedżera rozruchu systemu Windows (bootmgfw.efi
) jest zamontowana. Uruchom os-prober
jako root, aby wykryć i wygenerować dla niego wpis.
W przypadku systemu Windows zainstalowanego w trybie BIOS, zamontuj partycję systemową Windows (jej etykieta systemu plików powinna być System Reserved
lub SYSTEM
). Uruchom os-prober
jako root, aby wykryć i wygenerować dla niego wpis.
- Partycje NTFS mogą nie zawsze być wykrywane po zamontowaniu ich przy użyciu domyślnych sterowników Linuksa. Jeśli GRUB ich nie wykrywa, spróbuj zainstalować NTFS-3G i ponownie zamontować.
- Zaszyfrowane partycje Windows mogą wymagać odszyfrowania przed zamontowaniem. W przypadku BitLockera można to zrobić za pomocą cryptsetup lub dislockerAUR. To powinno wystarczyć, aby os-prober dodał prawidłowy wpis.
Dodatkowe argumenty
Aby przekazać niestandardowe dodatkowe argumenty do obrazu Linuksa, można ustawić zmienne GRUB_CMDLINE_LINUX
+ GRUB_CMDLINE_LINUX_DEFAULT
. + GRUB_CMDLINE_LINUX_DEFAULT
w /etc/default/grub
. Te dwie zmienne są dołączane do siebie i przekazywane do jądra podczas generowania zwykłych wpisów rozruchowych. Dla wpisu rozruchowego recovery, tylko GRUB_CMDLINE_LINUX
jest używane podczas generowania.
Użycie obu nie jest konieczne, ale może być przydatne. Na przykład, można użyć GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=uuid-of-swap-partitio quiet"
gdzie uuid-partycji-wymiany
jest UUID partycji wymiany, aby włączyć wznawianie po hibernacja. Spowoduje to wygenerowanie wpisu rozruchu odzyskiwania bez wznowienia i bez quiet
tłumienia komunikatów jądra podczas rozruchu z tego wpisu menu. Chociaż inne (zwykłe) pozycje menu miałyby je jako opcje.
Domyślnie grub-mkconfig określa UUID głównego systemu plików dla konfiguracji. Aby to wyłączyć, należy odkomentować GRUB_DISABLE_LINUX_UUID=true
.
Aby wygenerować wpis odzyskiwania GRUB-a należy upewnić się, że GRUB_DISABLE_RECOVERY
nie jest ustawiony na true
w /etc/default/grub
.
Więcej informacji można znaleźć w artykule na temat parametrów jądra.
Domyślnie grub-mkconfig sortuje dołączone jądra za pomocą sort -V
i używa pierwszego jądra na tej liście jako wpisu najwyższego poziomu. Oznacza to, że na przykład, ponieważ /boot/vmlinuz-linux-lts
jest sortowane przed /boot/vmlinuz-linux
, jeśli masz zainstalowane zarówno linux-lts, jak i linux, jądro LTS będzie wpisem menu najwyższego poziomu, co może nie być pożądane. Można to zmienić podając GRUB_TOP_LEVEL=sciezka_do_jadra
w /etc/default/grub
. Na przykład, aby zwykłe jądro było pozycją menu najwyższego poziomu, można użyć GRUB_TOP_LEVEL=„/boot/vmlinuz-linux”
.
LVM
Jeśli korzystasz z LVM dla partycji głównej /boot
lub /
, upewnij się, że moduł lvm
jest wstępnie załadowany:
/etc/default/grub
GRUB_PRELOAD_MODULES="... lvm"
RAID
GRUB zapewnia wygodną obsługę woluminów RAID. Należy załadować moduły GRUB mdraid09
lub mdraid1x
, aby umożliwić natywne adresowanie woluminu:
/etc/default/grub
GRUB_PRELOAD_MODULES="... mdraid09 mdraid1x"
Na przykład /dev/md0
staje się:
set root=(md/0)
podczas gdy partycjonowany wolumin RAID (np. /dev/md0p1
) staje się:
set root=(md/0,1)
Aby zainstalować gruba przy użyciu RAID1 jako partycji /boot
(lub przy użyciu /boot
umieszczonego na partycji głównej RAID1), w systemach BIOS wystarczy uruchomić grub-install na obu dyskach, np:
# grub-install --target=i386-pc --debug /dev/sda # grub-install --target=i386-pc --debug /dev/sdb
Gdzie macierz RAID 1 zawierająca /boot
znajduje się na /dev/sda
i /dev/sdb
.
Zaszyfrowane /boot
GRUB posiada również specjalne wsparcie dla uruchamiania z zaszyfrowanym /boot
. Odbywa się to poprzez odblokowanie LUKS blockdevice w celu odczytania jego konfiguracji i załadowania z niego initramfs i kernel. Opcja ta próbuje rozwiązać problem posiadania niezaszyfrowanej partycji rozruchowej.
/boot
nie musi znajdować się na oddzielnej partycji; może również pozostać w głównym drzewie katalogów /
systemuAby włączyć tę funkcję, należy zaszyfrować partycję z /boot
znajdującą się na niej przy użyciu LUKS w normalny sposób. Następnie dodaj następującą opcję do /etc/default/grub
:
/etc/default/grub
GRUB_ENABLE_CRYPTODISK=y
Ta opcja jest używana przez grub-install do generowania grub core.img
.
Zainstaluj GRUB po zmodyfikowaniu tej opcji lub zaszyfrowaniu partycji.
Bez dalszych zmian zostaniesz dwukrotnie poproszony o podanie hasła: pierwsze dla GRUB-a w celu odblokowania punktu montowania /boot
we wczesnym rozruchu, drugie w celu odblokowania samego głównego systemu plików zaimplementowanego przez initramfs. Aby tego uniknąć, można użyć pliku klucza.
- Jeśli chcesz generować główny plik konfiguracyjny, upewnij się, że
/boot
jest zamontowany. - Aby wykonać aktualizacje systemu obejmujące punkt montowania
/boot
, należy upewnić się, że zaszyfrowany/boot
jest odblokowany i zamontowany przed wykonaniem aktualizacji. W przypadku oddzielnej partycji/boot
, można to osiągnąć automatycznie podczas rozruchu, używając crypttab z plikiem klucza.
- Jeśli używasz specjalnej mapy klawiszy, domyślna instalacja GRUB-a nie będzie jej znała. Jest to istotne dla sposobu wprowadzania hasła w celu odblokowania urządzenia blokującego LUKS. Zobacz GRUB/Tips and tricks#Manual configuration of core image for early boot.
- Jeśli wystąpią problemy z wyświetleniem monitu o hasło (błędy dotyczące cryptouuid, cryptodisk lub „nie znaleziono urządzenia”), spróbuj ponownie zainstalować GRUB i dodać
--modules=„part_gpt part_msdos”
na końcu poleceniagrub-install
.
/boot
gdy aktualizacje potrzebują dostępu do powiązanych plików.LUKS2
Użyj grub-install
jak opisano w sekcji #Instalacja, aby utworzyć bootowalny obraz GRUB z obsługą LUKS. Należy pamiętać o następujących zastrzeżeniach:
- Początkowa obsługa LUKS2 została dodana do GRUB 2.06, ale z kilkoma ograniczeniami, które zostały tylko częściowo rozwiązane w GRUB 2.12rc1. Zobacz GRUB bug #55093.
- Od wersji GRUB 2.12rc1,
grub-install
może utworzyć obraz rdzenia w celu odblokowania LUKS2. Jednak obsługuje on tylko PBKDF2, a nie Argon2. - Argon2id (domyślny tryb cryptsetup) i Argon2i PBKDF nie są obsługiwane (GRUB bug #59409), tylko PBKDF2 jest.
- Tip: Możesz użyć grub-improved-luks2-gitAUR, który został załatany dla LUKS2 jak również obsługi Argon. Należy pamiętać, że obsługa Argon w pakiecie wymaga systemu UEFI.[3]
grub-mkimage
z niestandardowym plikiem konfiguracyjnym GRUB. Na przykład /boot/grub/grub-pre.cfg
, z wywołaniami cryptomount
, insmod normal
i normal
. Nie jest to już potrzebne, grub-install
jest wystarczające. Jednakże, może być konieczne uruchomienie grub-mkconfig -o /boot/grub/grub.cfg
przynajmniej raz po aktualizacji z 2.06.Jeśli wprowadzisz nieprawidłowe hasło podczas rozruchu i skończysz w powłoce ratunkowej GRUB, spróbuj cryptomount -a
, aby zamontować wszystkie (miejmy nadzieję, że tylko jedną) zaszyfrowane partycje lub użyj cryptomount -u $crypto_uuid
, aby zamontować konkretną. Następnie wykonaj insmod normal
i normal
jak zwykle.
Jeśli wprowadzisz poprawne hasło, ale natychmiast zostanie zwrócony błąd Invalid passphrase
, upewnij się, że podano właściwe moduły kryptograficzne. Użyj cryptsetup luksDump /dev/nvme0n1p2
i sprawdź, czy funkcja skrótu (SHA-256, SHA-512) jest zgodna z zainstalowanymi modułami (gcry_sha256
, gcry_sha512
), a algorytm PBKDF to pbkdf2. Algorytmy hash i PBDKDF można zmienić dla istniejących kluczy za pomocą cryptsetup luksConvertKey --hash sha256 --pbkdf pbkdf2 /dev/nvme0n1p2
. W normalnych okolicznościach przetworzenie hasła powinno zająć kilka sekund.
Własny grub.cfg
Ta sekcja opisuje ręczne tworzenie wpisów rozruchowych GRUB-a w /boot/grub/grub.cfg
zamiast polegania na grub-mkconfig.
Podstawowy plik konfiguracyjny GRUB-a wykorzystuje następujące opcje:
(hdX,Y)
jest partycją Y na dysku X, numery partycji zaczynają się od 1, numery dysków zaczynają się od 0set default=N
to domyślny wpis rozruchowy, który jest wybierany po upływie limitu czasu dla akcji użytkownikaset timeout=M
to czas M oczekiwania w sekundach na wybór użytkownika przed uruchomieniem domyślnej opcjimenuentry „title” {opcje wpisu}
to wpis startowy zatytułowanytitle
.set root=(hdX,Y)
ustawia partycję rozruchową, na której przechowywane jest jądro i moduły GRUB (partycja rozruchowa nie musi być oddzielną partycją i może być po prostu katalogiem pod partycją „root”) (/
)
LoaderDevicePartUUID
Aby GRUB ustawił zmienną LoaderDevicePartUUID
UEFI wymaganą przez systemd-gpt-auto-generator(8) dla Automatyczne montowanie partycji GPT, załaduj moduł bli
w grub.cfg
:
if [ "$grub_platform" = "efi" ]; then insmod bli fi
/boot/grub/grub.cfg
wygenerowanego przez grub-mkconfig. Dodaj je do /etc/grub.d/40_custom
i zregeneruj główny plik konfiguracyjny lub dodaj je do /boot/grub/custom.cfg
.Wskazówki dotyczące zarządzania wieloma wpisami GRUB-a, na przykład podczas korzystania z jąder linux i linux-lts, można znaleźć w GRUB/Tips and tricks#Multiple entries.
Pozycje menu rozruchowego Archiso i Archboot znajdują się w sekcji Multiboot USB drive#Boot entries.
Polecenia GRUB
menuentry "Wyłączenie systemu" { echo "Wyłącznie systemu..." halt }
menuentry "Ponowne uruchomienie systemu" { echo "Ponowne uruchamianie systemu..." reboot }
if [ ${grub_platform} == "efi" ]; then menuentry 'Ustawienia oprogramowania sprzętowego UEFI' --id 'uefi-firmware' { fwsetup } fi
Pliki binarne EFI
Po uruchomieniu w trybie UEFI, GRUB może łańcuchowo ładować inne pliki binarne EFI.
if
:
if [ ${grub_platform} == "efi" ]; then umieść tutaj wpisy menu tylko dla UEFI fi
Powłoka UEFI
Można uruchomić Powłokę UEFI, umieszczając ją w katalogu głównym partycji systemowej EFI i dodając ten wpis do menu:
menuentry "Powłoka UEFI" { insmod fat insmod chain search --no-floppy --set=root --file /shellx64.efi chainloader /shellx64.efi }
gdisk
Pobierz gdisk EFI i skopiuj gdisk_x64.efi
do esp/EFI/tools/
.
menuentry "gdisk" { insmod fat insmod chain search --no-floppy --set=root --file /EFI/tools/gdisk_x64.efi chainloader /EFI/tools/gdisk_x64.efi }
Ładowanie łańcuchowe zunifikowanego obrazu jądra
Jeśli posiadasz zunifikowany obraz jądra wygenerowany w wyniku Secure Boot lub w inny sposób, możesz dodać go do menu rozruchowego. Na przykład:
menuentry "Arch Linux" { insmod fat insmod chain search --no-floppy --set=root --fs-uuid FILESYSTEM_UUID chainloader /EFI/Linux/arch-linux.efi }
Dual-booting
GNU/Linux
Zakładając, że druga dystrybucja znajduje się na partycji sda2
:
menuentry "Inny Linux" { set root=(hd0,2) linux /boot/vmlinuz (dodaj inne opcje zgodnie z potrzebami) initrd /boot/initrd.img (jeśli inne jądro go używa/potrzebuje) }
Alternatywnie, GRUB może wyszukać właściwą partycję według identyfikatora UUID lub etykiety systemu plików:
menuentry "Inny Linux" { # zakładając, że UUID to 763A-9CB6 search --no-floppy --set=root --fs-uuid 763A-9CB6 # wyszukiwanie według etykiety INNY_LINUX (upewnij się, że etykieta partycji jest jednoznaczna) #search --no-floppy --set=root --label INNY_LINUX linux /boot/vmlinuz (dodaj tutaj inne opcje zgodnie z potrzebami, na przykład: root=UUID=763A-9CB6) initrd /boot/initrd.img (jeśli inne jądro go używa/potrzebuje) }
Jeśli inna dystrybucja ma już prawidłowy folder /boot
z zainstalowanym GRUB-em, grub.cfg
, jądrem i initramfs, GRUB może zostać poinstruowany, aby załadować te inne pliki grub.cfg
w locie podczas rozruchu. Na przykład dla hd0
i czwartej partycji GPT:
menuentry "configfile hd0,gpt4" { insmod part_gpt insmod btrfs insmod ext2 set root='hd0,gpt4' configfile /boot/grub/grub.cfg }
Po wybraniu tej pozycji GRUB ładuje plik grub.cfg
z drugiego woluminu i wyświetla to menu. Wszelkie zmiany zmiennych środowiskowych dokonane za pomocą poleceń w pliku nie zostaną zachowane po zakończeniu configfile
. Naciśnij Esc
, aby powrócić do pierwszego menu GRUB-a.
Windows zainstalowany w trybie UEFI/GPT
Ten tryb określa, gdzie znajduje się program ładujący systemu Windows i ładuje go łańcuchowo po GRUB-ie po wybraniu pozycji menu. Głównym zadaniem jest znalezienie partycji systemowej EFI i uruchomienie z niej programu ładującego.
if [ "${grub_platform}" == "efi" ]; then menuentry "Microsoft Windows Vista/7/8/8.1 UEFI/GPT" { insmod part_gpt insmod fat insmod chain search --no-floppy --fs-uuid --set=root $hints_string $fs_uuid chainloader /EFI/Microsoft/Boot/bootmgfw.efi } fi
gdzie $hints_string
i $fs_uuid
są uzyskiwane za pomocą następujących dwóch poleceń.
Polecenie $fs_uuid
określa identyfikator UUID partycji systemowej EFI:
# grub-probe --target=fs_uuid esp/EFI/Microsoft/Boot/bootmgfw.efi
1ce5-7f28
Alternatywnie można uruchomić lsblk --fs
i odczytać UUID partycji systemowej EFI.
Polecenie $hints_string
określi lokalizację partycji systemowej EFI, w tym przypadku dysku twardego 0:
# grub-probe --target=hints_string esp/EFI/Microsoft/Boot/bootmgfw.efi
--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1
Te dwa polecenia zakładają, że ESP używany przez Windows jest zamontowany pod adresem esp
. Mogą istnieć różnice w ścieżce do pliku EFI systemu Windows, ponieważ jest to system Windows i tak dalej.
Windows zainstalowany w trybie BIOS/MBR
bootmgr
bezpośrednio i chainloading sektora rozruchowego partycji nie jest już wymagane do uruchomienia systemu Windows w konfiguracji BIOS/MBR./bootmgr
, a nie "prawdziwa" partycja Windows (zwykle C:
).Etykieta systemu plików partycji systemowej to System Reserved
lub SYSTEM
, a jej rozmiar wynosi od 100 do 549 MB. Więcej informacji można znaleźć w Wikipedia:Partycja systemowa i partycja rozruchowa.W całej tej sekcji zakłada się, że partycja Windows to /dev/sda1
. Inna partycja zmieni każde wystąpienie hd0,msdos1
.
W obu przykładach XXXX-XXXX
to UUID systemu plików, który można znaleźć za pomocą polecenia lsblk --fs
.
Dla Windows Vista/7/8/8.1/10:
if [ "${grub_platform}" == "pc" ]; then menuentry "Microsoft Windows Vista/7/8/8.1/10 BIOS/MBR" { insmod part_msdos insmod ntfs insmod ntldr search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 XXXX-XXXX ntldr /bootmgr } fi
Dla Windows XP:
if [ "${grub_platform}" == "pc" ]; then menuentry "Microsoft Windows XP" { insmod part_msdos insmod ntfs insmod ntldr search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 XXXX-XXXX ntldr /ntldr } fi
\boot\bcd
(kod błędu 0xc000000f
). (kod błędu 0xc000000f
). Możesz to naprawić, przechodząc do Konsoli odzyskiwania systemu Windows (cmd.exe
z dysku instalacyjnego) i wykonując:
X:\> bootrec.exe /fixboot X:\> bootrec.exe /RebuildBcd
Nie używaj bootrec.exe /Fixmbr
, ponieważ wyczyści to GRUB.
Możesz też użyć funkcji Boot Repair w menu Troubleshooting - nie wymaże ona GRUB-a, ale naprawi większość błędów.
Ponadto lepiej jest mieć podłączony zarówno docelowy dysk twardy, jak i TYLKO urządzenie rozruchowe. Windows zazwyczaj nie naprawia informacji rozruchowych, jeśli podłączone są inne urządzenia.
Korzystanie z etykiet
Możliwe jest użycie etykiet systemu plików, czytelnych dla człowieka ciągów znaków dołączonych do systemów plików, poprzez użycie opcji --label
w komendzie search
. Po pierwsze, upewnij się, że system plików ma etykietę.
Następnie dodaj wpis przy użyciu etykiet. Przykład:
menuentry "Arch Linux, session texte" { search --label --set=root archroot linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot ro initrd /boot/initramfs-linux.img }
Używanie powłoki poleceń
Ponieważ MBR jest zbyt mały, aby przechowywać wszystkie moduły GRUB-a, znajduje się tam tylko menu i kilka podstawowych poleceń. Większość funkcjonalności GRUB-a pozostaje w modułach w /boot/grub/
, które są wstawiane w razie potrzeby. W warunkach błędu (np. jeśli zmieni się układ partycji) GRUB może nie uruchomić się. W takim przypadku może pojawić się powłoka poleceń.
GRUB oferuje wiele powłok/promptów. Jeśli wystąpi problem z odczytaniem menu, ale bootloader jest w stanie znaleźć dysk, prawdopodobnie zostaniesz przeniesiony do "normalnej" powłoki:
grub>
W przypadku poważniejszego problemu (np. gdy GRUB nie może znaleźć wymaganych plików), użytkownik może zostać przeniesiony do powłoki "ratunkowej":
grub rescue>
Powłoka ratunkowa jest ograniczonym podzbiorem normalnej powłoki, oferującym znacznie mniej funkcji. Jeśli zostaniesz przeniesiony do powłoki ratunkowej, najpierw spróbuj wstawić "normalny" moduł, a następnie uruchom "normalną" powłokę:
grub rescue> set prefix=(hdX,Y)/boot/grub grub rescue> insmod (hdX,Y)/boot/grub/i386-pc/normal.mod rescue:grub> normal
Obsługa pagera
GRUB obsługuje pager do odczytywania poleceń, które dostarczają długich danych wyjściowych (takich jak polecenie help
). Działa to tylko w normalnym trybie powłoki, a nie w trybie ratunkowym. Aby włączyć pager, w powłoce poleceń GRUB wpisz:
sh:grub> set pager=1
Używanie środowiska powłoki poleceń do uruchamiania systemów operacyjnych
grub>
Środowisko powłoki poleceń GRUB-a może być używane do uruchamiania systemów operacyjnych. Powszechnym scenariuszem może być uruchamianie systemu Windows / Linux przechowywanego na dysku / partycji poprzez ładowanie łańcuchowe.
Ładowanie łańcuchowe oznacza ładowanie innego boot-loadera z bieżącego, tj. ładowanie łańcuchowe.
Inny program ładujący może być osadzony na początku dysku partycjonowanego (MBR), na początku partycji lub dysku bez partycji (VBR) lub jako plik binarny EFI w przypadku UEFI.
Łańcuchowe ładowanie VBR partycji
set root=(hdX,Y) chainloader +1 boot
X=0,1,2... Y=1,2,3...
Na przykład do łańcuchowego ładowania systemu Windows zapisanego na pierwszej partycji pierwszego dysku twardego,
set root=(hd0,1) chainloader +1 boot
Podobnie GRUB zainstalowany na partycji może być ładowany łańcuchowo.
Łańcuchowe ładowanie MBR dysku lub VBR dysku bez partycji
set root=hdX chainloader +1 boot
Ładowanie łańcuchowe systemu Windows/Linux zainstalowanego w trybie UEFI
insmod fat set root=(hd0,gpt4) chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi boot
insmod fat
służy do ładowania modułu systemu plików FAT w celu uzyskania dostępu do programu ładującego Windows na partycji systemowej EFI.
(hd0,gpt4)
lub /dev/sda4
jest partycją systemową EFI w tym przykładzie.
Wpis w linii chainloader
określa ścieżkę do pliku .efi, który ma zostać załadowany łańcuchowo.
Normalne ładowanie
Zobacz przykłady w #Korzystanie z konsoli ratunkowej
Korzystanie z konsoli ratunkowej
Najpierw zobacz #Używanie powłoki poleceń. Jeśli nie można aktywować standardowej powłoki, jednym z możliwych rozwiązań jest uruchomienie systemu przy użyciu Live CD lub innego dysku ratunkowego, aby poprawić błędy konfiguracji i ponownie zainstalować GRUB. Jednak taki dysk rozruchowy nie zawsze jest dostępny (ani konieczny); konsola ratunkowa jest zaskakująco solidna.
Dostępne polecenia w GRUB rescue obejmują insmod
, ls
, set
i unset
. W tym przykładzie użyto set
i insmod
. set
modyfikuje zmienne, a insmod
wstawia nowe moduły w celu dodania funkcjonalności.
Przed uruchomieniem użytkownik musi znać lokalizację swojej partycji /boot
(może to być oddzielna partycja lub podkatalog w katalogu głównym):
grub rescue> set prefix=(hdX,Y)/boot/grub
gdzie X
to numer dysku fizycznego, a Y
to numer partycji.
/boot
ze ścieżki (tj. wpisz set prefix=(hdX,Y)/grub
).Aby rozszerzyć możliwości konsoli, należy dodać moduł linux
:
grub rescue> insmod i386-pc/linux.mod
lub po prostu
grub rescue> insmod linux
Wprowadza to polecenia linux
i initrd
, które powinny być znane.
Przykładem może być uruchomienie Arch Linux:
set root=(hd0,5) linux /boot/vmlinuz-linux root=/dev/sda5 initrd /boot/initramfs-linux.img boot
W przypadku oddzielnej partycji rozruchowej (np. podczas korzystania z UEFI), ponownie zmień odpowiednio linie:
set root=(hd0,5) linux (hdX,Y)/vmlinuz-linux root=/dev/sda6 initrd (hdX,Y)/initramfs-linux.img boot
error: premature end of file /YOUR_KERNEL_NAME
podczas wykonywania polecenia linux
, można zamiast tego spróbować linux16
.Po pomyślnym uruchomieniu instalacji Arch Linux, użytkownicy mogą poprawić grub.cfg
w razie potrzeby, a następnie ponownie zainstalować GRUB.
Aby ponownie zainstalować GRUB i całkowicie naprawić problem, zmieniając /dev/sda
w razie potrzeby. Zobacz #Instalacja po szczegóły.
Usuwanie GRUB-a
Systemy UEFI
Przed usunięciem grub upewnij się, że jakiś inny bootloader jest zainstalowany i skonfigurowany do przejęcia.
$ efibootmgr
BootOrder: 0003,0001,0000,0002 Boot0000* Windows Boot Manager HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi) Boot0001* GRUB HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\GRUB\grubx64.efi) Boot0002* Linux-Firmware-Updater HD(2,GPT,5dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\arch\fwupdx64.efi) Boot0003* Linux Boot Manager HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\systemd\systemd-bootx64.efi)
Jeśli BootOrder
ma grub jako pierwszy wpis, zainstaluj inny bootloader, aby umieścić go z przodu, taki jak systemd-boot powyżej. grub można następnie usunąć używając jego bootnum.
# efibootmgr --delete-bootnum -b 1
Usuń także katalogi esp/EFI/grub
i /boot/grub
.
Systemy BIOS
Aby zastąpić grub dowolnym innym programem ładującym BIOS, wystarczy go zainstalować, co spowoduje nadpisanie kodu rozruchowego MBR.
grub-install
tworzy katalog /boot/grub
, który musi zostać usunięty ręcznie. Chociaż niektórzy użytkownicy będą chcieli go zachować, jeśli będą chcieli ponownie zainstalować grub.
Po migracji do UEFI/GPT można chcieć usunąć kod rozruchowy MBR za pomocą dd.
Rozwiązywanie problemów
Nieobsługiwane systemy plików
W przypadku, gdy GRUB nie obsługuje głównego systemu plików, należy utworzyć alternatywną partycję /boot
z obsługiwanym systemem plików. W niektórych przypadkach wersja rozwojowa GRUB-a grub-gitAUR może mieć natywną obsługę systemu plików.
Jeśli GRUB jest używany z nieobsługiwanym systemem plików, nie jest w stanie wyodrębnić UUID dysku, więc zamiast tego używa klasycznych nietrwałych nazw /dev/sdXx
. W takim przypadku może być konieczna ręczna edycja /boot/grub/grub.cfg
i zastąpienie root=/dev/sdXx
root=UUUID=XXXXXXXX-XXXX-XXXX-XXXXXXXXXX
. Możesz użyć polecenia blkid
, aby uzyskać identyfikator UUID urządzenia, zobacz Persistent block device naming.
Podczas gdy GRUB obsługuje F2FS od wersji 2.0.4, nie może poprawnie odczytać plików rozruchowych z partycji F2FS, która została utworzona z włączoną flagą extra_attr
.
Włączanie komunikatów debugowania
Dodaj:
set pager=1 set debug=all
do grub.cfg
.
Komunikat o błędzie w stylu msdos
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding will not be possible! grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and its use is discouraged. grub-setup: error: If you really want blocklists, use --force.
Ten błąd może wystąpić podczas próby instalacji GRUB w kontenerze VMware. Więcej informacji na ten temat tutaj. Dzieje się tak, gdy pierwsza partycja zaczyna się tuż po MBR (blok 63), bez zwykłej przestrzeni 1 MiB (2048 bloków) przed pierwszą partycją. Przeczytaj #Instrukcje specyficzne dla tablicy partycji GUID (GPT)
UEFI
Typowe błędy instalacji
- Błąd, który może wystąpić na niektórych urządzeniach UEFI to
Could not prepare Boot variable: Read-only file system
Należy ponownie zamontować/sys/firmware/efi/efivars
z włączoną opcją odczytu i zapisu.# mount -o remount,rw,nosuid,nodev,noexec --types efivarfs efivarfs /sys/firmware/efi/efivars
. Zobacz Gentoo Wiki na temat instalacji bootloadera. - Jeśli masz problem z uruchomieniem grub-install z sysfs lub procfs i jest napisane, że musisz uruchomić
modprobe efivarfs
spróbuj mounting the efivarfs z powyższym poleceniem. - Bez opcji
--target
lub--directory
, grub-install nie może określić, który firmware zainstalować. W takich przypadkachgrub-install
wypiszesource_dir does not exist. Please specify --target or --directory
. - Jeśli po uruchomieniu grub-install pojawi się
error: esp doesn't look like an EFI partition
, to najprawdopodobniej partycja nie jest sformatowana w FAT32.
Tworzenie wpisu GRUB w menedżerze rozruchu oprogramowania układowego
grub-install
automatycznie próbuje utworzyć pozycję menu w menedżerze rozruchu. Jeśli tak się nie stanie, zobacz UEFI#efibootmgr, aby uzyskać instrukcje dotyczące użycia efibootmgr
do utworzenia wpisu menu. Problemem może być jednak to, że nie uruchomiłeś płyty CD/USB w trybie UEFI, jak w UEFI#Create UEFI bootable USB from ISO.
Jako kolejny przykład tworzenia wpisu GRUB w menedżerze rozruchu oprogramowania układowego, rozważ efibootmgr -c
. Zakłada on, że /dev/sda1
jest partycją systemową EFI i jest zamontowany w /boot/efi
. Które są domyślnym zachowaniem efibootmgr
. Tworzy nową opcję rozruchu o nazwie „Linux” i umieszcza ją na początku listy kolejności rozruchu. Opcje mogą być przekazywane w celu modyfikacji domyślnego zachowania. Domyślnym programem ładującym system operacyjny jest \EFI\arch\grub.efi
.
Zrzut do powłoki ratunkowej
Jeśli GRUB ładuje się, ale spada do powłoki ratunkowej bez żadnych błędów, może to być spowodowane jednym z tych dwóch powodów:
- Może to być spowodowane brakiem lub błędem
grub.cfg
. Stanie się tak, jeśli GRUB UEFI został zainstalowany z--boot-directory
i brakujegrub.cfg
, - Zdarza się to również, jeśli partycja rozruchowa, która jest zakodowana w pliku
grubx64.efi
, uległa zmianie.
GRUB UEFI nie został załadowany
Przykład działającego UEFI:
# efibootmgr -u
BootCurrent: 0000 Timeout: 3 seconds BootOrder: 0000,0001,0002 Boot0000* GRUB HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EFI\GRUB\grubx64.efi) Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\shellx64.efi) Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI
Jeśli ekran jest czarny tylko przez sekundę, a następnie próbowana jest następna opcja rozruchu, zgodnie z tym postem, przeniesienie GRUB-a do katalogu głównego partycji może pomóc. Opcja rozruchu musi zostać usunięta, a następnie ponownie utworzona. Wpis dla GRUB powinien wyglądać następująco:
Boot0000* GRUB HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grubx64.efi)
Domyślna/zastępcza ścieżka rozruchowa
Niektóre oprogramowania sprzętowe UEFI wymagają pliku rozruchowego w znanej lokalizacji, zanim pokażą wpisy rozruchowe UEFI NVRAM. W takim przypadku grub-install
będzie twierdzić, że efibootmgr
dodał wpis do rozruchu GRUB-a, jednak wpis ten nie pojawi się w selektorze kolejności rozruchu VisualBIOS. Rozwiązaniem jest zainstalowanie GRUB-a na domyślnej/zastępczej ścieżce rozruchowej:
# grub-install --target=x86_64-efi --efi-directory=esp --removable
Alternatywnie można przenieść już zainstalowany plik wykonywalny GRUB EFI do ścieżki domyślnej/zwrotnej:
# mv esp/EFI/grub esp/EFI/BOOT # mv esp/EFI/BOOT/grubx64.efi esp/EFI/BOOT/BOOTX64.EFI
Nieprawidłowa sygnatura
Jeśli próba uruchomienia systemu Windows powoduje błąd „nieprawidłowego podpisu”, np. po zmianie konfiguracji partycji lub dodaniu dodatkowych dysków twardych, należy (ponownie) przenieść konfigurację urządzenia GRUB i pozwolić mu na ponowną konfigurację:
# mv /boot/grub/device.map /boot/grub/device.map-old # grub-mkconfig -o /boot/grub/grub.cfg
grub-mkconfig
powinno teraz wymieniać wszystkie znalezione opcje rozruchu, w tym Windows. Jeśli to działa, usuń /boot/grub/device.map-old
.
Rozruch zawiesza się
Jeśli uruchamianie utknie bez żadnego komunikatu o błędzie po załadowaniu jądra i początkowego ramdysku przez GRUB, spróbuj usunąć parametr jądra add_efi_memmap
.
Arch nie znaleziony w innym systemie operacyjnym
Niektórzy donoszą, że inne dystrybucje mogą mieć problemy z automatycznym znalezieniem Arch Linuksa za pomocą os-prober
. Jeśli ten problem wystąpi, donoszono, że wykrywanie może być poprawione dzięki obecności /etc/lsb-release
. Ten plik i narzędzie aktualizujące jest dostępne z pakietem lsb-release.
Ostrzeżenie podczas instalacji w chroot
Podczas instalacji GRUB-a na systemie LVM w środowisku chroot (np. podczas instalacji systemu) mogą pojawić się ostrzeżenia takie jak
/run/lvm/lvmetad.socket: connect failed: No such file or directory
lub
WARNING: failed to connect to lvmetad: No such file or directory. Falling back to internal scanning.
Dzieje się tak, ponieważ /run
nie jest dostępny wewnątrz chroot. Ostrzeżenia te nie uniemożliwią uruchomienia systemu, pod warunkiem, że wszystko zostało wykonane poprawnie, więc można kontynuować instalację.
GRUB ładuje się powoli
GRUB can take a long time to load when disk space is low. Check if you have sufficient free disk space on your /boot
or /
partition when you are having problems.
error: unknown filesystem
GRUB może wyświetlić error: unknown filesystem
i odmówić uruchomienia z kilku powodów. Jeśli jesteś pewien, że wszystkie UUID są poprawne, a wszystkie systemy plików są prawidłowe i obsługiwane, może to być spowodowane tym, że BIOS Boot Partition znajduje się poza pierwszymi 2 TiB dysku [4]. Użyj wybranego narzędzia do partycjonowania, aby upewnić się, że ta partycja znajduje się w całości w pierwszych 2 TiB, a następnie ponownie zainstaluj i skonfiguruj GRUB.
Błąd ten może być również spowodowany przez system plików ext4 z nieobsługiwanym zestawem funkcji:
large_dir
- nieobsługiwany.metadata_csum_seed
- będzie obsługiwany w GRUB 2.11 (commit).
/boot
.grub-reboot nie resetuje się
GRUB wydaje się nie być w stanie zapisywać na partycjach root Btrfs [5]. Jeśli użyjesz grub-reboot do uruchomienia innego wpisu, nie będzie on w stanie zaktualizować swojego środowiska na dysku. Uruchom grub-reboot z innego wpisu (na przykład podczas przełączania się między różnymi dystrybucjami) lub rozważ inny system plików. Możesz zresetować „lepki” wpis, wykonując grub-editenv create
i ustawiając GRUB_DEFAULT=0
w /etc/default/grub
(nie zapomnij o grub-mkconfig -o /boot/grub/grub.cfg
).
Stary Btrfs uniemożliwia instalację
Jeśli dysk zostanie sformatowany za pomocą Btrfs bez tworzenia tablicy partycji (np. /dev/sdx), a następnie zostanie zapisana tablica partycji, niektóre części formatu BTRFS pozostaną. Większość narzędzi i systemów operacyjnych tego nie widzi, ale GRUB odmówi instalacji, nawet z --force
# grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels. This is not supported yet.. # grub-install: error: filesystem `btrfs' does not support blocklists.
Możesz wyzerować dysk, ale najprostszym rozwiązaniem, które pozostawia dane w spokoju, jest wymazanie superbloku Btrfs za pomocą wipefs -o 0x10040 /dev/sdx
.
Nie znaleziono systemu Windows 8/10
Ustawienie w Windows 8/10 o nazwie „Hiberboot”, „Hybrid Boot” lub „Fast Boot” może uniemożliwić zamontowanie partycji Windows, więc grub-mkconfig
nie znajdzie instalacji Windows. Wyłączenie Hiberboot w Windows pozwoli na dodanie go do menu GRUB.
GRUB Rescue i zaszyfrowany /boot
Podczas korzystania z zaszyfrowanego /boot[broken link: invalid section], jeśli nie wprowadzisz poprawnego hasła, zostaniesz przeniesiony do powłoki grub-rescue.
Ten monit grub-rescue ma ograniczone możliwości. Użyj następujących poleceń, aby ukończyć rozruch:
grub rescue> cryptomount <partition> grub rescue> insmod normal grub rescue> normal
Zobacz ten post na blogu[dead link 2023-04-23 ⓘ] dla lepszego opisu.
Sprawdź /etc/default/grub
czy GRUB_TIMEOUT
jest ustawiony na 0
, w takim przypadku ustaw go na liczbę dodatnią: ustawia on liczbę sekund przed załadowaniem domyślnego wpisu GRUB. Sprawdź również, czy GRUB_TIMEOUT_STYLE
jest ustawiony na hidden
i ustaw go na menu
, aby menu było wyświetlane domyślnie. Następnie regeneruj główny plik konfiguracyjny i uruchom ponownie komputer, aby sprawdzić, czy wszystko działa.
Jeśli to nie zadziała, mogą występować problemy z niekompatybilnością terminala graficznego. Ustaw GRUB_TERMINAL_OUTPUT
na console
w /etc/default/grub
, aby wyłączyć terminal graficzny GRUB-a.