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 連接到匿名共享時,需要用一對用戶名和密碼檢查是否能夠登錄,如果可以,則允許匿名連接。顯然,只要有地方阻止用戶驗證是否可以登錄,就無法在 PE 系統中訪問 Samba 共享。