Windows10-PXE-安装

ipxe
ipxe wimboot

下载 Win10 镜像

官网, 选择版本及语言后:

点击 64-bit 下载即可:

挂载镜像到 http 服务下

PXE 是从网络启动, 因此 ISO 文件的内容也通过网络来获取.

查看镜像内容

使用 isoinfo 命令可查看 iso 文件内的文件结构. 以查看镜像文件是否损坏之类的.

在 Archlinux 上, 该命令在 cdrtools 包中:

1
sudo pacman -S cdrtools

之后:

1
isoinfo -i Win10_22H2_Chinese_Simplified_x64v1.iso -f

输出为:

1
2
Setting input-charset to 'UTF-8' from locale.
/README.TXT

这里不太正常的原因可能为, 其本质是一个 udf 格式文件, 而不是 iso9660.

挂载

对于该 Win10 镜像:

1
2
ls -l
.rw-r--r-- 6.1G jie 28 Apr 11:18 Win10_22H2_Chinese_Simplified_x64v1.iso

需要挂载为 udf 格式才行, fstab 文件的示例:

1
/root/Disk/Win10_22H2_Chinese_Simplified_x64v1.iso /var/www/html/pxe/win10 udf loop,ro 0 0

之后:

1
2
mount -a
systemctl daemon-reload

注意这里挂载到 httpd 服务下. 之后重启 httpd 服务:

1
apachectl graceful

PXE 安装

这里假设 PXE Server 已经配置完全. (dhcp, tftp 和 pxelinux 这些)

iPXE 编译

这里需要配合 iPXE 进行引导, 先拉取 iPXE 源码并进行编译:

1
2
3
4
5
dnf install -y git make gcc xz-devel genisoimage cpan 
git clone git://git.ipxe.org/ipxe.git
cd ipxe
cpan FindBin
make

(注意这里可能还有其他依赖缺失)

之后将编译好的 kernel 文件复制到 tftp 的根目录下:

1
cp bin/ipxe.lkrn /var/lib/tftpboot/

下载 wimboot

下载链接为 https://github.com/ipxe/wimboot/releases/latest/download/wimboot, 将其下载到 /var/lib/tftpboot 目录下:

1
2
cd /var/lib/tftpboot
wget https://github.com/ipxe/wimboot/releases/latest/download/wimboot

iPXE 脚本编写

/var/lib/tftpboot 目录下, 创建 win10 目录并把 iPXE 脚本放在这下面:

1
2
3
cd /var/lib/tftpboot
mkdir win10
vim win10.ipxe

内容为:

1
2
3
4
5
6
7
8
9
10
11
#!ipxe

set boot-url http://192.168.177.2:8080/pxe/win10
set kernel-url tftp://192.168.177.2

kernel ${kernel-url}/wimboot
initrd ${boot-url}/boot/bcd BCD
initrd ${boot-url}/boot/boot.sdi boot.sdi
initrd ${boot-url}/sources/boot.wim boot.wim
echo Before boot
boot

若不使用 boot.wim, 直接指定 iso 文件, 可以用 sanboot 启动的语法:

1
2
3
4
#!ipxe

set boot-url http://192.168.177.2:8080/pxe/win10
sanboot/xxx.iso

编写 grub default 文件

/var/lib/tftpboot/pxelinux.cfg 目录下, 创建 default 文件, 内容为:

1
2
3
4
5
6
7
8
9
10
11
default menu.c32
#default vesamenu.c32
prompt 0
timeout 600
ONTIMEOUT 1

menu title ######## PXE Boot Menu ########
label 1
menu label ^1) Install Windows 10
kernel ipxe.lkrn
append dhcp && chain tftp://192.168.177.2/win10/win10.ipxe

此时基本完成. (出现了暂时无法解决的问题, 见下一个 title)

Problem

MEMDISK 报错

1
2
3
4
5
6
7
8
9
10
11
12
13
MEMDISK: Image has fractional end sector
MEMDISK: Image seems to have fractional end cylinder
Disk is hd0, 726956K, C/H/S = 709/64/32 (guess/guess), EDD on, rw
Using safe INT 15h access to high memory
Code 1744, meminfo 252. cmdline 1, stack 512
Total size needed = 2509 bytes, allocating 3K
Old dos memory at 0x9bc99 (map says 0x9fc00), loading at 0x9b000
1588: 0xffff 15E801: 0x3c00 0x5256
INT 13 08: Success, count = 1, BPT = 0000:0000
Drive probing gives drive shift limit: 0x82
old: int13 = f000e3f3 int15 = f000f859 int1e = f00072fc
new: int13 = 9b00000a int15 = 9b0003ba int1e = f00072fc
Loading boot sector... booting...

这里是使用了错误的 kernel 导致的.

找不到驱动




Windows10-PXE-安装
http://example.com/2024/04/28/Windows10-PXE-安装/
作者
Jie
发布于
2024年4月28日
许可协议