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#UEFI 2.
- 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 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
insmodjest 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.efiw systemie z włączonym Secure Boot, musisz ponownie wygenerować GRUB EFIgrubx64.efiza pomocągrub-mkstandalonelub ponownie zainstalować GRUB za pomocągrub-installz 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-efiprzezi386-efitam, 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
espjej 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.efidoesp/EFI/GRUB/i zainstalować jej moduły do/boot/grub/x86_64-efi/.
- Uwaga:
- Upewnij się, że instalujesz pakiety i uruchamiasz polecenie
grub-installz 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-installspoza 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-idze 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-directoryi--bootloader-idsą specyficzne dla GRUB UEFI,--efi-directoryzastę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/insmodem, 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 uruchamiania -
cpuid: do procesora podczas uruchamiania -
tpm: 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ących -
luks: do uruchamiania z dysków szyfrowanych za pomocą LUKS: -
lvm: uruchamianie z dysków woluminów logicznych LVM -
mdraid09,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 bootdla fdisk. - Wybierz kod typu partycji
ef02dla gdisk. - Dla parted ustaw/aktywuj flagę
bios_grubna 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
mtabw 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
/bootjest zamontowany. - Aby wykonać aktualizacje systemu obejmujące punkt montowania
/boot, należy upewnić się, że zaszyfrowany/bootjest 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-installmoż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.
- Wskazówka: 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 0 -
set default=Nto domyślny wpis rozruchowy, który jest wybierany po upływie limitu czasu dla akcji użytkownika -
set timeout=Mto czas M oczekiwania w sekundach na wybór użytkownika przed uruchomieniem domyślnej opcji -
menuentry „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 systemNależy ponownie zamontować/sys/firmware/efi/efivarsz 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 efivarfsspróbuj mounting the efivarfs z powyższym poleceniem. - Bez opcji
--targetlub--directory, grub-install nie może określić, który firmware zainstalować. W takich przypadkachgrub-installwypiszesource_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 Installation guide (Polski)#Zweryfikuj tryb uruchomionego systemu.
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-directoryi 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, 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 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.