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盤[編輯 | 編輯原始碼]
不幸的是,從 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 共享。