嘿朋友们。前段时间我有一个类似的问题,但现在我更接近解决方案。我在 tftp/pxe 服务器上设置了一个简单的 grub 菜单。我希望客户端能够以 efi 和传统模式启动 iso 文件!所以我决定使用 GRUB 而不是 SYSLINUX。但现在我遇到了问题。我必须安装一个 nfs 共享才能加载 initrd,对吗?我花了几个小时的时间,但不幸的是只有少数人尝试执行此操作。此外,我在运行 memtest 等 linux16 映像时没有遇到任何问题。它们工作正常,没有任何问题。
这就是我当前的 grub.cfg 菜单项,用于从 pxegrub 启动我的clonezilla live iso 文件。
menuentry "Netroot" {
echo 'Trying to boot via nfs ...'
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
echo 'Loading Linux ...'
linux /programs/clonezilla/live/vmlinuz root=/dev/nfs netboot=nfs nfsroot=192.168.2.55:/var/lib/tftpboot/programs/clonezilla/live/ rw quiet
echo 'Loading initial ramdisk ...'
initrd initrd.img
}
还有我的导出文件
/etc/出口
/var/lib/tftpboot/programs/clonezilla/live 192.168.2.55/(rw,no_root_squash,sync,no_subtree_check)
不幸的是它无法设置正确的根目录,所以我还无法加载 initrd。这里有什么问题吗?有人可以帮我让它通过 grub 运行吗?我找到了一些 SYSLINUX 的示例,但是是否可以让它们在 grub 中运行?
DEFAULT ubuntu
LABEL ubuntu
KERNEL /vmlinux-4.8.17-040817-generic
APPEND ip=dhcp rw root=/dev/nfs nfsroot=192.168.1.254:/diskless/ubuntu/0185 raid=noautodetect quiet splash amdgpu.vm_fragment_size=9
INITRD /initrd.img-4.8.17-040817-generic
与 syslinux 相比,我更喜欢 grub,而且它更先进一些。
我希望有一个人可以帮助我。也许是我的 nfs 共享有问题?我以前从未使用过它们。
答案1
不,GRUB 根本不支持 NFS。
即使该linux
行包含 NFS 挂载参数,GRUB 也不会对其进行操作;它只是在内核实际启动时将参数传递给 Linux 内核。一旦内核启动并执行 initramfs,它将使用这些参数来设置 NFS 挂载的根文件系统。
GRUBinitrd.img
使用与加载内核文件完全相同的机制来加载该文件。在您的“简单 tftp/pxe”解决方案中,该机制很可能是 TFTP。 (最新版本的 UEFI 也可能支持 HTTP,但我不确定 GRUB 是否可以使用 UEFI 的 HTTP 功能。)
一旦 GRUB 将内核、initramfs 和引导选项字符串加载到 PXE 客户端的 RAM 中,它将系统的控制权转移到内核:GRUB 将不会参与此后的任何操作。
为了处理传统 PXE 启动和 UEFI PXE 启动,您的 DHCP 服务器必须读取 PXE 架构选项,使用它来识别 PXE 客户端是传统还是 UEFI,然后将适当的启动文件路径传递给传统 PXE 启动加载程序(例如使用 ) 创建的 GRUB PXE 映像grub-mkimage --format=i386-pc-pxe
或 UEFI 引导加载程序(例如,grub.efi
使用 )创建的映像grub-mkimage --format=x86_64-efi
。
要通过 PXE 引导 Clonezilla Live,您不需要 nfsroot 选项。相反,你的linux
行可能是这样的:
linux /programs/clonezilla/live/vmlinuz boot=live username=user union=overlay config components quiet noswap edd=on nomodeset nodmraid locales=en_US.UTF-8 keyboard-layouts=us ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch=no net.ifnames=0 nosplash noprompt fetch=http://URI_path_on_your_server_containing/filesystem.squashfs
显然,用指向 HTTP 服务器的实际 URL 替换该http://URI_path_on_your_server_containing/filesystem.squashfs
部分,Clonezilla initramfs 可以从该服务器下载 Clonezillafilesystem.squashfs
文件。如果您更喜欢非美国键盘,也可以更改该keyboard-layouts=us
部分。该选项字符串最初是按照以下说明编写的:
以及 Clonezilla 引导选项参考:
我将其与传统 PXE 引导上的 SYSLINUX 和 UEFI 上的 iPXE.org 引导加载程序一起使用,当我使用 clonezilla-live-20191024-eoan-amd64.zip 对其进行测试时,它起作用了。