Использование сжатого initrd при загрузке pxe

Использование сжатого initrd при загрузке pxe

Я использую 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
}

Работает отлично, однако загрузка initrd через tftp занимает много времени (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

Initrd ubuntu-20.04-desktop-amd64уже сжат и весит около 87 МБ. Передача этого файла по 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

Связанный контент