У меня есть система, которая прекрасно работает как загрузочный сервер iPXE. Сейчас я пытаюсь заставить его использовать файл SquashFS в качестве корневой файловой системы вместо файловой системы NFS.
Текущая система использует конфигурацию iPXE следующим образом (показаны соответствующие строки), и она работает нормально:
:retry
kernel http://${next-server}/installdcos/ubuntu_os/vmlinuz root=/dev/nfs nfsroot=${next-server}:/installdcos/ubuntu_os/nfsroot ro ip=dhcp BOOTIF=%(mac)s console=ttyS0,38400n8 console=ttyS1,9600n8 console=tty0 || goto retry
initrd http://${next-server}/installdcos/ubuntu_os/initrd.gz || goto retry
boot || goto retry
Теперь вместо загруженной системы используйте /installdcos/ubuntu_os/nfsroot
в качестве корневой файловой системы, я хочу, чтобы она использовала один SquashFS в качестве корневой файловой системы (я имею в виду, что система должна смонтировать ее, а затем использовать в качестве корневой файловой системы). ,
Для этого, во- первых , я создал файл ubuntu_os.squashfs
, который держит содержимое каталога nfsroot
с помощью mksquashfs
Затем я поместил этот файл ubuntu_os.squashfs
каталог /installdcos/ubuntu_os/nfsroot
.
Теперь, в моей конфигурации iPXE, я хочу сказать: пожалуйста, получите ubuntu_os.squashfs
через сеть, смонтируйте его как файловую систему SquashFS и используйте его в качестве корневой файловой системы (чтобы вам больше не приходилось переходить через NFS для вызова команды, которые находятся в корневой файловой системе).
Но когда я пытаюсь сделать следующее изменение для строки ядра в конфигурации:
kernel http://${next-server}/installdcos/ubuntu_os/vmlinuz root=/dev/nfs nfsroot=${next-server}:/installdcos/ubuntu_os/nfsroot/ubuntu_os.squashfs ro rootfstype=squashfs ip=dhcp BOOTIF=%(mac)s console=ttyS0,38400n8 console=ttyS1,9600n8 console=tty0 || goto retry
И выполнить загрузку iPXE с компьютера, он запускает процесс загрузки iPXE и после печати некоторых строк застревает при следующей ошибке:
Begin: Retrying nfs mount ... Begin: Running /scripts/nfs-premount ... done.
mount: Not a directory
done
Begin: Retrying nfs mount ... Begin: Running /scripts/nfs-premount ... done.
mount: Not a directory
done
Begin: Retrying nfs mount ... Begin: Running /scripts/nfs-premount ... done.
mount: Not a directory
done
Сообщение об ошибке имеет смысл, undeeed, /installdcos/ubuntu_os/nfsroot/ubuntu_os.squashfs
не является каталогом.
Итак, какую комбинацию параметров и значений я должен написать для этой строки конфигурации ядра?
Я проверил документацию, такую как http://www.tldp.org/HOWTO/BootPrompt-HOWTO-3.html и https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt, но не мог понять, какое магическое заклинание я должен передать ядру (и остальные учебники по загрузке SquashFS, которые я обнаружил, рассматривают операцию загрузки с диска, а не PXE, или выполнение LiveCD, что не совсем так, как в моем случае).