Boot

如何詢問已定義的伺服器要引導什麼

  • May 8, 2016

有哪些選項可用於完成以下引導方案?

啟動時(啟動前)聯繫定義的網路伺服器並詢問要啟動什麼(正常答案:從本地硬碟驅動器啟動;替代答案:啟動映像 XYZ)

目標是能夠重新安裝客戶端,而無需在客戶端進行使用者互動。執行此操作的合乎邏輯的方法是 PXE 引導,但由於我們無法控制預設為正常引導的環境,因此 PXE 是不安全的,因為它會打開攻擊向量。

到目前為止,我發現並嘗試了以下內容:從本地硬碟驅動器啟動 Grub2 並鍊式載入 iPXE。然後 iPXE 通過 http 聯繫定義的網路伺服器並獲取 iPXE 腳本。但是從那裡我還沒有找到從本地驅動器啟動的方法(除了再次啟動 Grub 並以無限循環結束)。我要啟動的作業系統位於啟動 Grub/iPXE 的同一硬碟驅動器的分區 2 上。

  1. 有沒有其他方法可以完成我們試圖完成的事情?
  2. 有沒有辦法告訴 Grub 在第二次啟動時選擇不同的選項(從 iPXE 返回)或告訴 iPXE 從分區 2 引導?

旁注:分區 2 包含一個 Windows 裝載程序,可以從 Grub 菜單啟動。

我找到了一種方法來完成我們正在尋找的東西。感謝 @jc__ 提供 grubenv 和 @Anthon 的提示。

所以這是我的解決方案:將帶有自定義腳本的 iPXE 核心二進製文件 (.lkrn) 與引導控制伺服器聯繫到 /boot

然後設置 Grub

1-使用來自 grubenv 的變數

GRUB_DEFAULT=saved

2- 從 Grub 在 /boot 上鍊式載入 iPXE,並在引導 iPXE 之前包含以下命令

set saved_entry='<menuentry to boot from local drive>'
save_env saved_entry

3-預先添加從本地驅動器載入作業系統的 Grub 菜單項

set saved_entry='<menuentry iPXE>'
save_env saved_entry

4-如果不需要做任何事情,啟動控制伺服器會指示 iPXE 從本地驅動器啟動

sanboot --no-describe --drive 0x80

5- 再次載入 Grub 並啟動到本地驅動器,再次將下次啟動設置為 iPXE。

進入 Windows 10 的啟動時間(包括詢問啟動控制伺服器)約為 25 秒。所以實際上相當快。:)

我已使用以下技術升級遠端系統,這也可能對您有所幫助。在該系統上,我只能啟動重置,而不是查看(啟動)螢幕。系統啟動到 grub(在 Ubuntu 12.04 上)並且有一個額外的分區和一個數據分區。訣竅是插入 /etc/default/grub

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=false

除非:

  • 控制台上的某個人選擇了其他東西
  • grub-reboot X在登錄 Ubuntu 時執行,然後重新啟動

從 Ubuntu 我會下載一個 tar 文件並將其提取到額外的分區(或手動進行小改動),然後執行update-grub以更新 grub 菜單(掃描新填充的額外分區並為其作業系統創建菜單條目),然後使用grub-rebootreboot.

如果機器無法恢復(即ssh在寬限期後無法恢復),我可以重置機器,它會在 Ubuntu 中重新啟動,以便分析出了什麼問題和下一個週期。

通過在啟動時執行適當的程序,您可以檢查下一個“圖像”是您需要下載的,看看您是否已經擁有(如果沒有下載)並安裝。然後如上重啟。

使用基於精益systemd的發行版,重新啟動過程應該相對較快,並且下載/安裝替代作業系統/發行版將花費大部分時間。

引用自:https://unix.stackexchange.com/questions/263418