不使用啟動磁碟給主機安裝 Windows 10 (PXE 網路開機實戰)
前一陣子筆者想要給家裡的一台主機重灌 Windows 10 系統,首先就想到了使用 USB 隨身碟製作啟動磁碟,尋找一番之無果後才發現我把所有的隨身碟都忘在了學校。最終採用了網路引導的方法成功安裝!接下來是筆者整理的安裝步驟與注意事項。
裝置、檔案、程式與先決條件
注意: 下面列出的裝置、檔案等,為筆者重灌系統時使用,僅供讀者參考。若有不一致的情形,應自行搜尋替代指令或程式。
Arch Linux 系統的筆電(作為伺服器端)、想要重灌系統的主機(作為用戶端)。
用戶端主機板支援並啟用 PXE 網路啟動、伺服器端與用戶端連線至同一區域網路。
Dnsmasq、iPXE、wimboot、Samba 程式。
安裝步驟
注意: 下面的步驟,為筆者重灌系統時使用,僅供讀者參考。若有不一致的情形,應自行搜尋替代指令或程式。
確認並啟用用戶端 PXE 網路啟動
主機按一下開機鍵後,連續按鍵盤
DEL鍵,進入 BIOS/UEFI 介面。進入
Advanced選單,選中No Disk (PXE)並進入,將Onboard LAN Controller設定為Enabled、PXE Function Support設定為OnBoard。即啟用板載網路卡之 PXE 功能。
進入
Startup選單,將 PXE 網路引導調整為第一順位 (#1),伺服器端主機暫時配置完畢。
下載並配置伺服器端 iPXE 檔案
注意: 筆者的主機板為 H61 晶片組,採用
Legacy BIOS 啟動。近幾年的晶片組應均為 UEFI
啟動,讀者應自行確認主機板的啟動方式。本教學基於
Legacy BIOS 啟動編寫,關於二者的指令與檔案差異,參見末尾的
附錄:BIOS 與 UEFI 之區別與調整。
安裝必要的軟體包:
1
yay -S dnsmasq ipxe wimboot samba
檔案與驅動準備
建立工作目錄
1
2sudo mkdir -p /srv/tftp/win10
sudo mkdir -p /srv/tftp/driver掛載 Windows ISO 到這個目錄(唯讀掛載即可)
1
sudo mount -o loop,ro /path/to/win10.iso /srv/tftp/win10
拷貝 iPXE 引導檔案和 wimboot 程式
1
2
3# 這個步驟是為了讓 PXE 能夠載入 iPXE,再由 iPXE 載入 wimboot
sudo cp /usr/share/ipxe/ipxe.efi /srv/tftp/
sudo cp /usr/share/wimboot/wimboot /srv/tftp/拷貝網卡驅動程式,並解壓縮(這裡以 Realtek 的網路卡為例)
1
2
3
4# Realtek 的驅動安裝程式事實上是自解壓縮檔,我們使用 7z 指令解開
sudo mv /path/to/Install_Win11_Win10_10079_DMAROFF_01262026.zip /srv/tftp/driver/driver.zip
sudo unzip /srv/tftp/driver/driver.zip
sudo 7z x Install_Win11_Win10_10079_DMAROFF_01262026.exe在指定的路徑下尋找網卡驅動,並注入
boot.wim檔1
2
3
4
5# 不要直接修補映像檔掛載的 boot.wim,而是應當拷貝一份新檔,並賦予 777 (rwxrwxrwx) 權限
sudo cp /srv/tftp/win10/sources/boot.wim /srv/tftp/boot_patched.wim
chmod 777 /srv/tftp/boot_patched.wim
wimlib-imagex update /srv/tftp/boot_patched.wim 2 --command "add /srv/tftp/driver/WIN10/64 /Realtek"
wimlib-imagex update /srv/tftp/boot_patched.wim 1 --command "add /srv/tftp/driver/WIN10/64 /Realtek"
配置網路服務
我們要在伺服器端同時開啟 Samba (檔案共用) 與 Dnsmasq (配置 IP 與 網路引導)。
配置 Samba 網路芳鄰共享
編輯
/etc/samba/smb.conf,在末尾加入:1
2
3
4
5[install]
path = /srv/tftp/win10
browsable = yes
readonly = yes
guest ok = yes啟動服務:
1
sudo systemctl restart smb
準備 iPXE 引導指令 編寫
/srv/tftp/boot.ipxe,內容如下:1
2
3
4
5
6#!ipxe
kernel wimboot
initrd win10/boot/bcd BCD
initrd win10/boot/boot.sdi boot.sdi
initrd boot_patched.wim boot.wim
boot啟動 Dnsmasq
注意: 現在是將兩台電腦連線到同一區域網路的最後時機。使用網線將兩台電腦直接連線。
確認與用戶端主機連線所使用的網路卡,使用以下指令列出目前電腦的所有網路卡介面:
1
2# 列出電腦所有網路卡介面
ip a指令輸出應類似於:
1
2
3
4
5
6
7❯ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback ...
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether ...
3: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether ...若伺服器端透過網線與用戶端主機連線,則尋找類似
enp3s0或eth0的名稱,這代表這是一個有線網卡介面。類似
wlp0s20f3的名稱,這代表這是一個無線網卡介面。記下剛剛找到的正確的網卡介面名稱。
當前的有線網卡尚未被配置 IP 位址,執行下列指令來手動配置:
1
2
3
4
5# 1. 先啟動網路卡介面(防止其仍是 down 的狀態)
sudo ip link set enp3s0 up
# 2. 配置一個閘道器 IP(例如 192.168.50.1)
sudo ip addr add 192.168.50.1/24 dev enp3s0啟動 Dnsmasq(在
--interface=後填寫正確的網卡介面名稱):1
2
3
4
5
6
7
8
9
10
11sudo dnsmasq \
--interface=enp3s0 \
--bind-interfaces \
--dhcp-range=192.168.50.100,192.168.50.200,12h \
--enable-tftp \
--tftp-root=/srv/tftp \
--dhcp-option=66,192.168.50.1 \
--no-daemon \
--dhcp-match=set:ipxe,175 \
--dhcp-boot='tag:!ipxe,ipxe.pxe' \
--dhcp-boot='tag:ipxe,boot.ipxe'
安裝 Windows 10
操作用戶端主機,進入
Save & Exit選單,保存並退出 BIOS/UEFI。此時應當自動進入 PXE 網路引導:螢幕顯示開始下載
ipxe.pxe。進入 iPXE 介面,開始下載
boot_patched.wim。進入 Windows 藍色的安裝程式介面。
手動安裝網卡驅動、掛載安裝程式:
不要按「立即安裝」,而是按一下
Shift + F10打開命令提示字元。手動載入網卡驅動、初始化網卡:
1
2
3
4
5drvload X:\Realtek\rt640x64.inf
wpeutil initializeNetwork
ipconfig若
ipconfig指令的輸出有192.168.50.x的 IP 位址,則說明網路卡啟用成功。可以開始掛載共用資料夾了。掛載共用資料夾:
1
net use z: \\192.168.50.1\install /user:guest
提示: 由於系統映像檔為網路掛載的緣故,我們不能使用
Z:\setup.exe自動化安裝程式。我們透過命令來手動安裝。手動進行磁碟分割:
危險: 磁碟分割的部分指令具有危險性,會導致硬碟所有資料丟失!請在進行磁碟分割前,提前做好資料備份!
在命令提示字元中輸入:
1
diskpart
會進入
DISKPART>提示字元,隨後依次輸入:列出所有磁碟、選中要被分割的硬碟:
1
2
3list disk
:: 筆者只有一塊硬碟,編號為 0
select disk 0抹除硬碟、轉換為 MBR (BIOS) / GPT (UEFI) 並格式化硬碟
1
2
3
4
5
6
7
8
9
10
11:: 建立一個主要分割區
create partition primary
:: 設定為使用中(僅 MBR)
active
:: 格式化為 NTFS,標籤為 OS
format fs=ntfs quick label="OS"
:: 指派磁碟機代號 C
assign letter=C退出 Diskpart:
1
exit
解壓縮系統映像 (DISM)
現在我們利用 DISM 命令列工具,把映像檔中的檔案直接「釋出」到 C 槽。
查看映像版本:某些系統映像的
install.wim包含多個版本(例如 LTSC, IoT LTSC)可以使用這個指令查看想要安裝的版本索引 (index):1
dism /Get-WimInfo /WimFile:Z:\sources\install.wim
記下想要安裝的版本的
Index編號,筆者這裡使用2。開始解開:輸入以下指令:
1
dism /Apply-Image /ImageFile:Z:\sources\install.wim /Index:2 /ApplyDir:C:\
Index:2:這裡的數字修改為剛剛記下的編號。/ApplyDir:C:\:釋出到剛剛分割完畢的 C 槽。
耐心等待進度到 100% 完成。
寫入系統開機檔案 (BCDBoot) 系統檔案已經解開並釋出,但是還沒有開機引導檔案。需要手動寫入 BCD 開機檔案。
輸入以下指令:
1
bcdboot C:\Windows /s C: /f BIOS
/s C::指定引導分割區為 C 槽(Legacy 模式下,引導分割區與系統分割區通常為同一個)。/f BIOS:強制使用Legacy BIOS引導格式(避免使用UEFI格式)
收尾並重新啟動
拔出網線防止再次從 PXE 啟動。
在命令提示字元執行
wpeutil reboot,重新啟動主機。可能會重新啟動電腦數次,再次開機會從硬碟啟動,開始設定區域、語言、鍵盤等。
附錄:BIOS 與 UEFI 之區別與調整
隨著硬體更新,現代電腦主機板大多採用 UEFI 啟動模式,而非本教學中使用的 Legacy BIOS。若讀者的設備較新(約 2012 年後出廠),請務必參考以下差異進行調整,否則將無法順利啟動安裝程式。
核心差異對照表
項目 Legacy BIOS(舊款) UEFI(現代) 硬碟分割表 MBR GPT 開機引導檔案 undionly.kpxe或ipxe.pxeipxe.efiBCD 引導路徑 /boot/bcd/efi/microsoft/boot/bcd獨立引導分割區 不需要 (通常與 C 槽共用) 需要 (ESP 分割區, FAT32 格式) BCDBoot 參數 /f BIOS/f UEFI伺服器端配置調整 (
boot.ipxe)在 UEFI 模式下,Windows Boot Manager 需要讀取不同的 BCD 路徑,且強烈建議載入字型檔以免選單顯示亂碼。請修改
/srv/tftp/boot.ipxe:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#!ipxe
kernel wimboot
# --- 差異點 1: BCD 路徑變更 ---
# Legacy 指向 /boot/bcd
# UEFI 必須指向 /efi/microsoft/boot/bcd
initrd win10/efi/microsoft/boot/bcd BCD
# --- 差異點 2: (建議) 載入字型檔 ---
# 若無此列,UEFI 開機選單可能會顯示為方塊亂碼
# 該檔案通常位於 ISO 的 /efi/microsoft/boot/fonts/ 目錄下
initrd win10/efi/microsoft/boot/fonts/segmono_boot.ttf segmono_boot.ttf
# --- 以下保持不變 ---
initrd win10/boot/boot.sdi boot.sdi
initrd boot_patched.wim boot.wim
boot注意: Linux 系統對檔案名稱大小寫敏感。請務必檢查 ISO 解壓後的目錄(例如
EFIvsefi),確保腳本中的路徑與實際檔案完全一致。用戶端
Diskpart分割指令調整UEFI 系統必須使用 GPT 分割表,並且需要一個獨立的 ESP (EFI System Partition) 分割區來存放開機檔案。
在
Diskpart階段,請將原本的指令替換為:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15select disk 0
clean
:: --- 差異點 1: 轉換為 GPT ---
convert gpt
:: --- 差異點 2: 建立 ESP 引導分割區 (約 256MB) ---
create partition efi size=256
format fs=fat32 quick label="ESP"
assign letter=S
:: --- 差異點 3: 建立系統分割區 ---
create partition primary
format fs=ntfs quick label="OS"
assign letter=CBCDBoot 引導修復指令調整
在最後寫入開機檔案時,我們需要將引導檔案寫入到剛剛建立的 S 槽 (ESP 分割區),並指定韌體類型為 UEFI。
1
2
3:: /s S: 指定引導檔案寫入 S 槽
:: /f UEFI 指定使用 UEFI 格式
bcdboot C:\Windows /s S: /f UEFI
寫在最後
Legacy 是為了與過去相容的一種妥協,而 UEFI 才是現代硬體的歸宿。
在 PXE 指令碼中,這僅僅體現為一列 BCD 路徑的差異,但是在作業系統的底層,卻是從真實模式到保護模式、從 BIOS 中斷到 EFI 驅動的巨大跨越。



