出自 Arch Linux 中文维基

Windows PE 是Windows的輕量級版本,旨在用於安裝 Windows Vista 或更高版本的 Windows,或是用於系統維護。 它完全運行在內存中,並可以從網絡啟動。本頁面描述了如何創建定製化的Windows PE鏡像文件(也可選擇發布在網絡上的),我們只需用到Arch Linux設備上的自由軟體包和微軟Windows自動安裝工具包(Microsoft's Windows Automated Installation Kit ,簡稱WAIK)。WAIK 可以免費下載,能用到它的地方只有:我們只需解壓其中的boot.wim文件,該文件包含了 Windows PE 的最初備份, 還有一些啟動文件。

警告: 下載 Windows Automated Installation Kit 時, 您可能會受到其許可的約束,這會阻止您將 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 分發。
警告: 確保根據您的實際需要選擇正確的目標架構: x86 (32位) 或 x64 (64位)。 Compatibility of 32-bit programs on Windows x64 is generally good, but your mileage may vary.

不同版本的 Windows 安裝介質包含不同版本的 Windows PE。Windows 版本和 Windows PE 版本之間的關係,請參考 維基百科.

提示:也許可以使用 httpfs 來避免下載整個鏡像文件。 Windows PE 只占該鏡像文件大小的 118MB。

準備可啟動的 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 啟動文件。

警告: 確保為 Windows ISO 映像(x86 或 x64)選擇了合適的體系結構。本指南僅在 x64 上進行過測試,即它使用 /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

安裝 syslinux 和 tftp-hpa.

複製需要的 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 (例如 DhcpdDnsmasq),用Linux伺服器的IP位址指向作為引導文件的 pxelinux.0 。注意:如果您的 DHCP 伺服器在路由器上,則可能無法在不安裝自定義固件(firmware)的情況下執行此操作。

完成以上全部步驟後,你將能夠從網絡啟動 Windows PE 。

注意: 根據上面給出的 PXELINUX 配置文件, Windows PE 將在5秒後默認啟動
提示:TFTP 並非為傳輸大文件而設計, 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 連接到匿名共享時,需要用一對用戶名和密碼檢查是否能夠登錄,如果可以,則允許匿名連接。顯然,只要有地方阻止用戶驗證是否可以登錄,就無法在 PE 系統中訪問 Samba 共享。

參閱