PXELinux und komprimierte Kernel / Bilder

871
friedkiwi

Ist es möglich, komprimierte Kernel mit einer komprimierten initrd mit PXELinux zu booten?

Zunächst ein kleiner Hintergrund:

Wir haben eine benutzerdefinierte Linux-Distribution für OpenCL-Computing-Knoten ohne Festplatten entwickelt. Wir möchten, dass diese Knoten ihr Betriebssystem vom Netzwerk abrufen. Unser Distro besteht aus einem Kernel (duh) und einer großen initrd, die in den RAM geladen wird und von dort aus alles ausführt.

Wir haben uns aus zwei Gründen dafür entschieden, alles von der initrd zu lassen:

  • NFS war keine Option, um die zusätzlichen Inhalte des Dateisystems bereitzustellen
  • Schneller Dateizugriff vom RAM aus.
  • Kein permanenter Speicher erforderlich, Daten und Konfiguration werden dynamisch durch einen SOAP-Dienst abgerufen.

Jetzt ist unser Initrd ca. 450M groß. Bei unseren Netzwerkgeschwindigkeiten dauert es etwa zwei bis drei Minuten, um einen einzelnen Client zu laden. Beschleunigt die Komprimierung das Herunterladen, und wenn ja, welche sollte verwendet werden? Wird LZMA von PXELinux unterstützt, oder müssen wir bei bzip2 oder gzip bleiben?

Aufgrund der Ladezeit von 2-3 Minuten dauert das Booten von 15 Knoten über dieselbe Netzwerkverbindung ziemlich lange. Wir haben uns aus finanziellen Gründen dazu entschieden, keine Festplatten oder CD / DVD-Laufwerke zu verwenden (die billigste HDD bei 30 mal 15 € spart viel Geld ;-))

Unsere Frage lautet also: Welche Komprimierungsoptionen stehen für dieses Setup zur Verfügung? Und wie machen wir das?

Vielen Dank für Ihre Zeit!

Yvan Janssens

3
Hast du deine Distribution schon optimiert? Löschen Sie alle Dokumentationen, Bibliotheken, Include-Dateien, die Sie nicht benötigen, entfernen Sie die Binärdateien und Bibliotheken mit Debug-Symbolen, kompilieren Sie sie erneut mit Optimierungen für die Größe ... Marcin vor 12 Jahren 0

3 Antworten auf die Frage

1
Turbo J

Wie hast du die Initrd gemacht? Die meisten mir bekannten Systeme komprimieren sie im letzten Schritt:

> file /boot/initrd-2.6.37.1-1.2-desktop /boot/initrd-2.6.37.1-1.2-desktop: gzip compressed data, [...] 

Der Kernel muss die Komprimierung unterstützen:

> cat /boot/config-2.6.37.1-1.2-desktop |grep CONFIG_RD_ CONFIG_RD_GZIP=y CONFIG_RD_BZIP2=y CONFIG_RD_LZMA=y CONFIG_RD_LZO=y 

Eine 450-MB-RAM-Disk bedeutet jedoch 450 MB weniger Speicherplatz - und ohne HDD haben Sie keinen Swap.

Sie sollten sich ein vernetztes Dateisystem genauer ansehen, da gibt es mehr als nur NFS: gPXE kann von iSCSI, AoE und sogar HTTP geladen werden.

Die Knoten verfügen alle über 2 GB RAM, und das Betriebssystem und die Apps werden mit einer Spitzenleistung von 256 MB und 512 MB ausgeführt. So bleibt eine Ramdisk von 1250 MB übrig ;-). Die 450 MB werden in der Zwischenzeit auf 250 MB reduziert, indem unnötiges Material entfernt wird. Das ist komprimierte Größe, das Bild ist 1024 MB groß. friedkiwi vor 12 Jahren 0
Wenn Sie nicht squashfs verwenden, wird das ** unkomprimierte ** Image im RAM gespeichert. Lässt in Ihrem Fall nicht viel Platz. Turbo J vor 12 Jahren 0
ja ich weiß. 2 GB RAM, 1 GB Ramdrive, 1 GB Arbeitsspeicher Sollte nur für die Konsole ausreichend sein, oder? friedkiwi vor 12 Jahren 0
0
darkdragn

Haben Sie sich Gedanken über die Implementierung von Casper und Squashfs gemacht? Auf diese Weise können Sie die initrd auf eine minimale Größe von etwa 25 MB halten und die Squashfs separat senden. Squashfs unterstützt die Lzma-Komprimierung, und wenn Sie sich die Art und Weise ansehen, wie partierte Magie damit umgeht, werden sie manchmal in die initrd gestellt. In der Vergangenheit habe ich jedoch mit pxelinux gespielt und Sie können es stattdessen als separate Datei senden und die Casper-Skripte werden es immer noch finden.

Durch Entfernen von Debugging-Symbolen und Entwicklungsprogrammen / -bibliotheken wurde mehr Datum aus dem Image entfernt. Das Bild ist jetzt auf 260M komprimiert, was für mich akzeptabel ist, da es über eine GBit-Verbindung übertragen wird (die Übertragung dauert etwa 25 Sekunden). friedkiwi vor 12 Jahren 0
0
Pat

1) Ein typischer Linux-Kernel ist komprimiert. Gleiches gilt für seine Initrd. Überprüfen Sie Ihre Gebäudekette.

2) Ihre Zahlen sagen, dass Sie keine Squashfs brauchen

3) pxelinux kümmert sich nicht um Ihre Kernel / Initrd-Komprimierungsmethode, falls vorhanden.