Ubuntus Standard-Initrds sind eine feine Sache, laufen sie doch auf fast jeder gewöhnlichen PC-Hardware und erlauben auch den problemlosen Umzug einer Festplatte in einen anderen Rechner. Der Nachteil der ganzen Sache ist allerdings, dass die Initrd ganze sieben Megabyte groß ist. Die müssen gleich beim Systemstart geladen und entpackt werden. Dazu kommt, dass die vielen enthaltenen Treiber einzeln geladen werden und nach der für sie bestimmten Hardware suchen. Hier kann man für eine genau spezifizierte Hardware-Kombination gut ausmisten und so tunen. Das resultierende Initramfs ist noch 3MB klein:
-
Zunächst wird die Konfigurationsdatei /etc/initramfs-tools/initramfs.conf angepasst. Uns interessiert insbesondere die Variable MODULES=most, die auf MODULES=list umgestellt wird.
-
Nun muss eine Modullliste /etc/initramfs-tools/modules erstellt werden. Meine enthält Treiber für die interne SSD und USB-Massenspeicher:
ext3
ext2
jbd
mbcache
usbhid
hid
usb_storage
libusual
sg
sd_mod
ahci
libata
scsi_mod
ehci_hcd
uhci_hcd
usbcore
ata_piixWenn Sie nur von SSD booten, können Sie alle USB-Module entfernen, analog beim Start von USB die SATA- und ATA-Treiber.
-
Sichern Sie die alte Initrd, bitte nicht die Endung .bak verwenden!
-
Erzeugen Sie eine neue Initrd
mkinitramfs -o /boot/initrd.img-$( uname -r )
-
Rebooten Sie um sicherzustellen, dass die neue Initrd richtig startet
-
Tragen Sie Module, die nun fehlen, aber dennoch gleich dem Start benötigt werden in die Datei /etc/modules ein.
-
Optional: Blockieren Sie nicht benötigte Module via /etc/modprobe.d/blacklist
# Geraete, die der EeePC nie benoetigen wird
blacklist lp
blacklist parport
blacklist parport_pc
blacklist ppdev
blacklist joydev
blacklist serio_raw
blacklist ata_generic
blacklist pata_acpi
blacklist pci_hotplug
blacklist shpchp
blacklist ipv6
Was ist die Initrd/das Initramfs?
Früher war es üblich, einen Linux-Kernel genau auf eine Hardware abgestimmt zu backen. So musste man beim Systemstart lediglich den Namen des Gerätes übergeben, welches das Root-Dateisystem enthielt. Doch die Zeiten ändern sich, in vielen Fällen sorgen Wechseldatenträger dafür, dass sich Gerätenamen ändern und Linuxe sollen auch von CD oder USB-Stick starten. Die Lösung schufen zunächst sogenannte Initrds (“initiale Ramdisks”). Dabei handelte es sich um Images von Partitionen, die formatiert und mit Daten versehen waren. Auf ihnen war ein Script untergebracht, das nach dem Laden der Initrd ausgeführt wurde und beispielsweise Module lud oder die Root-Partition suchte. War das Script fertig, übergab es an die Bootsequenz auf Festplatte. So konnte Logik aus dem Kernel ferngehalten und leicht gewartet werden. Allerdings ist die Initrd nicht gerade effizient, da freier Platz auf der Initrd ungenutzt im Speicher verbleibt und gleichzeitig Schreibzugriffe an die Größenbegrenzungen der Initrd stoßen. Nachfolger der Initrd ist daher das Initramfs (“initial RAM file system”), das letztlich ein gepacktes CPIO-Archiv ist und effizienter mit dem Speicher umgeht als die Initrd.
Bei den meisten Linux-Bootloadern heisst der Parameter zur Übergabe von Initrd/Initramfs noch immer initrd. Ich verwende daher Initrd als Sammelbegriff für Initrd und Initramfs, auch wenn dies technisch nicht immer korrekt ist…
Nachtrag, 14. Mai: Mit dem Image vom 7. Mai funktioniert dieses Initramfs sowohl von SD-Karte als auch von interner SSD. Hat noch jemand anderes die Bootprobleme, die untergeek beschreibt?