有两种办法:

一种是MS的https://docs.microsoft.com/zh-cn/windows/deployment/configure-a-pxe-server-to-load-windows-pe 这个我是最后才发现的,没有试。

另外一种是常见的基于Linux的。下面的是基于Linux的。

1.安装软件包

sudo apt-get install dnsmasq pxelinux syslinux-efi

如果失败了,多试几回。

2.创建所需要的目录

sudo mkdir /mnt/data/netboot/{bios,efi64}

3.拷贝文件

memdisk

sudo cp /usr/lib/syslinux/memdisk /mnt/data/netboot/

for BIOS boot:

cd /mnt/data/netboot/bios

sudo cp /usr/lib/PXELINUX/pxelinux.0 ./

sudo cp /usr/lib/syslinux/modules/bios/{ldlinux,vesamenu,libcom32,libutil}.c32 ./

for UEFI 目前没有成功,在下载WINPE ISO后就重启了。

cd /mnt/data/netboot/efi64

sudo cp /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi ./

sudo cp /usr/lib/syslinux/modules/efi64/ldlinux.e64 ./

sudo cp /usr/lib/syslinux/modules/efi64/{vesamenu,libcom32,libutil}.c32 ./

4.pxelinux.cfg

#link bios and efi64’s menu configuraiton dir to the same dir.

sudo mkdir /mnt/data/netboot/pxelinux.cfg

cd /mnt/data/netboot/

sudo ln -rs pxelinux.cfg bios

sudo ln -rs pxelinux.cfg efi64

5. pxelinux.cfg/default

sudo mousepad /mnt/data/netboot/pxelinux.cfg/default

下面是default的内容, ::表示这是tftp的根目录

UI vesamenu.c32

label 1

menu label ^1) install windows

KERNEL ::memdisk

INITRD ::boot/win10/winpe_win10_amd64.iso

APPEND iso raw

6.配置dnsmasq

raspberry pi的地址也要是192.168.1.x 要不然在PXE boot时会有找不到boot server的错误

sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak

可以把下面的直接拷到/etc/dnsmasq.conf

port=0 //disable DNS

interface=eth0

dhcp-range=192.168.1.0,proxy //192.168.1.0 is submask

enable-tftp

tftp-root=/mnt/data/netboot

pxe-service=x86PC, “PXELINUX BIOS”,bios/pxelinux

log-queries

log-facility=/var/log/dnsmasq.log

如果是用UEFI可以改成:

pxe-service=x86PC, “PXELINUX BIOS”,efi64/syslinux.efi 但是我的在最后加载winpe iso重启了,没有成功。

完成了上面的1-5,就实现了PXE Boot Server。根据windows和Linux的不同,需要准备不同的文件,然后把它们放到/mnt/data/netboot/boot/win10 or /mnt/data/netboot/boot/ubuntu这些对应的目录中。然后就可以在pxelinux.cfg/default中添加label.


如果是windows,可以用windows ADK工具生成winpe_win10_amd64.iso

下载并安装 Windows ADK

下载适用于 Windows 10 版本 2004 的 Windows ADK

下载适用于 ADK 版本 2004 的 Windows PE 加载项

安装后,就可以Create bootable WinPE media

Start theDeployment and Imaging Tools Environmentas an administrator.

copype amd64 C:\WinPE_amd64

用dism工具修改wim。加上一些自动运行的脚本。也可以不修改。

MakeWinPEMedia /ISO C:\WinPE_amd64 C:\WinPE_amd64\WinPE_amd64.iso

用 ubuntu or Raspberry PI 的samba创建共享目录。

sudo mousepad /etc/samba/smb.conf

在最底部加上下面的内容:

[image]

path=/mnt/data/image 这是我用来放window c盘的wim镜像的。

valid users = pi, root

read only =yes

write list = root

遇到的问题:

1.Winpe中访问共享目录

net use z: \\192.168.1.100\image 这个访问Raspberry Pi会成功,但如果换成ubuntu的就会有58 error

对于ubuntu,需要指定domain\user:原因可能是系统中的user属于不同的domain.

net use z: \\192.168.1.100\share /user:WORKGROUP\username *

2. windows系统的capture和deploy

可以用dism工具去capture C盘,然后重做系统。

https://docs.microsoft.com/zh-cn/windows-hardware/manufacture/desktop/capture-and-apply-windows-using-a-single-wim

1) capture

boot到winpe,在用net use z: \\xxxxx 建立映射网络共享目录到z:后,可以直接capture

本机的C盘到网络上的共享目录

DISM /Capture-Image /ImageFile:Z:\mydrivec.wim /CaptureDir:C:\ /Name:”Windows”

这样就得到机器的C盘的镜像。

2)deploy

准备一个diskpart.txt分区文件,可参见上面的微软文档。

select disk 0

clean

convert gpt

….

用diskpart对当前机器的硬盘重新分区。

diskpart /s diskpart.txt

然后就可以把mydrivec.wim deploy到C盘。这个的速度取决于你的共享目录的速度。

我的网络是千兆的交换机和网线。

在RaspberryPI 3B+ (90M读取速度的micro SD)上用了8分多钟才deploy了5G的mydrivec.wim。

用虚拟机中的ubuntu的话,用了5分钟。

DISM /apply-image /imagefile:Z:\mydrivec.wim /index:1 /ApplyDir:C:\

写入启动信息,不然不能windows不能正常启动。

bcdboot c:\windows /s I: /f UEFI

I是你的efi分区的letter.

参考:

https://linuxconfig.org/how-to-configure-a-raspberry-pi-as-a-pxe-boot-server

beta-tester/RPi-PXE-Server 这个好像有一个支持很多操作系统的*.sh.

扩展:

无盘启动Raspberry PI. Network boot your Raspberry Pi

Network boot your Raspberry Pi