HowTo Slackware

Creare initrd su Slackware (mkinitrd)

Guida dedicata alla generazione dell'initrd con esempi pratici per filesystem, moduli e configurazione LILO/GRUB.

Se ti scoccia compilare a mano, prova il mio programma di compilazione automatica AV kernel gui: lo trovi nella sezione Download.
In Slackware l'initrd e' normalmente richiesto quando avvii un kernel generic. Se usi un kernel huge potresti non averne bisogno, ma per uso quotidiano e' consigliato generic + initrd.

1. Cos'e' l'initrd e quando serve

L'initrd (initramfs) e' un filesystem temporaneo caricato dal bootloader prima del kernel. Serve per caricare moduli essenziali (controller disco, filesystem, LVM, LUKS, RAID) necessari per montare la partizione root.

Se questi componenti non sono compilati direttamente nel kernel, devi generarne uno corretto.

2. Huge vs Generic su Slackware

Kernel huge

  • Molti driver built-in
  • Spesso si avvia senza initrd
  • Comodo per installazione/recovery

Kernel generic

  • Piu' pulito e vicino all'uso standard
  • Richiede initrd nella maggior parte dei casi
  • Scelta consigliata in produzione/desktop

3. Raccogliere le informazioni corrette

Prima di lanciare mkinitrd, recupera questi dati:

  • Versione kernel target
  • Filesystem della root (ext4, xfs, btrfs, ecc.)
  • Device root (es. /dev/sda2) o UUID
  • Moduli storage necessari (es. ahci, nvme)
  • Presenza di LUKS, LVM o RAID
uname -r
lsblk -f
blkid
cat /etc/fstab

Elenco kernel disponibili:

ls /boot/vmlinuz*
ls /lib/modules

4. Usare il generatore automatico (consigliato)

Slackware include uno script molto utile che propone il comando corretto in base al sistema:

/usr/share/mkinitrd/mkinitrd_command_generator.sh -r
Copia il comando generato, controlla che kernel/versione/root device siano giusti, poi eseguilo. E' il metodo piu' sicuro per evitare errori.

Per generare il comando per una versione kernel specifica:

/usr/share/mkinitrd/mkinitrd_command_generator.sh -k 6.x.y

5. Sintassi base di mkinitrd

Esempio generico:

mkinitrd -c -k <versione-kernel> -f <filesystem-root> -r <device-root> -m <moduli>

Parametri comuni:

  • -c: crea una nuova immagine initrd
  • -k: versione del kernel (deve esistere in /lib/modules)
  • -f: filesystem della root
  • -r: device della root
  • -m: moduli kernel separati da :
  • -u: include supporto USB (utile se root e' su disco USB)
  • -L: supporto LUKS
  • -C: supporto LVM
  • -R: supporto RAID software (mdadm)
  • -o: nome file output (default spesso /boot/initrd.gz)

6. Esempi pratici di mkinitrd

6.1 Root ext4 su SATA (AHCI)

mkinitrd -c -k 6.x.y -f ext4 -r /dev/sda2 -m ahci:ext4 -o /boot/initrd-6.x.y.gz

6.2 Root ext4 su NVMe

mkinitrd -c -k 6.x.y -f ext4 -r /dev/nvme0n1p2 -m nvme:ext4 -o /boot/initrd-6.x.y.gz

6.3 Root xfs

mkinitrd -c -k 6.x.y -f xfs -r /dev/sda2 -m ahci:xfs -o /boot/initrd-6.x.y.gz

6.4 Root btrfs

mkinitrd -c -k 6.x.y -f btrfs -r /dev/sda2 -m ahci:btrfs -o /boot/initrd-6.x.y.gz
Se usi subvolume Btrfs, la configurazione del mount principale resta in /etc/fstab; l'initrd deve comunque contenere il supporto btrfs.

6.5 Root su LVM

mkinitrd -c -k 6.x.y -f ext4 -r /dev/vg0/root -m ahci:ext4 -C -o /boot/initrd-6.x.y.gz

6.6 Root cifrata LUKS + LVM

mkinitrd -c -k 6.x.y -f ext4 -r /dev/vg0/root -m ahci:dm-crypt:ext4 -L -C -o /boot/initrd-6.x.y.gz

Verifica che i moduli necessari siano disponibili e che il mapping LUKS/LVM sia corretto.

6.7 RAID software (mdadm)

mkinitrd -c -k 6.x.y -f ext4 -r /dev/md0 -m ahci:raid1:ext4 -R -o /boot/initrd-6.x.y.gz
I moduli esatti dipendono dal controller e dal tipo RAID. In caso di dubbi usa prima il command generator Slackware.

7. Configurare LILO / GRUB

LILO (Slackware classico)

In /etc/lilo.conf aggiungi una entry per kernel generic + initrd:

image = /boot/vmlinuz-generic-6.x.y
  initrd = /boot/initrd-6.x.y.gz
  root = /dev/sda2
  label = Linux-generic
  read-only

Dopo ogni modifica:

lilo -v
Non sovrascrivere la tua unica entry funzionante. Tieni sempre una voce di fallback (ad esempio il kernel precedente o il kernel huge).

GRUB

Se usi GRUB, assicurati che la voce punti a kernel e initrd corretti. Esempio manuale (semplificato):

menuentry 'Slackware Generic 6.x.y' {
  linux /boot/vmlinuz-generic-6.x.y root=/dev/sda2 ro
  initrd /boot/initrd-6.x.y.gz
}

Se usi configurazione automatica:

grub-mkconfig -o /boot/grub/grub.cfg

8. Verifica e test dell'initrd

Controlla che il file sia stato creato:

ls -lh /boot/initrd*.gz

Riavvia e seleziona la nuova entry. Dopo il boot verifica:

uname -r
mount | grep ' / '
lsmod | head
Se il sistema si avvia con kernel generic e monta correttamente la root, l'initrd e' configurato bene.

9. Errori comuni e come risolverli

  • Kernel panic: unable to mount root fs: filesystem sbagliato in -f, root device errato in -r o modulo storage mancante in -m.
  • Versione kernel errata: il valore di -k non corrisponde a una directory in /lib/modules.
  • LILO avvia il vecchio kernel: hai dimenticato lilo -v dopo aver modificato /etc/lilo.conf.
  • Root cifrata non si apre: manca -L oppure modulo dm-crypt / configurazione LVM incompleta.

10. Dopo un nuovo kernel: checklist rapida

[ ] Installa/compila il nuovo kernel
[ ] Controlla la nuova versione in /lib/modules
[ ] Genera initrd con mkinitrd (o command generator)
[ ] Aggiorna LILO/GRUB
[ ] Mantieni una entry di fallback
[ ] Riavvia e testa
Se vuoi, puoi tenere questa guida insieme a quella sulla compilazione del kernel: prima compili il generic, poi generi l'initrd con mkinitrd e infine aggiorni il bootloader.

Torna alla sezione HowTo Linux