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

有没有办法压缩这个文件,以便它可以传输更小的文件大小,并在尝试挂载根文件系统之前将其解压缩?

或者,有没有办法通过不同的协议(HTTP/FTP/SFTP/SCP/等)传输它?

答案1

initrd 是一个压缩的 CPIO 结构,使用以下命令从文件树结构创建:

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

initrdubuntu-20.04-desktop-amd64已压缩,大小约为 87MB。该文件的 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 传输需要半小时,则说明您的网络 TFTP 设置存在其他问题。Wireshark 流量捕获可以帮助您查明问题所在。

答案2

@Pat 的回答已被接受并且更加详细,但是这里是原始问题的直接答案:

有没有办法压缩这个文件,以便它可以传输更小的文件大小,并在尝试挂载根文件系统之前将其解压缩?

不,它已经被压缩了。接受的答案给出了一个例子。

或者,有没有办法通过不同的协议(HTTP/FTP/SFTP/SCP/等)传输它?

常规 PXE 不行。使用其他网络启动系统,如 iPXE,它允许 http/nfs

相关内容