GRUB és el programa que apareix just després d’encendre l’ordinador i abans que arrenqui Linux: el gestor d’arrencada. És el que mostra el menú per triar sistema operatiu o versió del nucli, carrega el nucli i l’initramfs a la memòria i hi passa els paràmetres d’arrencada. En aquesta guia veuràs com està organitzat, com configurar-lo correctament, com fer servir la seva línia de comandes i com fer-lo servir per recuperar un sistema que no arrenca o del qual has perdut la contrasenya.
Història i propòsit
GRUB (GRand Unified Bootloader) el va començar Erich Boleyn el 1995 i aviat va passar a formar part del projecte GNU, on el van continuar Gordon Matzigkeit i Yoshinori K. Okuji. Va néixer per superar els gestors d’arrencada de l’època, que eren molt limitats: GRUB entén els sistemes de fitxers (pot llegir el nucli directament d’una partició ext4, per exemple), permet arrencar diversos sistemes operatius i té una línia de comandes pròpia per resoldre problemes.
N’hi ha hagut dues generacions:
- GRUB Legacy (fins a la versió 0.97): el fitxer de configuració era
menu.lst, s’editava a mà i les particions es numeraven des de 0. Ja no es fa servir. - GRUB 2: el que porten totes les distribucions actuals (Debian 13 inclou la 2.12). La configuració es genera automàticament i és la que es descriu en aquesta guia.
Un apunt: el Raspberry Pi no fa servir GRUB. El seu firmware arrenca directament el nucli, i la configuració és a config.txt i cmdline.txt (a /boot/firmware/ a Raspberry Pi OS).
Com funciona l’arrencada
En un equip amb UEFI (gairebé tots els d’avui), el firmware busca a la partició EFI (/boot/efi) l’executable de GRUB (grubx64.efi, o shimx64.efi si hi ha arrencada segura). En equips antics amb BIOS, la primera part de GRUB és al principi del disc. Després, GRUB llegeix el fitxer grub.cfg, mostra el menú, carrega el nucli (vmlinuz-…) i l’initramfs (initrd.img-…) i hi cedeix el control.
Fitxers i directoris
| Fitxer o directori | Què conté |
|---|---|
/etc/default/grub | La configuració que has d’editar: temps d’espera, entrada per defecte, paràmetres del nucli… |
/etc/grub.d/ | Scripts que generen el menú, en ordre numèric: 00_header, 10_linux (els nuclis instal·lats), 30_os-prober (altres sistemes), 40_custom (les teves entrades)… |
/boot/grub/grub.cfg | El menú final. Es genera automàticament: no l’editis, perquè es sobreescriu cada vegada que s’actualitza el nucli |
/boot/grub/ | Mòduls, tipus de lletra (fonts/), temes (themes/) i el fitxer d’entorn grubenv |
A Fedora, RHEL, Rocky i Alma el directori és /boot/grub2/, i les entrades de cada nucli es desen com a fitxers separats a /boot/loader/entries/ (format BLS).
Després de qualsevol canvi a /etc/default/grub o a /etc/grub.d/, cal regenerar grub.cfg:
# Debian, Ubuntu i derivades
sudo update-grub
# Fedora, RHEL, Rocky, Alma
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Configuració bàsica: /etc/default/grub
Aquest és el fitxer que ve per defecte a Debian 13 (sense els comentaris):
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`( . /etc/os-release && echo ${NAME} )`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
Les variables més útils:
| Variable | Què fa |
|---|---|
GRUB_TIMEOUT=5 | Segons que espera abans d’arrencar l’entrada per defecte. 0 arrenca de seguida, -1 espera indefinidament |
GRUB_TIMEOUT_STYLE | menu mostra el menú; hidden l’amaga (és el que fa Ubuntu en equips amb un sol sistema) |
GRUB_DEFAULT | Entrada per defecte: un número (comptant des de 0), l’identificador de l’entrada o saved |
GRUB_SAVEDEFAULT=true | Amb GRUB_DEFAULT=saved, recorda l’última entrada triada |
GRUB_CMDLINE_LINUX_DEFAULT | Paràmetres del nucli només per a l’arrencada normal (no per a la de recuperació), p. ex. quiet splash |
GRUB_CMDLINE_LINUX | Paràmetres del nucli per a totes les entrades |
GRUB_DISABLE_OS_PROBER | A false, busca altres sistemes operatius (Windows, altres Linux) i els afegeix al menú |
GRUB_BACKGROUND | Imatge de fons (.png, .jpg o .tga) |
GRUB_THEME | Ruta al theme.txt d’un tema |
Per exemple, per veure tots els missatges d’arrencada (molt útil per diagnosticar), treu quiet de GRUB_CMDLINE_LINUX_DEFAULT, desa i executa sudo update-grub.
Si el menú no apareix
Si GRUB_TIMEOUT_STYLE=hidden o només hi ha un sistema instal·lat, GRUB pot no mostrar el menú. Mantén premuda la tecla Maj (equips amb BIOS) o prem Esc repetidament (equips amb UEFI) just després d’encendre. Si vols que surti sempre, posa GRUB_TIMEOUT_STYLE=menu i un GRUB_TIMEOUT més gran que 0.
Canviar l’entrada per defecte
# Per a la propera arrencada només
sudo grub-reboot 2
# De manera permanent (requereix GRUB_DEFAULT=saved)
sudo grub-set-default 2
El número és la posició al menú, comptant des de 0. Si l’entrada és dins d’un submenú (com «Advanced options for Debian»), cal indicar-ne el camí amb >, p. ex. "1>2". A Fedora i RHEL les comandes es diuen grub2-reboot i grub2-set-default, i per canviar paràmetres del nucli es fa servir grubby.
Entrades personalitzades
Les entrades pròpies van a /etc/grub.d/40_custom, no a grub.cfg. El fitxer ja té aquesta capçalera, que no s’ha de tocar:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
A sota pots afegir entrades. Per exemple, una que arrenca el nucli en mode de rescat:
menuentry "Debian (mode de rescat)" {
search --no-floppy --fs-uuid --set=root 8abab6b9-ef90-4fee-ae3d-91079bfae7c1
linux /vmlinuz root=UUID=8abab6b9-ef90-4fee-ae3d-91079bfae7c1 ro systemd.unit=rescue.target
initrd /initrd.img
}
search --fs-uuid --set=rootbusca la partició per UUID (el pots veure ambblkid) i la fa servir com a arrel per a GRUB. És molt més fiable que escriureset root=(hd0,1), que deixa de funcionar si canvia l’ordre dels discos.linuxindica el nucli i els seus paràmetres;initrd, la imatge inicial. A Debian i Ubuntu,/vmlinuzi/initrd.imgsolen ser enllaços al nucli més recent. Si tens/booten una partició separada, les rutes són relatives a aquella partició (/vmlinuz-…).
Després, sudo update-grub. Per a l’arrencada dual amb Windows o una altra distribució no cal escriure res a mà: activa os-prober (GRUB_DISABLE_OS_PROBER=false) i regenera el menú.
Personalitzar l’aparença
GRUB_BACKGROUND="/boot/grub/fons.png"
GRUB_BACKGROUND és una imatge, no un color. Per a un canvi més complet, fes servir un tema:
- Copia’l a
/boot/grub/themes/el_meu_tema/. - Afegeix a
/etc/default/grub:GRUB_THEME="/boot/grub/themes/el_meu_tema/theme.txt". - Executa
sudo update-grub.
Fixa’t que tant la imatge com el tema han de ser en una partició que GRUB pugui llegir en arrencar (millor dins de /boot/grub/).
Canviar opcions per a una sola arrencada
Al menú de GRUB, selecciona una entrada i prem e. Veuràs el seu contingut i el podràs editar. Busca la línia que comença per linux i afegeix-hi paràmetres al final, per exemple:
nomodeset: no carrega els controladors gràfics del nucli (útil si la pantalla queda en negre).systemd.unit=rescue.target: mode de rescat (un sol usuari, amb el sistema de fitxers muntat).systemd.unit=emergency.target: mode d’emergència (el mínim: l’arrel en només lectura).acpi=off: desactiva l’ACPI (només per a maquinari amb problemes; pot deixar l’equip sense gestió d’energia).
Després prem Ctrl+X o F10 per arrencar. El canvi no es desa: a la propera arrencada tot torna a ser com abans.
La línia de comandes de GRUB
Des del menú, prem c. També hi aniràs a parar automàticament (amb el prompt grub>) si GRUB no troba el seu grub.cfg. Les comandes més útils:
| Comanda | Què fa |
|---|---|
ls | Llista els discos i les particions: (hd0) (hd0,gpt1) (hd0,gpt2)… |
ls (hd0,gpt2)/ | Llista els fitxers d’una partició (la barra final és important) |
set | Mostra les variables (o n’assigna una: set root=(hd0,gpt2)) |
search --fs-uuid --set=root UUID | Busca una partició pel seu UUID i la fa servir d’arrel |
cat (hd0,gpt2)/etc/fstab | Mostra un fitxer |
linux, initrd, boot | Carreguen el nucli i l’initramfs i arrenquen |
configfile (hd0,gpt2)/boot/grub/grub.cfg | Carrega un altre fitxer de menú |
help | Llista les comandes |
A GRUB 2 els discos es numeren des de 0 i les particions des d’1, i el nom inclou el tipus de taula de particions: (hd0,gpt2) és la segona partició del primer disc amb taula GPT; (hd0,msdos1), la primera d’un disc amb MBR. La tecla Tab completa noms de dispositius i de fitxers.
Arrencar a mà un sistema
Si GRUB no troba la configuració però el sistema és sencer, pots arrencar-lo així (adapta la partició i les rutes al que vegis amb ls):
grub> ls
grub> ls (hd0,gpt2)/
grub> set root=(hd0,gpt2)
grub> linux /vmlinuz root=/dev/sda2 ro
grub> initrd /initrd.img
grub> boot
Un cop dins, repara GRUB definitivament, per exemple amb sudo update-grub i, si cal, sudo grub-install.
Errors habituals
error: no such partition: la partició indicada no existeix (has canviat discos o l’ordre). Feslsper veure les que hi ha i fes servirsearch --fs-uuiden lloc de noms fixos.error: file '/vmlinuz…' not found: el nucli no és on GRUB el busca, sovint perquè s’ha esborrat o perquè/bootés en una altra partició. Comprova la ruta ambls.- Prompt
grub rescue>: GRUB ni tan sols troba els seus mòduls. Arrenca des d’un USB de la distribució i reinstal·la GRUB.
Recuperar l’accés com a root
Si has oblidat la contrasenya o el sistema no arrenca bé, GRUB permet entrar-hi amb una consola de root:
- Mostra el menú de GRUB i, sobre l’entrada del sistema, prem
e. - A la línia que comença per
linux, afegeix al final una de les dues opcions que tens a continuació. - Prem Ctrl+X o F10.
Les dues opcions:
systemd.unit=rescue.target: arrenca el mode de rescat. Et demanarà la contrasenya de root, i si el compte de root està bloquejat (com a Ubuntu, o a Debian instal·lat ambsudo), és possible que no t’hi deixi entrar.init=/bin/bash: en lloc d’arrencar el sistema, obre directament una consola de root, sense demanar contrasenya.
Amb init=/bin/bash ja ets root, de manera que no cal su -. Però el sistema de fitxers arrel està muntat en només lectura, i abans de canviar res cal tornar-lo a muntar en lectura i escriptura:
mount -o remount,rw /
passwd joan # canvia la contrasenya de l'usuari joan (o passwd, per a root)
sync
exec /sbin/init # continua l'arrencada normal
En aquest mode no hi ha systemd en marxa, de manera que reboot no funciona com sempre: fes servir exec /sbin/init o reboot -f (després del sync).
A Ubuntu, el menú «Advanced options» té entrades de recovery mode amb una opció «root – Drop to root shell prompt» que fa una cosa semblant.
Seguretat
Això vol dir que qualsevol persona amb accés físic a l’equip pot obtenir una consola de root. Per evitar-ho:
- Protegeix GRUB amb contrasenya: genera’n un hash amb
grub-mkpasswd-pbkdf2i afegeix-lo (ambset superusersipassword_pbkdf2) a/etc/grub.d/40_custom. - Xifra el disc amb LUKS: és l’única protecció real, perquè sense la clau ningú pot llegir les dades encara que arrenqui des d’un USB.
Articles relacionats
- El procés d’arrencada de Linux.
- Què és l’initramfs.
- El muntatge de la partició arrel durant l’arrencada.
- Resoldre un kernel panic després d’actualitzar el nucli.
blkid: veure l’UUID de les particions.- Documentació oficial: GNU GRUB.