GRUB (Polski)

Status tłumaczenia:
Ten artykuł jest przetłumaczoną wersją
GRUB
. Data ostatniego tłumaczenia: 2024-05-05. Możesz pomóc zsynchronizować tłumaczenie, jeśli nastąpiły
zmiany
w wersji angielskiej.
Powiązane artykuły
Arch boot process
Master Boot Record
GUID Partition Table
Unified Extensible Firmware Interface
GRUB Legacy
GRUB/EFI examples
GRUB/Tips and tricks
Multiboot USB drive
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.
Uwaga
W całym artykule
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ń.
Ostrzeżenie
Systemy plików mogą uzyskać nowe funkcje, które nie są jeszcze obsługiwane przez GRUB, czyniąc je nieodpowiednimi dla
/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
Uwaga
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
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 EFI
grubx64.efi
w systemie z włączonym Secure Boot, musisz ponownie wygenerować GRUB EFI
grubx64.efi
za pomocą
grub-mkstandalone
lub ponownie zainstalować GRUB za pomocą
grub-install
z dołączonymi dodatkowymi modułami GRUB.
Instalacja
Uwaga
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
przez
i386-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 w
esp
/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
do
esp
/EFI/GRUB/
i zainstalować jej moduły do
/boot/grub/x86_64-efi/
.
Uwaga
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 uruchamiania
grub-install
. Jeśli z jakiegoś powodu konieczne jest uruchomienie
grub-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
# 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.
Wskazówka
Jeśli użyjesz opcji
--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.
Uwaga
--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 poleceniu
grub-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ć.
Ostrzeżenie
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
Uwaga
Przed przystąpieniem do tej sekcji powinieneś upewnić się, że postępowałeś zgodnie z instrukcjami w
Secure Boot#shim
i masz
sbsigntools
skonfigurowane i gotowe do odbierania kluczy
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 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.
Uwaga
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-legacy
AUR
, 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.
Wskazówka
Inne sposoby instalacji GRUBa (np. instlacja na pamięci USB) opisano w
GRUB/Tips and tricks#Alternative installation methods
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
.
Uwaga
Pamiętaj, aby zawsze
regenerować główny plik konfiguracyjny
po dokonaniu zmian w
/etc/default/grub
i/lub plikach w
/etc/grub.d/
.
Ostrzeżenie
Zaktualizuj/zreinstaluj bootloader (zobacz
#Systemy UEFI
albo
#Systemy BIOS
) jeśli nowa wersja GRUB-a zmieni składnię pliku konfiguracyjnego: niedopasowana konfiguracja może skutkować niemożliwym do uruchomienia systemem. Na przykład, nowa konfiguracja może wykorzystywać funkcję nieznaną istniejącemu plikowi binarnemu GRUB-a, powodując nieoczekiwane zachowanie.
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.
Uwaga
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.
Wskazówka
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.
Wskazówka
/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.
Uwaga
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.
Wskazówka
Możesz również chcieć, aby GRUB zapamiętał ostatnio wybrany wpis rozruchowy, zobacz
GRUB/Tips and tricks#Recall previous entry
.
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.
Uwaga
W przypadku systemu Windows zainstalowanego w trybie BIOS:
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
dislocker
AUR
. 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
.
Ustawianie pozycji menu najwyższego poziomu
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
Ostrzeżenie
GRUB nie obsługuje woluminów logicznych thin-provisioned
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
.
Uwaga
GRUB obsługuje bootowanie z
Btrfs
. RAID 0/1/10, ale
nie
RAID 5/6. Możesz użyć
mdadm
dla RAID 5/6, który jest obsługiwany przez GRUB.
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
.
Wskazówka
/boot
nie musi znajdować się na oddzielnej partycji; może również pozostać w głównym drzewie katalogów
/
systemu
Ostrzeżenie
GRUB 2.12rc1 ma ograniczoną obsługę LUKS2. Szczegółowe informacje znajdują się w sekcji
#LUKS2
poniżej.
Aby 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
.
Ostrzeżenie
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
.
Uwaga
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 polecenia
grub-install
.
Wskazówka
Możesz użyć
hooków pacmana
do automatycznego zamontowania
/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.
Wskazówka
Możesz użyć
grub-improved-luks2-git
AUR
, 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]
Uwaga
Przed GRUB 2.12rc1, trzeba było ręcznie utworzyć plik binarny EFI używając
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:
(hd
X
,
Y
)
jest partycją
Y
na dysku
X
, numery partycji zaczynają się od 1, numery dysków zaczynają się od 0
set default=
N
to domyślny wpis rozruchowy, który jest wybierany po upływie limitu czasu dla akcji użytkownika
set timeout=
M
to czas
M
oczekiwania w sekundach na wybór użytkownika przed uruchomieniem domyślnej opcji
menuentry „title” {opcje wpisu}
to wpis startowy zatytułowany
title
.
set root=(hd
X
,
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
Przykłady wpisów w menu startowym
Wskazówka
Te wpisy rozruchowe mogą być również używane podczas korzystania z
/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
Pozycja menu „Shutdown” (Zamknij)
menuentry "Wyłączenie systemu" {
	echo "Wyłącznie systemu..."
	halt
}
Pozycja menu „Ponowne uruchomienie systemu”
menuentry "Ponowne uruchomienie systemu" {
	echo "Ponowne uruchamianie systemu..."
	reboot
}
Pozycja menu „Ustawienia oprogramowania sprzętowego UEFI”
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.
Wskazówka
Aby wyświetlić te pozycje menu tylko wtedy, gdy GRUB jest uruchomiony w trybie UEFI, dołącz je do następującej instrukcji
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.
Uwaga
Ta pozycja menu będzie działać tylko w trybie rozruchowym UEFI i tylko wtedy, gdy bitowość systemu Windows jest zgodna z bitowością UEFI. Nie będzie działać w GRUB-ie zainstalowanym w BIOS-ie. Zobacz
Dual boot with Windows#Windows UEFI vs BIOS limitations
i
Dual boot with Windows#Boot loader UEFI vs BIOS limitations
aby uzyskać więcej informacji.
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
Uwaga
GRUB obsługuje uruchamianie
bootmgr
bezpośrednio i
chainloading
sektora rozruchowego partycji nie jest już wymagane do uruchomienia systemu Windows w konfiguracji BIOS/MBR.
Ostrzeżenie
Jest to
partycja systemowa
, która ma
/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
.
Uwaga
Te pozycje menu będą działać tylko w trybie rozruchu BIOS. Nie będą działać w GRUB zainstalowanym w UEFI. Zobacz
Dual boot with Windows#Windows UEFI vs BIOS limitations
i
Dual boot with Windows#Boot loader UEFI vs BIOS limitations
.
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
Uwaga
W niektórych przypadkach GRUB może zostać zainstalowany bez czystego systemu Windows 8, w którym to przypadku nie można uruchomić systemu Windows bez wystąpienia błędu
\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=(hd
X
,
Y
)/boot/grub
gdzie
X
to numer dysku fizycznego, a
Y
to numer partycji.
Uwaga
W przypadku oddzielnej partycji rozruchowej pomiń
/boot
ze ścieżki (tj. wpisz
set prefix=(hd
X
,
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:
Uwaga
Ponieważ partycja rozruchowa jest oddzielną partycją i nie jest częścią partycji głównej, należy ręcznie zaadresować partycję rozruchową w taki sam sposób, jak w przypadku zmiennej prefiksu.
set root=(hd0,5)
linux (hd
X
,
Y
)/vmlinuz-linux root=/dev/sda6
initrd (hd
X
,
Y
)/initramfs-linux.img
boot
Uwaga
Jeśli doświadczyłeś
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-git
AUR
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
Uwaga
Ta zmiana jest nadpisywana podczas
generowania głównego pliku konfiguracyjnego
.
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 przypadkach
grub-install
wypisze
source_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-directory
i brakuje
grub.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
).
Ostrzeżenie
Upewnij się, że sprawdziłeś wsparcie GRUB-a dla nowych funkcji
systemu plików
przed włączeniem ich w systemie plików
/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.
GRUB jest zainstalowany, ale menu nie jest wyświetlane przy starcie systemu
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.
Zobacz także
Wikipedia:GNU GRUB
Oficjalny podręcznik GRUB
Strona wiki Ubuntu dla GRUB-a
Strona wiki GRUB opisująca kroki kompilacji dla systemów UEFI
Wikipedia:BIOS Boot partition
Jak skonfigurować GRUB-a