動機

我找不到我的隨身碟,剩下的sd卡也掉到某個床縫中,暫時拿不到 只好來研究怎麼用網路來裝OS了

原本用serva,好不容易用完,開機之後發現帳密不管怎麼打都不對,就只好自立自強了

PXE需要?

  • DHCP server
    • 發IP
    • 教PXE cilent要載什麼檔案
  • TFTP server
    • embed中常用的file transfer protocol

這裡是用TFTPD64

網路topo

PXE server <=> L2 switch <=> 要被裝的電腦

怎麼搞PXE

取得WinPE

  1. 下載Windows ADK
  1. 把winpe抽出來,這裡拉amd64
  • copype.cmd amd64 C:\winpe_amd64
  1. 做pxe需要的資料夾,這裡需要
  • winpe的PXE 開機檔案
    1. 把winpe掛載上去,
    • Dism /mount-image /imagefile:c:\winpe_amd64\media\sources\boot.wim /index:1 /mountdir:C:\winpe_amd64\mount
    1. copy PXE 開機檔案
    • copy c:\winpe_amd64\mount\windows\boot\pxe\*.* c:\tftproot\Boot
  • boot.sdi
    • copy C:\winpe_amd64\media\boot\boot.sdi c:\tftproot\Boot
  • boot.wim
    • copy C:\winpe_amd64\media\sources\boot.wim c:\tftproot\Boot
  • 字型
    • copy C:\winpe_amd64\media\Boot\Fonts c:\tftproot\Boot\Fonts
  • BCD(bootloader)
    1. 生BCD檔
    • bcdedit /createstore c:\BCD
    • bcdedit /store c:\BCD /create {ramdiskoptions} /d "Ramdisk options"
    • bcdedit /store c:\BCD /set {ramdiskoptions} ramdisksdidevice boot
    • bcdedit /store c:\BCD /set {ramdiskoptions} ramdisksdipath \Boot\boot.sdi
      • 這裡的root就是tftp的root
    • bcdedit /store c:\BCD /create /d "winpe boot image" /application osloader
    1. 把剛剛的GUID複製下來
    2. 設定BCD
    • bcdedit /store c:\BCD /set {18baf49f-d429-11eb-b837-000c299a782c} device ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions}
    • bcdedit /store c:\BCD /set {18baf49f-d429-11eb-b837-000c299a782c} path \windows\system32\winload.exe
      • 這個是boot.wim裡面的path,但要注意是用BIOS還是UEFI
      • winload.exe會用BIOS
      • winload.efi會用UEFI
    • bcdedit /store c:\BCD /set {18baf49f-d429-11eb-b837-000c299a782c} osdevice ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions}
    • bcdedit /store c:\BCD /set {18baf49f-d429-11eb-b837-000c299a782c} systemroot \windows
    • bcdedit /store c:\BCD /set {18baf49f-d429-11eb-b837-000c299a782c} detecthal Yes
    • bcdedit /store c:\BCD /set {18baf49f-d429-11eb-b837-000c299a782c} winpe Yes
    • bcdedit /store c:\BCD /create {bootmgr} /d "boot manager"
    • bcdedit /store c:\BCD /set {bootmgr} timeout 30
    • bcdedit /store c:\BCD -displayorder {18baf49f-d429-11eb-b837-000c299a782c} -addlast
    1. copy BCD
    • copy c:\BCD c:\tftproot\Boot
  1. (Optional) 如果要用UEFI,要複製bootmgfw.efi
  • copy C:\winpe_amd64\mount\Windows\Boot\EFI\bootmgfw.efi c:\tftproot\Boot

自定義winpe啟動腳本

Windows\System32\startnet.cmd,所以用剛剛的例子路徑是 c:\winpe_amd64\mount\Windows\System32\startnet.cmd

這裡直接把iso透過smbda掛上去,再call setup.exe

net use Z: \\192.168.123.1\TFTPRoot\iso iso /user:192.168.123.1\iso
Z:setup.exe

改完要寫回去boot.wim

Dism /Unmount-Image /MountDir:"C:\WinPE_amd64\mount" /commit

net use一直出事

  1. 一個是net use的問題,我試了好幾次最後試出來是上面那樣
  2. windows的網路權限問題
  • Win + R輸入secpol.msc
  • Local Policies -> Security Options
  • 裡面找Network Security: LAN Manager authentication level
  • 換成LM and NTLM – use NTLMv2 session security if negotiated
  • reboot

也可以用rededit改找 HKLM\SYSTEM\CurrentControlSet\Control\Lsa改成5

怎麼設定tftp

tftp主要就是

  1. 設定root
  2. 勾pxe支援(如果有的話)
  3. 如果是在linux上跑,還要多remap,因為path的表示方式不一樣

大概像下面這樣

怎麼設定dhcp

dhcp除了基本的ip range還有一個是boot file

boot file就是pxe client要怎麼載入初始環境(win是winpe, linux是initrd)的指示檔案 這裡是用UEFI,所以路徑放\Boot\bootmgfw.efi

大概像下面這樣

怎麼call到iso

  1. 在tftp的root中放一個iso的資料夾,裡面放iso的內容
  2. 設定成公開(要可以用smbda連)
  3. 創一個有密碼的帳號(我這裡是給iso/iso)

Ref

設定 PXE 伺服器以載入 Windows PE Utils, Windows, 10 Password Error with Samba Share If you try to mount a share on windows 2008 R2 server the system still prompt for credential even if you type them correctly 設定 PXE 伺服器以載入 Windows PE Boot WINPE over PXE on a UEFI computer WinPE: Mount and Customize