我安装了 Windows 部署服务器,并修改了 PXE 启动菜单,以便可以启动不同的内核(可以正常工作)。现在,我尝试设置 CloneZilla 以进行 PXE 启动,但我无法使 TFTP 部分正常工作。以下是 clonezilla 启动菜单代码:
label Clonezilla-live
MENU LABEL Clonezilla Live (Ramdisk)
KERNEL vmlinuz
APPEND initrd=initrd.img boot=live username=user union=overlay config components quiet noswap edd=on nomodeset nodmraid locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch=no net.ifnames=0 nosplash noprompt fetch=tftp://$serverIP/filesystem.squashfs
其中 $serverIP 是我的 TFTP 服务器 IP - 来自这里:
http://clonezilla.org/livepxe.php
除了 APPEND 行末尾的 fetch 语句外,一切都运行良好。当我尝试访问另一个 TFTP 服务器 (SolarWinds) 时,它会工作,但我无论如何都无法让它从 WDS TFTP 服务器获取数据,我知道 WDS TFTP 服务器正在工作,因为 WDS 依赖它。我可以使用 TFTP 客户端访问 WDS TFTP 服务器,但每当我尝试使用 clonezilla 执行此操作时,当它尝试(并失败)下载 filesystem.squashfs 文件时,它都会给我一个“访问冲突”错误。
这也许不太可能,但我想有人以前可能遇到过类似的事情。
澄清
filesystem.squashfs 文件本质上是 clonezilla 应用程序 - 它不是用于存储要部署的映像的克隆映像 - 这些文件非常大(以 GB 为单位)并通过 clonezilla 应用程序内的其他方式传输。此 squashfs 文件在 Linux 子系统加载时下载,然后在下载完成后执行 clonezilla 应用程序。
答案1
WDS TFTP 服务器使用 Windows 样式的路径名分隔符,即反斜杠,而不是 Unix 样式的正斜杠。
还要注意 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/WDSServer/Providers/WDSTFTP 中的 Windows 注册表值 ReadFilter 和 RootFolder。
默认情况下,仅允许从 TFTP 根文件夹 (由 RootFolder 注册表值定义) 的 \boot 和 \tmp 子文件夹进行 TFTP 下载。
您的“fetch=tftp://$serverIP/filesystem.squashfs”表示尝试从 <RootFolder>\filesystem.squashfs 下载,这是默认 ReadFilter 不允许的。
答案2
我设法根据 telcoM 的回答并在 中的过滤器中添加/boot/*
和来解决了这个问题。boot/*
HKLM\SYSTEM\CurrentControlSet\Services\WDSServer\Providers\WDSTFTP\ReadFilter
似乎默认过滤器只允许引用 boot 和 tmp反斜杠,为了允许客户端使用斜线,这里需要明确允许斜线。
当然,WDSServer
此后我重新启动了服务。
我的最终命令行:
append initrd=initrd-clonezilla.img boot=live union=aufs noswap noprompt vga=788 fetch=tftp://10.0.10.23/boot/x64/clonezilla.squashfs
请注意,我仍然放置了 .squashfs 文件在/boot/ 目录,但是由于 Linux 使用正斜杠,我仍然必须配置注册表以允许使用正斜杠。