pxe ブート時に圧縮された initrd を使用する

pxe ブート時に圧縮された initrd を使用する

私は grub で netboot/pxeboot を使用しています。

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
}

正常に動作しますが、tftp 経由の initrd のロードに時間がかかります (30 分以上)。ファイル転送時間を節約するために、このファイルを圧縮 (gz/bz2) したいと思います。

initrd.gz私は、(一例を挙げると、https://unix.stackexchange.com/questions/217002/which-iso-file-vmlinuz-and-initrd-gz-to-use-for-installing-centos-from-multiboo) しかし、ファイルを gzip で圧縮して使用しようとすると、次のようなエラーが発生します。

[   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)

このファイルを圧縮して、より小さいファイル サイズを転送できるようにし、ルート ファイル システム (fs) をマウントする前に解凍する方法はありますか?

あるいは、別のプロトコル (HTTP/FTP/SFTP/SCP など) 経由で転送する方法はありますか?

答え1

initrd は、次のようなコマンドを使用してファイル ツリー構造から作成される圧縮された CPIO 構造です。

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

initrdubuntu-20.04-desktop-amd64はすでに圧縮されており、サイズは約 87 MB です。このファイルの TFTP 転送には約 36 秒かかります。

[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 

TFTP 転送に 30 分かかる場合は、ネットワーク TFTP 設定に別の問題があります。Wireshark トラフィック キャプチャを使用すると、問題を特定するのに役立ちます。

答え2

@Pat の回答は受け入れられ、より詳細になっていますが、元の質問に対する直接の回答は次のとおりです。

このファイルを圧縮して、より小さいファイル サイズを転送できるようにし、ルート ファイル システム (fs) をマウントする前に解凍する方法はありますか?

いいえ、すでに圧縮されています。受け入れられた回答にこの例が示されています。

あるいは、別のプロトコル (HTTP/FTP/SFTP/SCP など) 経由で転送する方法はありますか?

通常のPXEではだめです。http/nfsを許可するiPXEなどの別のネットワークブートシステムを使用してください。

関連情報