Das Rootserver-Experiment

Erlebnisse eines Rootserver (Beinahe-) Neulings

Verantwortlich für den Inhalt dieser Seite ist Mattias Schlenker, Inhaber Mattias Schlenker IT-Consulting Mattias Schlenker work Dietrich-Bonhoeffer-Str. 3, 40667 Meerbusch. Germany work Fon +49 341 39290767. Meine USt-ID (VATIN) lautet: DE240998538. http://www.mattiasschlenker.de

Diese Seite läuft unter Wordpress 2.x.x. News und Kommentare können als RSS-2.0-Feed abonniert werden.

EeePC: Ubuntu 8.04 Initramfs-Tuning

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_piix

    Wenn 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?

6 Antworten auf “EeePC: Ubuntu 8.04 Initramfs-Tuning”

  1. Unki (April 30th, 2008 um 8:18 am)

    Schöne und auch nützliche artikel schreibst Du.
    Das Module psmouse zu blacklisten ist kontraproduktiv. Es sei denn man möchte das Touchpad nicht benutzen ;-)

    Merci! Ist korrigiert — Mattias

  2. Dominik (May 1st, 2008 um 6:40 pm)

    Nicht schlecht! Das erzeugen der Initramfs geht aber einfacher:

    /usr/sbin/update-initramfs -k all

    Damit werden die Initramfs-Images aller (per Paket) installierten Kernel aktualisiert.

    Weiter so!

  3. untergeek (May 3rd, 2008 um 4:23 pm)

    Wieder viel gelernt… auch dafür danke, Mattias! Deine Kernel-Liste führte bei mir zu einer nicht bootfähigen initramfs – also etwas experimentiert: mit

    lsmod > modules.list

    alle geladenen Kernel-Module gelistet und diese Liste um das offensichtlich Überflüssige bereinigt – die Dinge von der Blacklist, alle cpufreq_…-Module sowie uvcvideo und abhängige (Webcam). Dann neue initramfs gebaut. Wohl nicht schön, aber es läuft erst mal wieder.

    War das sehr dumm von mir?

  4. Administrator (May 8th, 2008 um 9:30 am)

    @untergeek: Ideal ist diese Lösung nicht, da einerseits das Initramfs dadurch sehr groß wird und andererseits manche Module nicht mit den vorgesehenen Parametern geladen werden. Als Faustregel sollte in das Initramfs nur das rein, was benötigt wird um sauber auf das Root-Dateisystem und die Resume-Device zuzugreifen. Alles weitere soll dann vom richtigen Initi geladen werden.

  5. untergeek (May 18th, 2008 um 6:40 pm)

    …habe also die Liste der Module immer weiter eingedampft und bin am Ende tatsächlich bei Deinem oben beschriebenen Minimal-Setup gelandet, abzüglich der Module usbhid und hid, die nicht als geladen gelistet sind. Jetzt läuft’s, und der EEE lädt deutlich schneller – muss mal wieder stoppen. – Kann sein, dass ich im ersten Anlauf einen Fehler gemacht habe…