BigAdmin System Administration Portal
專文
Print-friendly VersionPrint-friendly Version

GRUB 與 Solaris 10 1/06 作業系統:x86 平台的新式開機管理程式

Shudong Zhou 與 Jan Setje-Eiler,2005 年 12 月

此文件描述 x86 平台上的 Solaris 10 1/06 作業系統開機架構以及使用者經驗。請注意:此文件中的某些詳細資訊若有變更,恕不另行通知。如需支援介面的資訊,請參閱線上手冊與 Solaris 作業系統管理文件。

此文件中所描述的新式開機管理程式在 Solaris 10 1/06 作業系統正式推出之前,可自 OpenSolaris 專案Solaris Express 方案取得。


1. 開機程序簡介

x86 系統的電源開啟時,BIOS 即會初始化 CPU、記憶體與平台硬體。完成這些作業後,BIOS 會從已配置的開機裝置載入初始啟動程式軟體 (即開機管理程式),並將控制權交給開機管理程式。Solaris 10 3/05 作業系統與先前的版本會使用 Sun 所開發的開機管理程式,其中包含互動式 shell,以及以真實模式驅動程式為基礎的功能表驅動裝置配置輔助工具。

從 Solaris 10 1/06 版開始,即使用開放原始碼 GRUB 或 GNU GRand 統一開機管理程式 (請參閱參考資料 1) 做為開機管理程式。首次提供時是以 GRUB 0.95 版為基礎,日後將在備妥時更新為新版本。Solaris 核心完全與多重開機規格 (參考資料 2) 相容;因此,Solaris 作業系統可透過任何實作多重開機規格的開機處理程式進行開機。

切換為 GRUB 對 Solaris 用戶有多項好處。

  • 有了 GRUB,使用者即可輕鬆地在開機功能表中指定核心與開機選項。

  • 一般使用者目前已可從 USB DVD 光碟機進行開機及安裝。

  • 此程式也讓 Solaris 作業系統比較易於與同一部機器上的其他作業系統共同存在。尤其是,Solaris 作業系統已可與 Linux 共用相同的 GRUB 開機處理程式。

  • 透過網路部署 Solaris 作業系統的作業也已簡化,尤其是設定 DHCP 伺服器的部份。設定 DHCP 伺服器時,已不再需要針對特定供應商的選項。

  • 開發人員無需再處理真實模式驅動程式,此為舊版 Solaris 所需的開機處理程式部分。

  • 對 IHV 而言,現已可在安裝時透過磁碟以外的 CD/DVD 提供驅動程式。

最後,藉由採用開放原始碼社群所開發的開機管理程式,Sun 的用戶可享用此社群所提供的大量 GRUB 使用經驗。


2. 以 GRUB 進行 Solaris 作業系統開機

GRUB 在取得控制權後,即會在主控台上顯示功能表,要求使用者選擇要啟動的作業系統實例。使用者可挑選功能表項目、使用內建的編輯器修改功能表項目,或在指令模式中手動載入作業系統核心。若要啟動 Solaris 作業系統,GRUB 必須載入 boot_archive 檔案與「多重開機」程式。開機歸檔是一種包含 Solaris 核心模組與資料的 ramdisk 影像。GRUB 只會將歸檔放入記憶體中,而不會進行任何解譯。多重開機程式是具有多重開機規格相容標頭的 ELF 可執行檔。載入完成後,GRUB 就會將控制權交給多重開機程式。接著,GRUB 本身會進入非使用中狀態,並且會收回其記憶體。

多重開機程式會讀取 boot_archive,並將開機的相關資訊 (如「多重開機規格」所指定) 傳送至核心,以負責組合核心模組。請注意,多重開機程式與 boot_archive 檔案會結合在一起。您不能混搭來自不同版本或作業系統實例的多重開機與 boot_archive 資訊。

核心在取得控制權後,即會初始化 CPU、記憶體與 I/O 裝置,並且會在裝置上掛載 bootpath 特性所指定的根檔案系統,其檔案系統類型如 fstype 特性所指定。各項特性可透過 eeprom(1M) 指令設定於 /boot/solaris/bootenv.rc 中,或透過 GRUB 功能表或 shell 設定於 GRUB 指令行中。若未指定特性,根檔案系統即會在 /devices/ramdisk:a 上預設為 UFS,在啟動安裝 miniroot 時就是這種情況。


3. 安裝

Solaris 作業系統可從 CD、DVD 與網路安裝伺服器進行安裝。Solaris 10 1/06 版本與 Solaris 10 3/05 版本有一些不同之處:

  • 基本記憶體需求:系統必須有 256MB 的主記憶體可啟動安裝 miniroot。記憶體不足的系統會收到來自 GRUB 的訊息:「選取的項目沒有足夠的記憶體可使用。」

  • USB 磁碟機支援:完全支援從透過 USB 介面連接的 CD/DVD 光碟機進行安裝。

  • 網路安裝:設定網路安裝影像的標準程序維持不變。系統假設用戶端會透過 Preboot eXecution Environment (PXE) 機制進行開機。無法進行 PXE 開機的用戶端可使用 GRUB 磁片 (請參閱「附錄 B」)。

啟動安裝 miniroot 時,會顯示 GRUB 功能表。使用者可透過互動方式編輯開機選項 (請參閱 4.2 節)。GRUB 載入 Solaris 作業系統後,會顯示下列安裝功能表:

  1. Solaris 互動式 (預設值)
  2. 自訂 JumpStart
  3. Solaris 互動式文字 (桌面階段作業)
  4. Solaris 互動式文字 (主控台階段作業)
  5. 套用驅動程式更新
  6. 單一使用者 shell

使用者自 Solaris 10 3/05 作業系統及更早版本即已熟悉的裝置配置輔助程式與相關聯的互動式 shell,已不復存在。想要在安裝期間增加必要驅動程式 (如主機配接卡驅動程式) 應選擇選項 5,並提供 ITU (Install Time Update) 磁片或 CD/DVD。

選項 6 可進行系統回復。此選項可讓您快速存取根提示,而不需完成系統標識程序。此選項相當於啟動 Solaris 故障安全防護階段作業 (請參閱 4.4 節)。


4. 管理開機子系統

4.1 BIOS

一般而言,最好在安裝 Solaris 作業系統前將 BIOS 韌體更新為最新版本。藉由瀏覽電腦製造供應商的支援網頁,通常可以完成此動作。

相較於 Solaris 10 3/05 版本,Solaris 10 1/06 作業系統所使用的是一小組不同的 BIOS 功能。尤其是,核心會透過 Intel 的 ACPI CA 軟體所提供的剖析器,利用「進階配置與電源管理介面」(ACPI) 表格中的更多資訊。

在不符合 BIOS 2.0 規格的系統上,syslog 可能會包含用以剖析 ACPI 表格的相關資訊,例如:

ACPI-0725: *** Warning:
Type override - [4s] had invalid type (DEB_[\200IODB

此類訊息不具破壞性,而且不會影響正常的系統運作。若因 ACPI 錯誤而無法進行正常系統開機,使用者可在 GRUB 功能表的核心行中將 acpi-user-options 設為 2 (請參閱 eeprom(1M)),以停用 ACPI 剖析器:

kernel .. -B ...,acpi-user-options=2

在此情況下,系統會假設有一組標準 ISA 裝置存在,包括鍵盤、滑鼠、兩個串列埠,以及一個並列埠。

4.2 開機選項

若要啟動 Solaris 作業系統,使用者可指定要載入的核心、要傳送至核心的選項 (請參閱 kernel(1M)),以及要自訂系統運作方式的特性名稱與值的清單 (請參閱 eeprom(1M))。安裝 Solaris 時,會選擇系統的一組預設值,並將其儲存在 /boot/solaris/bootenv.rc 中。使用者可透過 eeprom(1M) 指令間接編輯 GRUB 功能表或修改 bootenv.rc 檔案,以變更設定。

透過 eeprom 指定核心名稱與核心選項時,必須設定 boot-file 特性。若要以詳細模式啟動 32 位元核心,請執行下列指令:

# eeprom boot-file="kernel/unix -v"

若要在 GRUB 功能表上指定相同的內容,請將 GRUB 功能表的 kernel 指令從:

kernel /platform/i86pc/multiboot

修改為:

kernel /platform/i86pc/multiboot kernel/unix -v

如需 Solaris 核心所接受的其他開機引數,請參閱 kernel(1M)

boot-file 以外的特性可透過下列語法在 GRUB 核心指令上指定:

kernel /platform/i86pc/multiboot -B prop1=val1[,prop2=val2...]

若要配置 ttya (com1) 上的串列主控台,請將 console 特性設為 ttya

kernel /platform/i86pc/multiboot -B console=ttya        

若特性值包含逗號,則應替值加上引號。下列 GRUB 指令可將 Solaris 主控台快速設為 ttya

kernel /platform/i86pc/multiboot -B console=ttya,ttya-mode="115200,8,n,1,-"

簡言之,在 GRUB 功能表中指定 "-B foo=bar" 的效果,相當於執行 "eeprom foo=bar"。GRUB 中的 -B 選項主要用於暫時性覆寫。永久性設定應透過 eeprom(1M) 指定,才能在 Solaris 升級程序中保留下來。

4.3 開機歸檔

開機歸檔指的是檔案 platform/i86pc/boot_archive。此為核心模組及以 UFS 或 ISOFS 格式封裝之配置檔案的集合。開機時,GRUB 會將開機歸檔載入到系統記憶體中。核心此時可從開機歸檔中的資料與文字進行本身的初始化,而不需對根裝置執行 I/O。核心在取得足夠的 I/O 容量後,即會如 bootpath 特性所指定,掛載實體根裝置上的根檔案系統。此時,記憶體會捨棄 GRUB 所載入的開機歸檔。

開機歸檔的內容是指定於 /boot/solaris/filelist.ramdisk 中。關機時,系統會檢查有無根檔案系統的更新,並在必要時更新開機歸檔。系統可在關機前執行 bootadm(1M) 指令,以手動更新開機歸檔。

4.4 故障安全防護功能表項目

Solaris 10 1/06 作業系統的新增檔案 /boot/x86.miniroot-safe 包含可開機的獨立式 Solaris 影像。只要從 GRUB 功能表中選擇 Solaris failsafe 項目,即可載入此檔案。此檔案是為了在正常項目無法啟動時,方便系統管理員使用。

假設您所新增的套裝軟體含有發生錯誤的驅動程式,系統將會在開機時當機。重新開機時,您可以挑選 Solaris 故障安全防護功能表項目。請在故障安全防護階段作業中,掛載 /a 上的根檔案系統並執行 pkgrm -R,以移除發生錯誤的套裝軟體。完成此動作後,您即可重新開機至正常 Solaris 項目,以繼續系統作業。

檔案 /boot/x86.miniroot-safe 亦可複製到可攜式媒體 (如 USB 隨身碟) 做為回復工具。

4.5 使系統保持可開機狀態

為了確保系統可以開機,GRUB 啟動區段、GRUB 功能表與開機歸檔皆必須維持最新狀態。

GRUB 啟動區段位於 Solaris 分割區中。若啟動區段受損,則應使用 installgrub(1M) 指令重新安裝。請注意,installboot(1M)fmthard(1M) 無法用以寫入 GRUB 啟動區段。

GRUB 功能表位於 /boot/grub/menu.lst 中 (若使用 Solaris 開機分割區,則為 /stubboot/boot/grub/menu.lst)。此功能表可透過 bootadm(1M) update-menu 子指令進行維護。由於 GRUB 會依 BIOS 磁碟號碼為磁碟命名,因此在某些情況下,BIOS 開機裝置配置的變更可能會導致 GRUB 功能表項目無效。在此種情況下,執行 bootadm update-menu 會建立正確的功能表項目。

開機歸檔必須在修改根檔案系統後進行更新。若在核心檔案更新後系統即故障 (斷電或核心當機),開機歸檔可能不會與根檔案系統同步處理。在此情況下,透過 Solaris Service Manager (請參閱 svcadm(1M)) 管理的 system/boot-archive 服務將會在下次重新開機時失敗。Solaris 會顯示訊息,告知使用者仍有可能開機並清除觸發錯誤的事件,但讓系統重新開機、選取故障安全防護階段作業,然後在故障安全防護階段作業中更新開機歸檔,是比較安全的做法。


5. 多重開機設定

若有其他可開機的分割區存在,Solaris 安裝程式會嘗試增加其 GRUB 項目。在進行這項寫入時,會辨識 Microsoft Windows 與診斷分割區。使用者可直接編輯 GRUB 功能表,以增加其他作業系統。

假設您在系統中的同一個磁碟上配置了 Solaris 作業系統、Linux 與 Windows,如下所示:

        fdisk partition 0:      Windows
        fdisk partition 1:      Linux
        fdisk partition 2:
                slice 0         Solaris 9
                slice 3         Solaris 10 1/06

GRUB 功能表應如下所示:

#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris 10 1/06
        root (hd0,2,d)
        kernel /platform/i86pc/multiboot
        module /platform/i86pc/boot_archive
#---------------------END BOOTADM--------------------
title Solaris 9
        root (hd0,2,a)
        chainloader +1
        makeactive
title Linux
        root (hd0,1)
        kernel <from Linux's GRUB menu...>
        initrd <from Linux's GRUB menu...>
title Windows
        root (hd0,0)
        chainloader +1

請注意,Solaris fdisk partition 必須是使用中的分割區。請不要將 "makeactive" 放在 Windows 功能表下。此做法會使系統一直啟動 Windows。

從 Sun 以外的來源取得的 GRUB,目前無法辨識 Solaris on-disk VTOC 與 UFS 格式。Sun 已將變更提交至 GRUB 專案以支援此功能;在把這些變更整合進去之前,只有 Solaris GRUB 可運作。若 Linux 在主啟動區段上安裝了 GRUB,即使您將 Solaris 分割區設為使用中的分割區,您也無法存取 Solaris 作業系統。在此情況下,您可以修改 Linux 的功能表,從 Linux GRUB 進行鏈接載入。或者,您也可以在上述範例中使用 installgrub(1M) 指令,將主開機磁區取代為 Solaris GRUB:

installgrub -m /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c0t2d0s3

在 Solaris VTOC 與 UFS 實作傳播到標準 GRUB 版本前,只有 Solaris 版本的 GRUB 可運作。


6. 網路開機與無本地磁碟的用戶端

若要從網路進行開機,通常必須為 PXE 用戶端配置 DHCP 伺服器,並且需要可提供 TFTP 服務的啟動伺服器。若沒有可用的 PXE/DHCP 伺服器 (或 BIOS 不含 PXE 程式碼),您可以從磁片、CD-ROM 或本機磁碟載入 GRUB,然後在 GRUB 功能表中手動配置網路,再從檔案伺服器啟動 Solaris 作業系統。如需詳細資訊,請參閱「附錄 B」。

設定 DHCP 伺服器是隨站點而異的作業,由本地網路管理員負責執行。請參閱 Sun BluePrints 文件「Configuring JumpStart Servers to Provision Sun x86-64 Systems」:http://www.sun.com/blueprints/0205/819-1692.pdf

若要啟動 Solaris 作業系統,DHCP 伺服器必須以檔案伺服器的 IP 位址與啟動檔案 (pxegrub) 的名稱來回應 BIOS PXE 請求。啟動伺服器會負責提供 pxegrub 二進位檔、GRUB 功能表、多重開機程式與開機歸檔。有標準工具可供設定啟動伺服器。

6.1 網路安裝伺服器

add_install_client(1M) 指令可用於設定安裝用戶端的網路安裝。若是 Solaris 10 1/06 與更新版本,則應一律以 -d 選項呼叫 add_install_client(1M),進行 PXE/DHCP 開機,即使使用 GRUB 磁片啟動網路亦然。

執行 add_install_client 後,您應會看見 /tftpboot/01<eth_addr> 成為 pxegrub 的連結,以及包含 GRUB 功能表項目的 /tftpboot/menu.lst.01<eth_addr><eth_addr> 是用戶端網路介面的大寫乙太網路位址。此外,網路影像的 /boot 目錄會回送掛載到 /tftpboot 下,因此可透過 tftp 存取 multibootx86.miniroot

6.2. 無本地磁碟的用戶端

smdiskless(1M) 指令可用於設定無本地磁碟的用戶端。在先前的版本中,smdiskless(1M) 會設定 rootusr 檔案系統,並透過 NFS 匯出至用戶端。但是,使用者必須手動配置 /tftpboot 區域,才能啟動用戶端。Solaris 10 1/06 作業系統已移除此手動步驟。smdiskless(1M) 指令會自動查詢 /usr/sadm/lib/wbem/config_tftp 中的程序檔,以設定 /tftpboot 區域而進行 PXE 開機。

執行 smdiskless 後,您應會看見 /tftpboot/01<eth_addr> 成為 pxegrub 的連結,以及包含 GRUB 功能表項目的 /tftpboot/menu.lst.01<eth_addr><eth_addr> 是用戶端網路介面的大寫乙太網路位址。此外,/export/root/<hostname>/boot 會回送掛載到 /tftpboot 下,因此可透過 tftp 存取用戶端的多重開機與開機歸檔。

無本地磁碟的用戶端的開機歸檔會在用戶端關機時自動更新。若用戶端的開機歸檔在用戶端關機期間過期,您可以使用下列指令從伺服器端更新歸檔:

# bootadm update-archive -R /export/root/<hostname>

這在為 x86 用戶端提供服務的 SPARC 與 x86 平台伺服器上皆適用。


7. 舊有問題

7.1 Solaris x86 開機分割區

若是 x86 系統,Solaris 開機分割區會是 PCFS (FAT) 格式且非常小的 (約 10MB) 主要 fdisk 分割區。此功能由 Solaris 2.6 版所推出,主要原因是當時的 BIOS 韌體無法存取超過 1024 個磁柱的磁碟區塊。當時必須在磁碟開頭附近的小區域中放入開機程式碼。開機分割區可讓 Solaris 作業系統以開機磁碟的最小空間需求,安裝在非開機磁碟上。

在現今的系統中,已不再需要開機分割區。自 Solaris 10 1/06 作業系統開始,使用者就不再有建立開機分割區的選項。從舊版進行升級時,可以保留現有的 x86 開機分割區,讓系統維持在不需手動介入即可開機的狀態。在此情況下,x86 開機分割區會掛載於 /stubboot,並且包含 GRUB 啟動區段與功能表檔案 /stubboot/boot/grub/menu.lst。使用者可從 /etc/vfstab 中刪除 /stubboot 項目、修正 /boot/grub/menu.lst,然後重新配置 BIOS 而從 Solaris 磁碟分割區開機,以消除 x86 開機分割區。

7.2 真實模式驅動程式

在 Solaris 10 1/06 作業系統之前,真實模式驅動程式屬於開機程序的一部分。有些現有的核心驅動程式有可能會隱含地依賴對應的真實模式驅動程式,使硬體進入特定狀態。由於真實模式驅動程式不再是 GRUB 開機程序的一部分,所以此類核心驅動程式可能無法正常運作。若您遇到這種情況,請向驅動程式供應商回報此問題,以修正核心驅動程式。


附錄 A:GRUB 基本概念

此附錄描述 GRUB 的基本概念。此附錄中的某些詳細資訊若有變更,恕不另行通知。如需詳細資訊,請參閱 GRUB 文件。

A.1 裝置命名

開機管理程式的主要目的,在於將儲存裝置中的資料載入至系統記憶體中。若要使用 GRUB,您必須瞭解 GRUB 如何為裝置命名。

磁片會命名為:

(fd0) -- first, second floppy

GRUB 只能參考單一網路介面:

(nd) -- network interface

且此介面幾乎一律是 BIOS 透過 DHCP 所測試及配置的介面。您也可以從磁片或其他本機媒體啟動 GRUB,藉以配置網路介面 (請參閱「附錄 B」)。

硬碟名稱以 hd 與一個數字開頭,其中 0 對映於 BIOS 磁諜 0x80 (BIOS 所列舉的第一個磁碟),1 對映於 0x81,依此類推。

(hd0) -- first bios disk (also the BIOS boot disk 0x81)
(hd1) -- second bios disk (BIOS disk 0x81)
(hd0,1) -- first bios disk, second primary partition
(hd0,0,a) -- first bios disk, first fdisk partition, Solaris/BSD slice 0 and 1

請注意,修改 BIOS 配置後,BIOS 磁諜編號可能有所變更。因此,若您變更 BIOS 開機磁碟順序或修改磁碟配置,GRUB 功能表可能會無效。若要處理與 BIOS 中的磁碟編號相關的開機問題,您必須瞭解磁碟的命名慣例。

A.2 功能元件

GRUB 功能元件包括 stage1stage2menu.lststage1 是安裝在 Solaris fdisk 分割區的第一個磁區上,並且可選擇性地安裝在主開機磁區上。stage2 是安裝在 Solaris 分割區的保留區域中。menu.lst 位於 /boot/grub 中,由 GRUB stage2 讀取。

請注意,您無法使用 dd(1M)stage1stage2 寫入磁碟中,因為 stage1 必須得知 stage2 在磁碟上的位置。您可以使用 installgrub(1M) 指令安裝 GRUB 啟動區段。

GRUB shell 雖然位於 /boot/grub/bin/grub 中,但目前尚未提供支援,且某些指令因作業系統在發出 BIOS 呼叫方面有所限制,而無法在 Solaris 作業系統上運作。

A.3 GRUB 功能表

預設的功能表檔案為 /boot/grub/menu.lst。對 menu.lst 所做的手動編輯會在下次重新開機時生效。典型的 GRUB 功能表如下所示:

default 0
timeout 10
serial --unit=0 --speed=9600
terminal serial
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris
  root (hd0,0,a)
  kernel /platform/i86pc/multiboot -B console=ttya
  module /platform/i86pc/boot_archive
#---------------------END BOOTADM--------------------
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris failsafe
  root (hd0,0,a)
  kernel /boot/multiboot -B console=ttya -s
  module /boot/x86.miniroot.safe
#---------------------END BOOTADM--------------------

"default" 行會指定計時器執行完畢時所要啟動的項目。"timeout" 行會指定在啟動預設項目前等待使用者輸入的秒數。若 timeout-1,則使用者需要輸入資料。serialterminal 指令搭配使用時,會將 GRUB 輸出切換至串列中所指定的串列埠 — 單元提示行。root 指令會指定要從哪個磁碟、分割區與磁碟片段載入檔案。GRUB 會自動偵測檔案系統類型。kernel 指令之後必須要有多重開機程式。多重開機之後的字串會傳送至 Solaris 作業系統,而不做任何解譯。

若要明確指定 64 位元核心,請將 GRUB 核心指令修改為:

kernel /platform/i86pc/multiboot kernel/amd64/unix

同樣地,下列指令會啟動 32 位元核心:

kernel /platform/i86pc/multiboot kernel/unix

A.4 GRUB 指令模式

您可以在 GRUB 提示鍵入指令,以啟動作業系統。若要取得 GRUB 提示,請在 GRUB 功能表上按「c」。鍵入「help」即可取得可用指令清單。按 Esc 會返回功能表。您也可以按「e」,以編輯現有的功能表項目。編輯完成後,請按「b」以修改後的 GRUB 項目啟動系統。


附錄 B:網路部署

此附錄描述透過網路在 x86 平台上部署 Solaris 作業系統的最佳方式。此附錄中的某些詳細資訊若有變更,恕不另行通知。如需支援介面的資訊,請參閱線上手冊與 Solaris 管理文件。

B.1 Solaris 網路部署簡介

透過網路部署 Solaris 作業系統的概念,就是將 Solaris 作業系統影像放在集中的位置。任何連線至網路的機器,均可在完全沒有或幾乎沒有管理員涉入的情況下,啟動及安裝所選擇的版本。安裝程序甚至可透過 Solaris JumpStart 軟體自動完成。

若要從網路進行開機,通常必須為 PXE 用戶端配置 DHCP 伺服器,並且需要可提供 TFTP 服務的檔案伺服器。DHCP 伺服器負責為用戶端提供配置網路介面所需的資訊。DHCP 回應也包含檔案伺服器的 IP 位址與啟動檔案名稱 (pxegrub)。檔案伺服器會負責提供 pxegrub 二進位檔、GRUB 功能表、多重開機程式與開機歸檔。GRUB 功能表檔案預設為 menu.lst.01<eth_addr>。若此檔案不存在,pxegrub 會轉至備用的 DHCP 選項 150 (若已指定) 或 /tftpboot/boot/grub/menu.lst

使用 PXE 啟動 Solaris 作業系統的運作方式如下:

  1. 使用者配置 BIOS,以從網路介面開機。
  2. BIOS 傳送 DHCP 請求。
  3. DHCP 伺服器以伺服器位址與啟動檔案的名稱進行回覆。
  4. BIOS 透過 tftp 從伺服器下載 pxegrub,然後執行 pxegrub
  5. 系統透過 tftp 下載 GRUB 功能表檔案,並顯示功能表項目。
  6. 使用者選取功能表項目,並開始載入 Solaris 作業系統。

在一般部署方案中,pxegrub 會下載多重開機程式與 x86.miniroot 檔案,而此檔案會解壓縮到記憶體中的 miniroot 中。miniroot 一旦執行,即會在 /cdrom 上掛載 Solaris 影像 (如 GRUB 功能表上的 install_media 特性所指定),且安裝程序會啟動。

在以下幾節中,我們將詳細說明 DHCP 伺服器設定、用戶端需求,以及數個不同的部署方案。

B.2 DHCP 服務

用戶端傳送 DHCP 請求後,伺服器將會收到用戶端的 ID (通常為乙太網路位址)、請求的「類別」,以及用戶端所在的子網路。Solaris DHCP 伺服器會形成符合用戶端請求的回應型巨集:

  • 類別巨集

  • 網路巨集

  • IP 巨集

  • 用戶端巨集

類別巨集是以 DHCP 請求中的內嵌「類別字串」命名。在 x86 平台上,BIOS 一律會以類別 PXEClient:Arch:00000:UNDI:002001 提出 DHCP 請求。若在 DHCP 伺服器配置中以此名稱定義巨集,然後會在 B.1 節的步驟 (c) 中將巨集內容傳送至 x86 用戶端。

網路巨集會以子網路的 IP 位址命名。若在 DHCP 伺服器上定義巨集 129.146.87.0,無論請求的類別為何,巨集內容都會傳送至此子網路上的所有用戶端。若同時在類別巨集與網路巨集上定義某個選項,則網路巨集會具有優先權。

IP 巨集會以 IP 位址命名。在 x86 平台上啟動 Solaris 作業系統時,很少採用此做法。

用戶端巨集會以用戶端的類型 (01 表示乙太網路) 與大寫的 MAC 位址命名。對於具有乙太網路位址 0:0:39:fc:f2:ef 的用戶端而言,其對應的巨集名稱為 01000039FCF2EF

假設我們在子網路 129.146.87.0 中具有乙太網路位址為 0:0:39:fc:f2:ef 的用戶端,且提出了類別 PXEClient 的 DHCP 請求。

DHCP 伺服器具有相符的巨集:

- PXEClient
BootSrvA:  129.146.87.194
BootFile:  pxegrub
- 129.146.87.0
Router:    129.146.87.1
NISdmain:  sunsoft.eng.sun.com
- 01000039FCF2EF
BootFile:  01000039FCF2EF

實際的 DHCP 回應將如下所示:

BootSrvA:  129.146.87.194
BootFile:  01000039FCF2EF
Router:    129.146.87.1
NISdmain:  sunsoft.eng.sun.com

請注意,用戶端巨集中的 BootFile 會覆寫類別巨集中的 BootFile

B.3. 最簡單的網路開機設定

您必須要有一部伺服器與一個用戶端,這是最基本的要求。此伺服器應具有執行中的 DHCP 伺服器以及 Solaris 發行軟體影像。用戶端機器所連線的子網路,與能夠支援 PXE 開機請求的伺服器相同。以下是伺服器的設定步驟;假設伺服器的 IP 位址是 192.168.0.123,而用戶端的乙太網路位址是 0:0:39:fc:f2:ef

a. 移至 Solaris 發行軟體影像的 [工具] 目錄,並且執行:

# add_install_client -d -e 0:0:39:fc:f2:ef i86pc

b. 利用下列項目,為 DHCP 服務建立用戶端巨集名稱 01000039FCF2EF

BootSrvA:  192.168.0.123
BootFile:  01000039FCF2EF

您可以從 dhcpmgr GUI 或從指令行介面執行此動作。

現在您可以啟動用戶端並安裝 Solaris 作業系統。

B.4. 沒有 PXE/DHCP 的網路安裝

您可以從磁片、CD-ROM 或本機磁碟載入 GRUB、手動在 GRUB 中配置網路,並從檔案伺服器下載 multibootboot_archive。您最好這麼做的原因有很多:

  • 用戶端的 BIOS 不支援 PXE。
  • 網路卡沒有 UNDI ROM。
  • 網路上沒有 DHCP 服務。
  • 您可以將安裝/重新開機序列自動化,而不需在 BIOS 中重新配置開機裝置順序。

與 Solaris 作業系統一起安裝的標準 GRUB stage2 支援網路開機。您可以在 GRUB 功能表中按「c」進入指令模式,以使用此功能。其範例如下:

grub> ifconfig --address=192.168.0.02 --gateway=192.168.0.1 
   --mask=255.255.255.0 --server=192.168.123.110
grub> root (nd)
grub> kernel /multiboot.I86PC.Solaris_10-1 kernel/unix -B
   install_media=192.168.123.110:/export/setje/boot_74L2
grub> module /x86.miniroot
grub> boot

當然,您必須以您的本地網路環境所適用的值來指定 ifconfig 指令。您也可以使用上述指令,將功能表項目增加至磁碟或磁片上的 menu.lst 檔案。

請務必在使用磁片上的 /boot/grub/menu.lst 之前先加以編輯。若您的網路卡包含 UNDI ROM,只需挑選 UNDI 磁片影像即可。否則,您應挑選具有相符之 Solaris 驅動程式名稱 (bgee1000g 等) 的磁片影像。若您具有特殊的 GRUB stage2,並且想建置自己的磁片,請依照下列指示作業:

<format floppy>
# mount -F pcfs /dev/diskette /mnt (you may have to disable vold prior to doing this)
# cd /boot/grub
# /sbin/installgrub stage1 stage2 /dev/rdiskette
stage1 written to boot sector on floppy
first 2 sectors of stage2 written on floppy

編輯 /mnt/boot/grub/menu.lst 以包含下列項目:

title Solaris
  ifconfig --address=192.168.0.2 --gateway=192.168.0.1 
     --mask=255.255.255.0 --server=192.168.123.110
  root (nd)
  kernel /multiboot.I86PC.Solaris_11-1 kernel/unix -B
     install_media=192.168.123.110:/export/setje/boot_74L2
  module /x86.miniroot

B.5. 管理多個 Solaris 影像

若有多個可用的 Solaris 影像,您必須有辦法挑選每個用戶端所應安裝的版本或建置。以下是一些可行的方法。

  1. 讓 DHCP 伺服器保持原狀,並且在啟動伺服器上執行 add_install_client
  2. 讓啟動伺服器保持原狀,然後修改 DHCP 用戶端巨集 (透過 Web 介面) 以挑選版本/建置。
  3. 讓啟動伺服器與 DHCP 伺服器皆保持原狀,且由用戶端挑選 GRUB 功能表中的版本/建置。

案例 (a) 是管理啟動伺服器的標準方式。網路管理員只會對每個用戶端設定 DHCP 服務一次。在此之後,用戶端使用者會登入啟動伺服器,並執行 add_install_client。若您對 Solaris 10 FCS 用戶端也有可運作的 DHCP 設定,則相同的設定也適用於以 pxegrub 為基礎的開機作業。

案例 (b) 必須使用 DHCP 選項 150,才能提供 GRUB 功能表檔案。當使用者為用戶端選取版本/建置時,即會修改 DHCP 配置,以將選項 150 設定為內含選定版本/建置的功能表檔案。請注意,在啟動伺服器上,必須根據前例建立每個版本/建置的功能表檔案。若選取的版本/建置未使用 pxegrub 進行開機,則會配置舊的 Solaris 設定。

案例 (c) 僅適用於以 pxegrub 為基礎的版本或建置。在伺服器端增加新影像時,會附加功能表項目。當用戶端啟動時,新的功能表項目即可供選取。可惜的是,pxegrub 無法「鏈接載入」舊的 Solaris 網路開機程式 (稱為 nbp)。為了使用戶端選取項目適用於 nbppxegrub,您可以在伺服器上配置 pxelinux,以便載入 nbppxegrubpxelinux 的詳細討論已經超出此文範圍。

B.6. 自動化部署序列

自動化部署通常會執行下列序列:

  • 透過 Solaris JumpStart 軟體,在磁碟上啟動網路及安裝 Solaris 作業系統。
  • 重新開機至磁碟,並執行預先配置的一組作業。

部署結束時,機器會進入閒置狀態,等待使用者動作。

在大部分情況下,按 F12 即可手動啟動初始網路開機 (或視平台而定,使用其他按鍵組合)。但是,有些系統並不支援 BIOS 串列主控台重新導向,而要求使用者到實體主控台並不合理。此外,有些 BIOS 所提供的網路開機請求時間非常短,因此使用者經驗相當差。解決方法之一,就是從磁片開機至網路,再重新寫入磁片以開機至磁碟。但此方法已不可行,因為較新的平台已不提供軟碟機。

建議您從磁碟載入 GRUB。在 /boot/grub/menu.lst 中增加下列功能表項目,以便開機至 JumpStart 的網路,並透過下列指令使其成為預設開機項目:

 # bootadm set-menu default=<menu_entry_number>

其中,<menu_entry_number> 是您在下方增加之選項的功能表項目 (從 0 開始編號):

title Solaris Jumpstart
        dhcp
        root (nd)
        kernel .../multiboot kernel/unix - install -B console=...
        module ../x86.miniroot

一旦安裝系統後,即會自動修改預設的 boot =. 項目,以便從磁碟開機。如此一來,整個部署序列即可透過電源循環週期進行啟動。

B.7. 疑難排解

若此方式行不通,應如何處理?以下是疑難排解的一些提示。

a. 用戶端直接開機至磁碟,而未嘗試網路開機。

這通常表示用戶端 PXE ROM 已停用,或已將 BIOS 配置成先從磁碟開機,再從網路開機。解決方法是進入 BIOS 並修改配置。詳細資訊會隨著機器而有所不同。

b. 用戶端嘗試啟動網路,但沒有回應。

執行網路線、介面卡上的 LED 燈號 (若有的話) 等項目的一般檢查。在伺服器上執行 snoop

# snoop -v [-d <interface>] 0:0:39:fc:f2:ef

其中,<interface>bge0 之類的項目。只有在伺服器具有多張網路介面卡時,才需使用 -d 選項。您應會看見下列內容:

  • DHCPDISCOVER (client -> server)
  • DHCPOFFER (server -> client)
  • DHCPREQUEST (client -> server)
  • DHCPACK (server -> client)

若沒有 DHCPDISCOVER 訊息,表示用戶端並未進行傳輸,而這通常是因為接線或介面卡有問題。

若您看見 DHCPDISCOVER 封包,但沒有 DHCPOFFER 訊息,表示伺服器未回應。請查看 DHCPDISCOVER 訊息,以確認乙太網路位址符合 DHCP 伺服器中的巨集名稱。若伺服器使用類別巨集,請確定類別字串相符。BIOS DHCP 請求中的類別字串一律如下:

PXEClient:Arch:00000:UNDI:002001

c. 用戶端顯示 TFTP 逾時訊息。

若未正確設定 tftp 服務,即可能出現此情況。請檢查伺服器,以確認 tftp 已啟用 (in.tftpd 在執行中),而檔案 /tftpboot/01000039FCF2EF 存在並連結至 pxegrub 二進位檔。add_install_client 步驟應設定 tftp 檔案與 tftp 服務。

d. 用戶端在下載 x86.miniroot 的過程中當機。

TFTP 協定最高可傳輸 65K 的區段。有些 tftp 伺服器 (例如執行 Solaris 8 作業系統的伺服器) 僅支援小型區段 (512),而使檔案大小上限只有 32MB,小於 x86.miniroot 的大小 (約 45MB)。將 tftp 伺服器升級可解決此問題。

若伺服器執行 Solaris 8 作業系統,您可以從 Solaris 9 作業系統複製 /usr/sbin/in.tftpd,直到 Solaris 8 作業系統的 TFTP 修補程式可用為止。

e. 用戶端完成 x86.miniroot 的下載後即當機。

最可能的原因是主控台輸出送至他處。請確定 GRUB 功能表列上的 console 變數設定正確。設定 input-device/output-device 亦可解決問題。請參閱 4.2 節。

f. 用戶端顯示「找不到乙太網路卡」訊息。

從本機媒體啟動 GRUB,再從網路載入 Solaris 作業系統,即可能出現此問題。這表示 GRUB 無法透過 PCI BIOS32 服務找到網路介面。

g. 用戶端顯示「找不到 PnPBios」訊息。

從本機媒體啟動 GRUB,再從網路載入 Solaris 作業系統,即可能出現此問題。在此情況下,GRUB 雖然找到網路介面,但找不到可從網路介面卡安裝 UNDI ROM 的 PnP Bios 服務。


參考資料
  1. GNU GRUB 網頁 (http://www.gnu.org/software/grub/grub.html)
  2. GNU 站點上的「多重開機規格」網頁 (http://www.gnu.org/software/grub/manual/multiboot/multiboot.html)
  3. GRUB 與 Solaris 10 1/06 作業系統的常見問題集:x86 平台的新式開機管理程式 (http://www.sun.com/bigadmin/features/articles/grub_boot_faq.html)

Comments (latest comments first)

Discuss and comment on this resource in the BigAdmin Wiki

Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin