Windows PE (简体中文)
Windows PE 是Windows的轻量级版本,旨在用于安装 Windows Vista 或更高版本的 Windows,或是用于系统维护。 它完全运行在内存中,并可以从网络启动。本页面描述了如何创建定制化的Windows PE镜像文件(也可选择发布在网络上的),我们只需用到Arch Linux设备上的自由软件包和微软Windows自动安装工具包(Microsoft's Windows Automated Installation Kit ,简称WAIK)。WAIK 可以免费下载,能用到它的地方只有:我们只需解压其中的boot.wim
文件,该文件包含了 Windows PE 的最初备份, 还有一些启动文件。
使用场合
通常,只能使用 Windows 计算机上的 Windows 自动安装工具包 (WAIK) 创建 Windows PE 的映像。但是,也可以使用 (Arch) Linux 机器创建和修改 Windows PE 的映像,并可选择将它们发布到网络上以进行 PXE 引导。不使用 Windows 机器是可能的。在以下情况出现时,您可能想要这样做:
- 您需要使用Arch Linux的服务器从网络安装 Windows ,或者从网络启动 Windows PE 来进行系统管理。这样做可能是因为您没有基于 Windows 的服务器,或者因为绝佳的安全性和可配置特性就是喜欢用 Linux 服务器,又或是您因为别的原因已经拥有了一台 Linux 服务器。
- 您需要在 Windows 环境下运行 Win32 应用程序,但您并没有可用的 Windows 设备,也不想用 Wine 或者您的程序在 Wine 下没有正确执行。
创建可启动的 Windows PE 镜像
安装 wimlib.
配置 Windows PE 镜像
要启动到命令提示符,请创建一个启动脚本,该脚本将包含在下一步的可启动映像中:
start.cmd
cmd.exe pause
mkwinpeimg
脚本支持使用 --overlay
选项对 Windows PE 进行进一步修改。 有关 mkwinpeimg
的更多信息,请参阅它的手册页。您可能希望这样做以添加要在 Windows PE 中运行的 Windows 应用程序或者额外的驱动程序。(可以用 Windows PE 中的命令 drvload
加载所需的驱动程序).
获取 Windows ISO 或 WAIK 镜像
mkwinpeimg
可以从各种来源创建可启动的 Windows PE ISO。 您首先需要获得:
- 选项A (适用于 Windows 7 及更高版本): Windows 安装镜像ISO文件, 它可以在微软网站上免费下载:: Windows 10 ISO. 这是最简单的方法。
-
选项B: Windows自动安装工具包镜像(WAIK)文件。 对于 Windows Vista/7, 它可以在此处下载: 一个单独的 WAIK 发行版. 从 Windows 8 开始, WAIK 被重命名为 WADK 并通过
adksetup.exe
分发。
不同版本的 Windows 安装介质包含不同版本的 Windows PE。Windows 版本和 Windows PE 版本之间的关系,请参考 维基百科.
准备可启动的 Windows PE ISO
成功获取 Windows 安装镜像或者 WAIK/WADK 镜像后,你需要挂载它。假设它叫做winimg.iso
:
# mkdir /media/winimg # mount winimg.iso /media/winimg
使用 wimlib 提供的 mkwinpeimg
脚本创建可启动的 Windows PE ISO文件 winpe.iso
, 启动脚本在上一节中已经创建:
选项A: 源镜像是 Windows 安装介质
$ mkwinpeimg --iso --windows-dir=/media/winimg --start-script=start.cmd winpe.iso
选项B: 源镜像是 WAIK/WADK:
$ mkwinpeimg --iso --waik-dir=/media/winimg --start-script=start.cmd winpe.iso
有关更多信息,请参阅 mkwinpeimg(1) , 包含 --overlay
选项以把文件复制到镜像中。
卸载源 ISO:
# umount /media/winimg
为 UEFI 系统准备 Windows PE 启动U盘
不幸的是,从 wimlib 的1.13.1-1开始,mkwinpeimg
无法构建可引导的 UEFI 系统。但是我们依然可以轻松构建这样的 UEFI 系统:Windows 10 安装 ISO 已经包含必要的 UEFI 启动文件。
/efi/boot/bootx64.efi
。 UEFI 系统是否会以这种方式启动 Windows 的 x86 映像尚不得而知。如果您可以测试,请更新此页面。在U盘上, 创建一个 GPT 分区表,其中包含一个类型为 “EFI System”的 FAT32 分区。 这可以通过 cfdisk
或 fdisk 交互式地完成,比如使用 fdisk :
# fdisk /dev/sdX (fdisk) g # Create a new GPT partition table (fdisk) n # Create new partition, leave all parameters as default (fdisk) t # Change type of partition (fdisk) 1 # Type 1 is "EFI System Partition" (fdisk) w # Save and quit
然后把此分区格式化为 FAT32:
# mkfs.vfat /dev/sdX1
挂载由 mkwinpeimg
创建的 winpe.iso
文件,挂载你的启动U盘, 复制以下内容:
# mkdir /media/{winpe,usb} # mount winpe.iso /media/winpe # mount /dev/sdX1 /media/usb # cp -r /media/winpe/* /media/usb/
最后,挂载原始 Windows ISO 文件并复制 efi
中的所有文件:
# mount winimg.iso /media/winimg # cp -r /media/winimg/efi /media/usb/
现在,你可以卸载所有 ISO 和 U 盘,你的启动 U 盘已经准备就绪。
没错: 不需要 syslinux 或 grub magic。UEFI 固件会找到 FAT 分区并加载Windows 提供的 /efi/boot/bootx64.efi
引导文件以从 U 盘引导。
引导启动 Windows PE
按照上一节所述创建可启动的 Windows PE ISO (winpe.iso
) 之后,你也许想通过如下几种方式引导启动 Windows PE 。
在虚拟机中
在虚拟机中运行 winpe.iso
作为 CD-ROM。确保分配了足够的内存,绝对要大于 ISO 文件的大小,因为 Windows PE 是从内存启动的。
使用启动U盘
如果你已经如前文所述为UEFI系统准备好了启动U盘,你只需从U盘启动即可。启动过程可能耗费一些时间(10至20秒也不算稀奇,具体取决于你的U盘),因为加载程序似乎要把一些(也可能是所有)数据复制到内存中。
使用光盘
只需把 winpe.iso
烧录 到光盘上,就可以从该光盘启动 Windows PE。
从网络启动
在 BIOS 系统中,Windows PE 可以从网络启动,通过 PXELINUX 和它的 MEMDISK 模块。 对于 UEFI 系统,可以使用 wimboot 和 iPXE 。
复制需要的 PXELINUX 文件到 TFTP server 的根目录。
# rsync -aq /usr/lib/syslinux/bios/ /var/tftpboot/
把 winpe.iso
文件放进 TFTP server 的根目录。
# mv winpe.iso /var/tftpboot
创建 PXELINUX 的配置文件,类似这个:
/var/tftpboot/pxelinux.cfg/default
UI menu.c32 MENU TITLE Network Boot TIMEOUT 50 LABEL winpe MENU LABEL Boot Windows PE from network KERNEL /memdisk INITRD winpe.iso APPEND iso raw LABEL localboot MENU LABEL Boot from local disk LOCALBOOT 0
启动 TFTP server.
配置你的 DHCP server (例如 Dhcpd 和 Dnsmasq),用Linux服务器的IP地址指向作为引导文件的 pxelinux.0
。注意:如果您的 DHCP 服务器在路由器上,则可能无法在不安装自定义固件(firmware)的情况下执行此操作。
完成以上全部步骤后,你将能够从网络启动 Windows PE 。
winpe.iso
足足有 118MB 或更大,可能需要花费超过30秒的时间加载。 使用gpxelinux.0
bootloader 而不是 pxelinux.0
, 使用HTTP而不是TFTP加载winpe.iso
或许可以提高性能从 WIndows PE 安装 Windows
启动到 Windows PE 后,您可以从安装介质安装 Windows。
安装介质可以是网络共享(Samba)。有关在局域网中的另一台机器上设置 Samba 服务器的信息,请参阅 Samba 。要分享挂载在 /media/winimg
的安装镜像,请加以下内容添加到 /etc/samba/smb.conf
:
/etc/samba/smb.conf
[REMINST] browsable = true read only = no guest ok = yes path = /media/winimg
启动到 Windows PE 命令提示符后,运行以下命令来初始化网络接口,获取 Samba 服务器的 IP (绛舌假设 Windows PE 是从运行 DHCP、TFTP 和 Samba 服务器的机器上通过 PXE 启动的,服务器 IP通常也是网关 IP),挂载网络共享,并运行图形化安装程序:
> wpeinit > ipconfig > net use I: \\IP.ADDRESS.OF.SAMBA.SERVER\REMINST > I:\setup.exe
问题解决
出现系统错误 58,指定的服务器无法执行请求的操作
如果你在执行 net use
命令时看到以下错误提示:
System error 58 has occurred. The specified server cannot perform the requested operation.
1. 确保你没有误卸载 /media/winimg
文件夹.
2. 添加一个 map to guest
到 /etc/samba/smb.conf
文件中。即在文件开头添加如下内容:
/etc/samba/smb.conf
[global] map to guest = Bad User ...
3. 重启 smbd.service
.
4. 使用命令在net中明指定任意一个用户名和对应密码:
net use I: \\IP.ADDRESS.OF.SAMBA.SERVER\REMINST /user:user pass
发生这种情况是因为 Windows 10 通过检查一些用户名和密码来连接到匿名共享,以查看它是否能够登录,如果可以,则允许匿名连接。 Apparently whatever part hides this from the user did not make it into the PE build.