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
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
/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
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
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
9. Errori comuni e come risolverli
- Kernel panic: unable to mount root fs:
filesystem sbagliato in
-f, root device errato in-ro modulo storage mancante in-m. - Versione kernel errata:
il valore di
-knon corrisponde a una directory in/lib/modules. - LILO avvia il vecchio kernel:
hai dimenticato
lilo -vdopo aver modificato/etc/lilo.conf. - Root cifrata non si apre:
manca
-Loppure modulodm-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
mkinitrd e infine aggiorni il bootloader.