
我正在使用 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