Рейтинг:1

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

флаг us

Я использую netboot/pxeboot с grub.

пункт меню «Установить Ubuntu 20.04» {
  установить gfxpayload = сохранить
  echo 'Загружается 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 'Загружается initrd, это занимает много времени...'
  initrd /tftp/initrd
}

Работает нормально, однако загрузка initrd через tftp занимает много времени (30+ минут). Я хотел бы сжать (gz/bz2) этот файл, чтобы сэкономить время на передачу файла.

Я видел несколько примеров, относящихся к initrd.gz (Один пример: https://unix.stackexchange.com/questions/217002/what-iso-file-vmlinuz-and-initrd-gz-to-use-for-installing-centos-from-multiboo), но когда я попытался просто сжать файл с помощью gzip и использовать его, я получаю сообщение об ошибке, например:

[12.543547] VFS: не удается открыть корневое устройство "(null)" или неизвестный блок (0,0): ошибка -6
[ 12.558487] Пожалуйста, добавьте правильный вариант загрузки "root="; вот доступные разделы:
[12.575161] Паника ядра - не синхронизация: VFS: невозможно смонтировать root fs на неизвестном блоке (0,0)

Есть ли способ сжать этот файл, чтобы он мог передавать меньший размер файла, и распаковать его, прежде чем он попытается смонтировать корневую файловую систему?

В качестве альтернативы, есть ли способ передать его по другому протоколу (HTTP/FTP/SFTP/SCP/и т. д.)?

флаг in
Вы можете использовать xz или любое другое сжатие, даже если grub не распаковывает файл, ядро ​​​​может выполнить распаковку, если эти параметры включены. Я всегда рекомендую http, не уверен, что grub получил такую ​​поддержку, мое решение для перехода — iPXE. (поскольку вы, кажется, уже используете, я бы избегал NFS)
Рейтинг:1
флаг us

Ответ @Pat принят и более подробен, однако вот прямые ответы на исходные вопросы:

Есть ли способ сжать этот файл, чтобы он мог передавать меньший размер файла, и распаковать его, прежде чем он попытается смонтировать корневую файловую систему?

Нет, он уже сжат. Принятый ответ дает пример этого.

В качестве альтернативы, есть ли способ передать его по другому протоколу (HTTP/FTP/SFTP/SCP/и т. д.)?

Не с обычным PXE. Используйте другую систему сетевой загрузки, например iPXE, которая позволяет использовать http/nfs.

Рейтинг:1
флаг za
Pat

Initrd — это сжатая структура CPIO, созданная из структуры файлового дерева с помощью такой команды, как:

найти . | cpio -o -c -R корень:корень | gzip -9 > /boot/new.img

Ubuntu-20.04-рабочий стол-amd64 initrd уже сжат и весит около 87 МБ. Передача этого файла по TFTP должна занимать около 36 секунд.

[04/05 08:17:46.445] TFTP-информация: <\NWA_PXE\ubuntu-20.04-desktop-amd64\casper\initrd>: отправлено blks=63901 blkSz=1408, всего 89971296 байт за 36 с, восстановление после ошибки=0 

Если ваша передача TFTP занимает полчаса, у вас другая проблема в настройке сети-TFTP. Захват трафика Wireshark может помочь вам точно определить проблему.

Rino Bino avatar
флаг us
В итоге я просто использовал iPXE с включенным протоколом nfs. NFS передал его за секунды.К сожалению, для TFTP нет параметров настройки, кроме размера блока (который уже был настроен), и он работает через udp, который не очень хорошо работает в моей настройке через vpn. Я приму это как ответ, но я напишу другой ответ, который напрямую отвечает на вопросы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.