我正在通过基于 Ubuntu 的 Clonezilla Server 在 PXE UEFI 模式下安装 Windows 10 操作系统。我需要使用 grub.cfg 将 Windows 操作系统配置添加到服务器中,以便进行客户端部署。我在tftpboot/nbi_image/win_files
目录中添加了 Windows 10 iso 解压目录。
我的 tftp 根目录是“/tftpboot/nbi_image”。
现在我需要编辑中的 grub 文件tftpboot/nbi_image/grub-efi.cfg/grub.cfg
,这是我的条目:
menuentry "Windows 10 UEFI" {
insmod part_msdos
insmod chain
chainloader /win_files/bootx64.efi
}
错误:EFI 文件路径无效。
bootx64.efi 是来自 clonezilla 服务器设置的文件。如果需要任何其他文件,我应该从哪里获取?
因为每次都失败了。所以,我想了解这个启动顺序是如何进行的?按照什么顺序,从 ISO 中的 Windows 安装文件中读取哪些文件?
答案1
我完全没有信心默认的 Windows EFI 引导加载程序能够从 PXE/tftp 系统启动,但首先需要验证几件事:
模块 msdos_part 应该读取本地驱动器的 msdos 类型分区(与 gpt 类型分区相反),因为你正在通过网络启动,所以这里与此无关
Unix 区分大小写,win_files 和 Win_files 不是同一个文件夹
我的 Windows 10 iso 根目录中没有 bootx64.efi,但是那里有一个 bootmgr.efi,在 efi/boot/ 中有一个 bootx64.efi
你的 TFTP 根目录是什么?如果它是 '/tftboot',那么你的 chainloader 可能更像
- 链式加载器 nbi_image/win_files/bootmgr.efi或者
- hainloader nbi_image/win_files/efi/boot/bootmgr.efi
答案2
我找到了解决方案:
sudo vim /etc/tftp.remap
添加以下行:
# Map the paths
r ^\\boot\\ EFI/winpe/Boot/
r ^\\Boot\\ EFI/winpe/Boot/
r ^\\sources\\ EFI/winpe/sources/
# Convert backslashes to slashes
rg \\ /
打开tftp-hpa文件:
sudo vim /etc/default/tftpd-hpa
相应修改:
TFTP_OPTIONS="-vvv --secure --ipv4 --map-file /etc/tftpd.remap"
跑步:
sudo service tftpd-hpa restart
dhcp配置:
sudo vim /etc/dhcpd.conf
相应修改:
if option arch = 00:06 {
filename "bootia32.efi";
} else if option arch = 00:07 {
filename "EFI/grub2/grubnetx64.efi";
#filename "bootx64.efi";
grubnetx64.efi 来自档案链接:Ubuntu 档案。
sudo mkdir grub
cd grub/
sudo vim grub.cfg
添加以下行:
configfile grub-efi.cfg/grub.cfg
编辑文件:
sudo vim grub-efi.cfg/grub.cfg
添加:
menuentry "Windows 10 RS4" --id win10rs4 {
echo "Entering windows installation environment..."
insmod chain
insmod fat
insmod part_gpt
chainloader /EFI/Boot/bootx64.efi
}
要执行的文件顺序(包括 PXE 菜单选择)是:
grubnetx64.efi -> bootx64.efi -> BCD -> boot.sdi -> winpe.wim