我始终使用 UEFI 选项通过网络 DHCP/TFTP 从 CentOS 7 PXE 服务器将裸机服务器镜像到 CentOS 7 和 8。我也希望构建 Ubuntu 20.04 服务器。
我按照文档操作,从 Ubuntu ISO 的 casper 目录中提取了 vmlinuz 和 initrd,然后将它们放在基本 tftpboot 目录中。事情进展顺利,ISO 下载到客户端,进入 BusyBox 并启动 initramfs 后,它完成加载 ISO,但随后停止在“无法在网络上找到实时文件系统”。问题是,我能够在客户端上导航并找到 ISO,我什至能够安装它并看到所有内容都在那里。
我使用过不同的 ISO(例如 Ubuntu 桌面)。我已经验证了 ISO 的 sha 和。
这是我正在使用的 grub.cfg,将所有内容删除以隔离问题。
timeout=30
timeout_style=menu
menuentry 'Ubuntu 20.04.2' {
linuxefi /vmlinuz ip=dhcp url=http://10.10.10.1/ubuntu-20.04.2-live-server-amd64.iso
initrdefi /initrd
}
menuentry 'CentOS 7.8' {
linuxefi /centos/images/pxeboot/vmlinuz ip=dhcp inst.repo=http://10.10.10.1:/centos
initrdefi /centos/images/pxeboot/initrd.img
}
CentOS 安装工作正常(/centos 是 CentOS ISO 转储的路径)。
我有什么遗漏的吗?
答案1
不幸的是,这是一个包罗万象的失败,有多种可能的原因。您进入的 busybox shell 将允许您查看临时 ram 文件系统中的 casper.log 文件。 (添加debug=
到 APPEND 行应该打开额外的调试信息)。这可能会说明这个问题。
此外,tftp 和 http 服务器上的日志文件也会让您知道它请求所需的各个部分的情况。
一种可能性(以及我的情况中的问题)是您正在提供的 vmlinuz 和 initrd 文件应该与您正在加载的 .iso 映像中的文件相同。 (我将 .iso 更新为新的次要版本,然后突然开始遇到此问题,因为我使用的是先前版本中的内核/initrd)
mount -o loop,ro ubuntu-20.04.2-live-server-amd64.iso /mnt
cp /mnt/casper/initrd /mnt/casper/vmlinuz [destination]
umount /mnt
答案2
我已经让它在我的默认配置中使用以下参数:
LABEL Ubuntu 20 LTS
MENU LABEL Install Ubuntu 20 LTS
KERNEL ubuntu20/casper/vmlinuz # On PXE server, relative to TFTP Root
INITRD ubuntu20/casper/initrd
IPAPPEND 1
APPEND autoinstall ip=dhcp interface=enp5s0 ds=nocloud-net;s=http://<mywebserver>/ubuntu2004/autoinstall/ucshadoop06/ url=http://<mywebserver>/ubuntu-20/liveserver-iso/ubuntu-20.04.1-live-server-amd64.iso
无论有没有 ds 参数,它都可以工作。我当前的挑战是弄清楚为什么 ds 参数不执行任何操作。如果您有任何进一步的信息,请告诉我。
答案3
.disk
正如此错误中提到的,可能是缺少文件:https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1877618
复制 PXE 安装文件时,请确保包含隐藏文件:https://superuser.com/questions/61611/how-to-copy-with-cp-to-include-hidden-files-and-hidden-directories-and-their-con
顺便说一句,这是我发现的关于设置 PXE 安装的最好的文章——我修改了 Ubuntu 20.04 的说明,并且必须确保我复制了.disk
(文章中未提及):https://linuxhint.com/pxe_boot_ubuntu_server
答案4
我写有关如何为 Ubuntu 构建 LTSP 的教程(这是在 16.04 中出现的,但应该仍然适用于新版本)。
客户端构建可能失败,这就是为什么您的客户端在从 PXE 选项启动时无法看到这一点,即使 ISO 明显存在。