Verwenden eines komprimierten initrd beim PXE-Booten

Verwenden eines komprimierten initrd beim PXE-Booten

Ich verwende Netboot/PXEboot mit Grub.

menuentry "Install Ubuntu 20.04" {
  set gfxpayload=keep
  echo 'Loading vmlinuz ...'
  linux  /tftp/vmlinuz ip=dhcp netboot=nfs nfsroot=10.0.0.20:/data/netboot/nfs/ubuntu2004/ boot=casper toram noquiet splash=off console=tty0 console=ttyS1,57600n8 ---
  echo 'Loading initrd, this takes a long time ...'
  initrd /tftp/initrd
}

Es funktioniert einwandfrei, allerdings dauert das Laden von initrd über TFTP sehr lange (30+ Minuten). Ich möchte diese Datei komprimieren (gz/bz2), um etwas Zeit bei der Dateiübertragung zu sparen.

Ich habe da draußen einige Beispiele gesehen, die sich auf ein initrd.gz(Ein Beispiel:https://unix.stackexchange.com/questions/217002/welche-iso-datei-vmlinuz-und-initrd-gz-soll-ich-für-die-installation-von-centos-von-multiboo-verwenden), aber als ich versuchte, die Datei einfach mit gzip zu komprimieren und zu verwenden, erhielt ich eine Fehlermeldung wie:

[   12.543547] VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
[   12.558487] Please append a correct "root=" boot option; here are the available partitions:
[   12.575161] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

Gibt es eine Möglichkeit, diese Datei zu komprimieren, damit eine kleinere Dateigröße übertragen werden kann, und sie zu dekomprimieren, bevor versucht wird, das Stamm-FS zu mounten?

Gibt es alternativ eine Möglichkeit, es über ein anderes Protokoll (HTTP/FTP/SFTP/SCP/usw.) zu übertragen?

Antwort1

Ein initrd ist eine komprimierte CPIO-Struktur, die aus einer Dateibaumstruktur mit einem Befehl wie dem folgenden erstellt wird:

find . | cpio -o -c -R root:root | gzip -9 > /boot/new.img

Das ubuntu-20.04-desktop-amd64initrd ist bereits komprimiert und wiegt etwa 87 MB. Die TFTP-Übertragung dieser Datei sollte etwa 36 Sekunden dauern.

[04/05 08:17:46.445] TFTP Inf: <\NWA_PXE\ubuntu-20.04-desktop-amd64\casper\initrd>: sent blks=63901 blkSz=1408, Total 89971296 bytes in 36s, err recovery=0 

Wenn Ihre TFTP-Übertragung eine halbe Stunde dauert, liegt ein anderes Problem in Ihrem Netzwerk-TFTP-Setup vor. Eine Wireshark-Datenverkehrsaufzeichnung kann Ihnen helfen, Ihr Problem zu lokalisieren.

Antwort2

Die Antwort von @Pat wird akzeptiert und ist ausführlicher, hier sind jedoch die direkten Antworten auf die ursprünglichen Fragen:

Gibt es eine Möglichkeit, diese Datei zu komprimieren, damit eine kleinere Dateigröße übertragen werden kann, und sie zu dekomprimieren, bevor versucht wird, das Stamm-FS zu mounten?

Nein, es ist bereits komprimiert. Die akzeptierte Antwort gibt ein Beispiel dafür.

Gibt es alternativ eine Möglichkeit, es über ein anderes Protokoll (HTTP/FTP/SFTP/SCP/usw.) zu übertragen?

Nicht mit regulärem PXE. Verwenden Sie ein anderes Netzwerk-Boot-System, wie iPXE, das http/nfs erlaubt

verwandte Informationen