Iscsi

無法從 iSCSI 啟動 Windows Server 2012

  • February 13, 2013

我正在研究如何將各種作業系統安裝到無盤伺服器上以通過 iSCSI 執行。伺服器對此沒有特殊的硬體(沒有 iSCSI HBA 等)

我短暫地玩過 Windows 部署服務,但它似乎與我想要的相反:我可能錯了,但它似乎旨在將基於網路的 Windows 安裝到系統上,然後從本地磁碟啟動,而我想安裝 Windows,以便它可以從 iSCSI 磁碟執行,我不在乎是否必須在本地插入安裝媒體。因此,我目前的方法不使用 WDS。

該測試針對的是 Windows Server 2012,但也可能適用於之前的版本。

簡而言之,我正在設置一個空白 iSCSI 目標(我已經嘗試了幾個軟體供應商,儘管目前我正在使用 StarWind,但它似乎沒有太大區別),並使用 PXE 連結到 gPXE 或 iPXE 來做iSCSI 引導(我都嘗試過,結果相似,但我發現 gPXE 更易於使用。)

當然,如果沒有作業系統,啟動會失敗,但它會通過 BIOS 磁碟介面將 LU 掛在其中,這樣當本地 DVD-ROM 啟動時,安裝程序會看到要安裝到的捲。

我通過進入 gPXE 提示符並鍵入以下命令來完成引導(在 iPXE 中相同,但介面 # 除外):

dhcp net1
set keep-san 1
sanboot iscsi:#.#.#.#::::iqn.xxxxxxxxxxxxxxxxxxx
exit

Windows Server 2012 似乎已安裝並在某些時候重新啟動。iPXE 啟動以從 iSCSI 啟動,並出現“Metro”標誌 - 所以至少某些東西確實安裝到了 LU。然而,螢幕隨後變為淺藍色,並以大文本短暫閃爍一條消息,關於“PC”(它實際上是一個機架伺服器,但無論如何)遇到了問題,但我無法在它消失之前閱讀所有內容並且電腦是重新啟動。

最終我得到一個標題Windows Boot Manager為:

Windows failed to start. A recent hardware or software change might be the
cause. To fix the problem:

 1. Insert your Windows installation disc and restart your computer.
 2. Choose your language settings, and then click "Next."
 3. Click "Repair your computer."

If you do not have this disc, contact your system administrator or computer
manufacturer for assistance.

   File: \Windows\system32\ntoskrnl.exe

   Status: 0xc00000e9

   Info: The operating system couldn't be loaded because the kernel is
         missing or contains errors

那些密切關注的人會意識到這些指令很難有效地遵循,尤其是在物理硬體上。(順便說一句,我嘗試安裝到物理機和虛擬機,結果相似。)

我猜這裡發生的事情是 Windows 2012 能做到這一點,因為 iPXE 已經掛鉤了中斷 13h(BIOS 磁碟服務),但是一旦系統啟動到足以切換到保護模式驅動程序,啟動就會被粗暴地中斷,因為沒有可讀取的硬碟和/或 Windows 的 iSCSI 啟動器失敗。

我正在嘗試的 iPXE 是 1.0.0+ (3fcb),而我嘗試的 gPXE 是 1.0.1。

是否有可能在沒有硬體 HBA 的情況下讓 Server 2012 在 iSCSI 上執行,如果是這樣,我可能做錯了什麼?

(我最初的回答為時過早。正如承諾的那樣,我在一切正常後重寫了它。)

首先,我發現通常支持 iSCSI 啟動的軟體是半生不熟的,涉及的不同系統的互操作性非常差。出於這個原因*,我建議盡可能使用基於硬體的解決方案,例如 iSCSI HBA。* 話雖如此,我將在這裡講述我的經歷,以防它對任何人有所幫助。

總結一下我的發現(我假設您已經為 PXE 和 iSCSI 目標設置了 DHCP 和 TFTP,並且已經連結到 gPXE 或 iPXE):

  • gPXE 和 iPXE從不將多個 NIC 寫入 iBFT(iSCSI 引導韌體表),這可能會影響 Windows Server。我在這裡的一個單獨問題中詳細討論了這個問題。
  • 除了上述設計限制之外,gPXE 還存在一個實際錯誤,該錯誤同樣會影響具有多個網路埠的系統。我會在下面解釋。為了避免這個錯誤,我使用了 gPXE 的“UNDI only”建構。這可以防止 gPXE 直接訪問 NIC,而是使用 NIC 的 PXE 載入程序提供的 API。這使 gPXE 認為只有一個網路埠(載入它的那個),從而避免了該錯誤。我不確定這個錯誤是否存在於較新的 iPXE 版本中。
  • 我最初對keep-sangPXE/iPXE 中的選項感到困惑。*僅當引導失敗時,*該keep-san標誌才會影響 gPXE 的行為。因此,只有在安裝開始時第一次引導時才需要此選項。
  • Windows Server(至少 2012 年,可能還有其他)顯然不允許將提供其係統磁碟的 iSCSI 啟動器從一個網路埠移動到另一個網路埠。如果 Windows 是從與安裝它的網路埠不同的網路埠上的啟動器啟動的,則在切換到 MS 啟動器時,Windows 將在啟動期間崩潰(BSOD 和/或重新啟動)。
  • Windows Server(2003 及更高版本)中存在一個公認的功能/問題,它將使用網關(如果指定)來訪問目標,即使目標位於本地子網上也是如此。如果網關不可用或未路由回同一埠,則引導將在切換到 MS 啟動器時失敗。 如果不需要,請確保 DHCP 沒有給出網關設置。

我上面提到的 gPXE 錯誤涉及 iBFT(iSCSI 引導韌體表)。這是一個由預引導系統放入記憶體的對象,其中包含有關 NIC、iSCSI 啟動器和用作系統磁碟的 iSCSI 目標的資訊。作業系統一旦切換到保護模式,就會使用此資訊繼續引導。格式在此處指定。

懷疑 gPXE 放置在 iBFT 中的資訊存在問題,我編寫了一個引導扇區,將 iBFT 的內容轉儲到螢幕上。使用它我發現 gPXE 寫入的數據在某些情況下是錯誤的。

如前所述,gPXE 僅將一條 NIC 記錄寫入 iBFT,但在某些情況下,寫入該 NIC 記錄的資訊是混亂的。MAC 地址和 PCI 地址將對應一個 NIC,但本地 IP 和網關地址將對應另一個。如果 SAN 不在第一個 NIC 上,則最有可能發生這種情況。

更令人困惑的是,如果 gPXE 自動引導,則會寫入此不正確的 iBFT 資訊,但是當從 gPXE 的命令提示符引導時,根據輸入的命令的確切順序,可能會寫入正確的資訊。如果 Windows 的 NIC 已更改(即使給出了正確的 iBFT),Windows 將表現出與此錯誤引起的症狀相同的症狀,您就會明白我為什麼要撕毀我的頭髮。

順便說一句,在我最初的問題中,我認為它適用於 Server 2008 R2,但不適用於 Server 2012。(我正在編輯它,因為它具有誤導性。)我懷疑它們的基本行為實際上沒有區別,而且不同的結果歸功於上述問題的微妙之處和我的測試中的微小變化。

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