Comandes LinuxInformació del sistema LinuxLinuxNotas

Initramfs a Linux: què és, com funciona i com personalitzar-lo



Durant l’arrencada de Linux hi ha un moment delicat: el nucli (kernel) ja s’està executant, però encara no pot llegir el disc on hi ha el sistema, perquè potser li falta el controlador del disc, del sistema de fitxers, del RAID o de l’LVM, o perquè la partició està xifrada. La peça que resol aquest problema és l’initramfs (initial RAM filesystem): un petit sistema de fitxers temporal que es carrega a la memòria RAM i que conté just el necessari per trobar i muntar la partició arrel.

En aquest post t’explico què és, com veure què hi ha a dins i com personalitzar-lo a Debian i Ubuntu (i quines eines s’hi fan servir a altres distribucions).

Com funciona

  1. El carregador d’arrencada (GRUB, o el firmware al Raspberry Pi) carrega a la memòria dos fitxers: el nucli (vmlinuz-…) i l’initramfs (initrd.img-… a Debian/Ubuntu, initramfs-….img a Fedora/RHEL).
  2. El nucli descomprimeix l’initramfs a la RAM i hi executa el programa /init.
  3. Aquest programa carrega els mòduls necessaris, prepara el disc (desxifrar-lo, activar l’LVM o el RAID…) i munta la partició arrel real.
  4. Finalment, canvia a l’arrel real i hi executa el sistema d’inicialització (systemd), que continua l’arrencada.

Els fitxers són a /boot, un parell per a cada nucli instal·lat:

$ ls /boot/ | grep -E 'vmlinuz|initrd'
initrd.img-6.18.34+rpt-rpi-v8
initrd.img-6.18.39+rpt-rpi-v8
vmlinuz-6.18.34+rpt-rpi-v8
vmlinuz-6.18.39+rpt-rpi-v8

Veure què hi ha dins

A Debian i Ubuntu, lsinitramfs llista el contingut de la imatge sense haver-la de desempaquetar:

$ lsinitramfs /boot/initrd.img-$(uname -r) | grep -E '^(init|scripts/local)'
init
scripts/local
scripts/local-bottom
scripts/local-premount
...

Hi trobaràs el script init, els scripts de cada fase (scripts/), utilitats bàsiques (normalment BusyBox) i els mòduls del nucli necessaris (usr/lib/modules/…).

Configuració a Debian i Ubuntu (initramfs-tools)

La configuració principal és a /etc/initramfs-tools/initramfs.conf:

sudo nano /etc/initramfs-tools/initramfs.conf

Els paràmetres que més et poden interessar:

ParàmetreQuè fa
MODULESQuins mòduls s’inclouen: most (gairebé tots els de discos i sistemes de fitxers, el valor per defecte de Debian), dep (només els que detecta que necessita aquest equip; imatge més petita), netboot o list (només els de la llista de mòduls addicionals)
COMPRESSAlgorisme de compressió de la imatge (gzip, lz4, xz, zstd…)
BOOTlocal (per defecte, arrencada des d’un disc) o nfs per a una arrel per xarxa
BUSYBOXSi s’inclou BusyBox com a shell i utilitats (y, n, auto)

A Raspberry Pi OS, per exemple, ve configurat amb MODULES=dep i COMPRESS=zstd. Pots posar els teus canvis en un fitxer a /etc/initramfs-tools/conf.d/ en lloc de tocar el principal; així no es barregen amb les actualitzacions del paquet.

Afegir mòduls

Si necessites que un mòdul es carregui des del principi (per exemple, el controlador d’una controladora de disc), afegeix-lo a /etc/initramfs-tools/modules, un per línia (pots posar-hi paràmetres al costat del nom):

sudo nano /etc/initramfs-tools/modules

Scripts propis

Per a personalitzacions més avançades, pots afegir scripts a /etc/initramfs-tools/scripts/, dins del subdirectori de la fase en què s’han d’executar (init-top, local-top, local-premount, local-bottom, init-bottom…), i hooks a /etc/initramfs-tools/hooks/ per copiar fitxers a la imatge. El format està documentat a man initramfs-tools. Normalment no et caldrà: els paquets que ho necessiten (cryptsetup-initramfs, lvm2, mdadm…) ja hi instal·len els seus.

Regenerar la imatge

Els canvis no tenen efecte fins que tornes a generar l’initramfs:

sudo update-initramfs -u                 # el del nucli més recent
sudo update-initramfs -u -k all          # tots els nuclis instal·lats
sudo update-initramfs -u -k $(uname -r)  # només el nucli que fas servir ara

No et caldrà fer-ho a cada actualització: quan s’instal·la un nucli nou o un paquet que afecta l’arrencada, l’initramfs es regenera sol.

En altres distribucions

DistribucióEinaRegenerarVeure el contingut
Debian, Ubuntu, Raspberry Pi OSinitramfs-toolsupdate-initramfs -ulsinitramfs
Fedora, RHEL, Rocky, Alma, openSUSEdracutdracut -f (o dracut --regenerate-all -f)lsinitrd
Arch Linuxmkinitcpiomkinitcpio -Plsinitcpio

A dracut, els mòduls addicionals s’afegeixen amb un fitxer .conf a /etc/dracut.conf.d/ (per exemple, una línia add_drivers+=" nom_modul ") o amb l’opció --add-drivers en regenerar.

Prova-ho amb precaució

Un initramfs trencat pot fer que el sistema no arrenqui i et deixi en un shell d’emergència ((initramfs)). Abans de reiniciar:

  • Fes una còpia de seguretat de la imatge actual (sudo cp /boot/initrd.img-$(uname -r) /boot/initrd.img-$(uname -r).bak).
  • Conserva un nucli anterior instal·lat, perquè el puguis triar al menú de GRUB si el nou falla.
  • Si pots, prova els canvis primer en una màquina virtual.

Després de reiniciar, comprova amb journalctl -b i dmesg que tot s’ha carregat correctament.

Posts relacionats