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盤
不幸的是,從 1.13.1-1 版的 wimlib包 開始,mkwinpeimg
無法構建可引導的 UEFI 系統,但是我們依然可以構建包含必要的 UEFI 啟動文件的 Windows 10 安裝 ISO。
/efi/boot/bootx64.efi
。能否以這種方式啟動 Windows 的 x86 映像尚不得而知。如果您可以測試,請更新此頁面。在啟動盤上, 創建一個 GPT 分區表,其中包含一個類型為「EFI System」的 FAT32 分區。這可以通過 cfdisk
或 fdisk 交互式地完成,比如使用 fdisk :
# fdisk /dev/sdX (fdisk) g # 建立新的 GPT 分区表 (fdisk) n # 使用默认设置创建新分区 (fdisk) t # 修改分区类型 (fdisk) 1 # 类型 1 表示 "EFI System Partition" (fdisk) w # 保存并退出
然後把此分區格式化為 FAT32:
# mkfs.vfat /dev/sdX1
掛載由 mkwinpeimg
創建的 winpe.iso
文件,掛載你的啟動盤, 複製以下內容:
# 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 和啟動盤,你的啟動盤已經準備就緒。
/efi/boot/bootx64.efi
引導文件。引導啟動 Windows PE
按照上一節所述創建可啟動的 Windows PE ISO (winpe.iso
) 之後,你也許想通過如下幾種方式引導啟動 Windows PE 。
在虛擬機中
在虛擬機中運行 winpe.iso
作為 CD-ROM。確保分配了足夠的內存,絕對要大於 ISO 文件的大小,因為 Windows PE 是從內存啟動的。
使用啟動盤
如果你已經如前文所述為 UEFI 系統準備好了啟動盤,你只需從啟動盤啟動即可。啟動過程可能需要耗費一些時間(10至20秒是正常的,具體取決於啟動盤的讀取速度),因為加載程序需要把數據複製到內存中。
使用光碟
只需把 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 伺服器在路由器上,則可能無法在不安裝自定義固件的情況下執行此操作。
完成以上全部步驟後,你將能夠從網絡啟動 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 連接到匿名共享時,需要用一對用戶名和密碼檢查是否能夠登錄,如果可以,則允許匿名連接。顯然,只要有地方阻止用戶驗證是否可以登錄,就無法在 PE 系統中訪問 Samba 共享。