Windows

什麼決定了在 VMware VM PXE 引導期間針對 WDS 伺服器使用的協議?

  • May 13, 2019

各位好,

我已經在我的環境中成功實現了 Windows 部署伺服器,使用 Microsoft 部署工具包 (v8450) 建構了 x86 和 x64 啟動映像以支持 UEFI 和 Legacy BIOS,並且能夠成功地 PXE-Boot 物理機(HP Z4)和一個虛擬機(在 ESXi 6.5 主機上執行的 VM 版本 13)。此外,我還創建了相關的 DHCP 供應商類別和策略,以確保將正確的引導文件提供給適當的 PXEClient(即 UEFI 與 BIOS)。

也就是說,當使用 UEFI 啟動時(啟用了安全啟動),我觀察到了兩件事(第二件事值得關注,因此我發布了這個問題):

  1. 在啟動過程中,物理機成功連接 WDS 伺服器並在大約 6 秒內拉下啟動映像,然後在大約 6 - 8 分鐘內繼續完成作業系統安裝。
  2. 在啟動過程中,虛擬機也成功聯繫到 WDS 伺服器並拉下啟動映像。但是,獲取啟動映像需要 45 分鐘到 1 小時。之後,作業系統安裝完成的時間與物理機差不多(大約 8 分鐘)。

為了排除故障,我確認 WDS 伺服器沒有遇到任何會影響其 NIC 性能的技術問題。我確實檢查了 VM 的 NIC 配置,發現它使用的是E1000E 適配器類型- 所以我將其更改為使用VMXNET 3 適配器類型。這帶來了輕微的改善。

所以,我決定做一個 Wireshark 數據包擷取,看看我是否能看到物理機和 VM 與 WDS 伺服器通信的方式有什麼不同。好吧,對我來說唯一突出的是以下內容:

  1. 物理機使用 TFTP 協議
  2. 虛擬機使用 UDP 協議

因此,是否有人知道某處是否存在指示虛擬機更喜歡 UDP 協議而不是 TFTP 的設置? 我在 VMware 文件中沒有找到任何確定的內容,只是聲明了 PXE 引導 VM 是可能的和受支持的這一事實。

絕對感謝任何幫助,感謝我對冗長的敘述表示歉意。

因此,對於遇到此問題的任何人,我的解決方案是調整WDS RemoteInstall 引導文件夾中相應架構(即 x86 或 x64 )的引導配置數據 (BCD) 文件中的**“ramdisktftpblocksize”“ramdisktftpwindowsize”**設置. 之後我重新啟動了 WDS 服務。我現在看到虛擬機上的啟動映像載入時間約為 10-15 秒,而使用大約 400MB 啟動映像的物理機上的啟動映像載入時間約為 6-10 秒。

我唯一注意到的是,這會創建碎片化的 IP 數據包,但無論如何它們都會重新組合,所以不會打擾我,因為無論如何根據我的頻率和時間對我的最終使用者或網路的影響很小將是用於成像的 PXE 引導系統。但是,如果這對您來說是個問題,那麼請尋求其他解決方案。

在我的環境中,路徑如下(當然你的可能不同,所以相應地調整):

For 32-bit (x86):  "F:\SCCM\RemoteInstall\Boot\x86\default.bcd"
For 64-bit (x64):  "F:\SCCM\RemoteInstall\Boot\x64\default.bcd"

注意: 出於顯而易見的原因(我希望如此),請在進行更改之前備份 default.bcd 文件。

這是我為實現此解決方案所做的工作:

  1. 打開 PXE 伺服器上的 WDS 管理控制台(在我的情況下,它是執行 Windows 部署服務角色的 SCCM 伺服器)並停止伺服器。您也可以停止 WDS 服務 - 但我更喜歡前者(因為它是一種更清潔的方法恕我直言)。
  2. 啟動一個管理命令提示符視窗(不要試圖使用 PowerShell 控制台,我在與 BCDEdit 命令互動時運氣不佳)。
  3. 在單獨的 Windows 資源管理器視窗中,找到相應的**“default.bcd”文件並記下其路徑,或者通過“SHIFT+右鍵點擊”“複製為路徑”**將其複製到剪貼板。
  4. 停止 WDS 伺服器並獲得 default.bcd 文件的路徑後,返回命令提示符並鍵入以下命令(根據需要替換x86x64**):
  • 使用以下命令列出目前引導儲存參數:
    • bcdedit /enum all /store F:\SCCM\RemoteInstall\Boot\x86\default.bcd
  • 將 TFTP Windows 大小設置為值 8:
    • bcdedit /store F:\SCCM\RemoteInstall\Boot\x86\default.bcd /set {68d9e51c-a129-4ee1-9725-2ab00a957daf} ramdisktftpwindowsize 8
  • 將 TFTP 塊大小設置為值 16384:
    • bcdedit /store F:\SCCM\RemoteInstall\Boot\x86\default.bcd /set {68d9e51c-a129-4ee1-9725-2ab00a957daf} ramdisktftpblocksize 16384
  • 再次列出目前引導儲存參數並驗證您的更改是否存在:
    • bcdedit /enum all /store F:\SCCM\RemoteInstall\Boot\x86\default.bcd
  1. 返回 WDS 管理控制台並啟動 WDS 伺服器
  2. 使用以下命令向 WDS 伺服器發出信號以使用您的更改重建引導文件:**
- sc control wdsserver 129

就是這樣。通過這些更改,我能夠在 PXE 伺服器上啟動 Wireshark,並通過 pxe 引導我的虛擬機。正如我在 Wireshark 中看到的那樣,我看到最初的對話以**“TFTPWindowSize = 4”“TFTPBlockSize = 1456”**開始,但不久之後,當引導載入程序本身開始下載時,我看到了重新協商,我設置的值開始生效 - 那時我看到虛擬機在 10-15 秒內載入了啟動映像。

正如我之前提到的,我看到了大約 8 個左右的**“分段 IP 協議”**數據包,但它們都被重新組裝,而且最終目標也達到了 - 虛擬機和物理機都快速啟動並成功安裝了作業系統。

希望這些資訊對某人有所幫助-抱歉寫了一本書……哈哈。

歸功於以下文章: https ://blog.uvm.edu/jgm/2010/11/04/tuning-microsoft-pxe-tftp/

引用自:https://serverfault.com/questions/966574