pxe 啟動時使用壓縮的 initrd

pxe 啟動時使用壓縮的 initrd

我正在使用 netboot/pxeboot 和 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
}

它工作正常,但是,透過 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

相關內容