對話 UNIX: 啟動
引言
AIX 操作系統是具有特定 IBM 風格的 Unix。IBM 最初于 1986 年發布了 AIX 1.0 版本,在過去 22 年中經過多次更新(撰寫本文時的最新版本為 AIX 6.1),AIX 已發展成為穩定的 UNIX 系統。
雖然許多人混用術語 AIX 和 RS/6000,但它們實際上表示不同的事物。AIX 是 UNIX 操作系統,IBM RS/6000® 是可供 AIX 運行的精簡指令集計算機 (RISC) 服務器硬件。IBM 最初在 IBM 6150 RT 工作站上運行 AIX,多年以來,AIX 經歷了從 IBM PS/2 Intel® 386 計算機、IBM 主機,直到 POWER 體系結構的變遷?,F在,AIX 可以在 IBM System p™(以前稱為 RS/6000)和 System i™(以前稱為 IBM iSerIEs® 和 AS/400®)計算機上運行。
AIX 啟動方法
有三種方法可以啟動 AIX 操作系統:正常、獨立和網絡啟動。
正常啟動
典型的 AIX 啟動方法是正常啟動選項。正常啟動選項從本地磁盤啟動服務器上的 AIX。啟動完成時,操作系統將處于多用戶模式。
獨立啟動
AIX 系統的第二種啟動類型稱為獨立啟動或維護模式選項。獨立啟動選項與正常啟動選項類似,但啟動時不進入多用戶模式,而是進入單用戶維護模式。您可以使用多種方法以獨立方式啟動 AIX 系統,如從可移動介質(磁帶或光盤)啟動服務器,在初始硬件外圍設備檢查過程中,當鍵盤完成初始化時,或者在可能出現問題(文件系統損壞)并且必須修補系統才能進入正常啟動時,單擊 F5(或 F6,具體取決于硬件)。同樣,一些系統可能具有允許您進入維護模式的鑰匙。獨立啟動服務器允許您在沒有其他用戶登錄的情況下安裝軟件、修復問題、運行診斷程序,以及配置硬件,從而降低資源鎖定的風險。
網絡啟動
第三種啟動類型是網絡啟動選項。同樣,與正常啟動選項類似,AIX 系統啟動時進入多用戶模式。但是,使用該選項時,AIX 從網絡上的另一臺服務器接收其啟動信息。
啟動列表及其管理方法
因為您可以從多種不同類型的介質上啟動 AIX 系統,因此您必須具備管理各種介質類型的方法。于是啟動列表派上了用場。啟動列表維護系統的各種啟動方法所對應的所有啟動設備的列表。
若要查看特定啟動方法的啟動列表,只需添加選項 -o。在以下示例中,演示了正常啟動方法。服務器將嘗試啟動的介質順序是第一本地磁盤 (hdisk0),然后是光盤 (cd0),最后通過磁帶 (rmt0) 啟動。
# bootlist -m normal -ohdisk0cd0rmt0
若要設置特定啟動方法的啟動列表,請鍵入選項 -m 和相應的啟動方法,后跟著所需的啟動設備。在下列示例中,將正常啟動的啟動列表修改為嘗試以 hdisk0、cd0、cd1 的順序啟動服務器:
bootlist -m normal hdisk0 cd0 cd1
正如您從上面的示例所看到的,每次都使用 -m 選項來指定要修改或顯示的啟動方法。該選項支持的值包括 normal(正常)、service(單用戶維護模式)、both(正常和服務)和 prevboot(先前的啟動列表)。
AIX 啟動順序
既然已經選擇了啟動方法,接下來了解服務器上電后實際發生的事件順序。
注意:在本文的其余內容中,您將使用正常啟動模式啟動服務器。
POST
在您打開電源并開啟服務器后,將檢驗服務器的硬件是否可能存在問題。該步驟稱為上電自檢(power-on self-test,POST)。當服務器執行此步驟時,POST 將檢查內存、鍵盤、聲卡和網絡設備。在此期間,如果您要進入獨立模式(單用戶模式),請在鍵盤初始化之后單擊 F5 或 F6。但在本文中,請不要按任何鍵,讓服務器進入正常啟動模式。
引導程序
在 POST 過程完成后,將引導程序(用于加載大型程序的小型程序)加載到內存中。然后,引導程序將啟動邏輯卷 (BLV) 加載到內存中。加載了 BLV 后,內核將接管啟動過程。
啟動邏輯卷和 bosboot 命令
BLV 是包含 AIX 可啟動映像的位置。通常,可以在服務器的本地磁盤上找到 BLV。BLV 包含 AIX 內核、rc.boot 文件、啟動過程所需的命令,以及精簡版本的對象數據管理器 (ODM)。
若要創建可啟動映像,請使用 bosboot 命令。使用 bosboot 命令可以從 RAM 磁盤、文件系統或內核創建啟動文件(即可啟動映像)??蓡佑诚褚约耙恍┙涌谑峭ㄟ^服務器的啟動只讀存儲器 (ROS) 和可擦可編程只讀存儲器 (EPROM) 創建的。
下列示例演示如何在用于啟動系統的本地固定磁盤上的缺省 BLV 上創建可啟動映像:
bosboot -a
AIX 內核
存儲在 BLV 中的 AIX 內核在內存中創建 / (root)、/usr 和 /var 文件系統。請記住,在操作系統啟動過程中,這些文件系統以及內核最初是存儲在內存中的。由于它們位于內存中,因此無法訪問 BLV 以外的任何內容。
文件系統加載到內存后,內核執行 init 進程,該進程現在接管啟動過程。
init 進程
AIX 內核為進程 init 分配進程標識符 (PID) 1。該進程是 AIX 上運行的所有其他進程的父進程或根 進程。加載 init 進程并運行了該根進程后,init 調用 rc.boot。
rc.boot 文件
在 AIX 引導過程中,rc.boot 文件包括三個重要的執行階段。rc.boot 的第一階段是初始化系統硬件,為啟動操作系統做準備。此時,使用配置管理器命令 cfgmgr 配置啟動系統所需的有限數量的設備。
在 rc.boot 的第二階段,掛載文件系統 /、/usr 和 /var,以及分頁空間。掛載這些文件系統后,init 被替換為磁盤上的 init,PID 為 1,并清除內存。
最后,在 rc.boot 的第三階段,從磁盤執行實際的 init 進程。在執行 init 時,讀取 /etc/inittab 文件,并執行其中的每個項目。在此期間,將 /tmp 文件系統掛載磁盤。到了啟動過程的最后階段,在 rc.boot 的第一階段未進行配置的其余設備上再次運行 cfgmgr 命令。
/etc/inittab 文件
執行 init 進程后,接下來由 init 打開 /etc/inittab 并讀取每個條目。/etc/inittab 文件的目的是為 init 進程提供在引導和正常運行過程中啟動的那些進程。
/etc/inittab 文件的格式非常特別,各個字段通過冒號分隔。/etc/inittab 的格式如下:
<ID>:<Run Level>:<Action>:<Command>
/etc/inittab 文件中定義的字段的說明如下:
ID:用于標識對象的唯一字符串。
Run Level:在系統進入 init 級別時執行 <Command>。例如,如果 /etc/inittab 中的條目設置為具有運行級別 2,那么當操作系統進入 init 級別 2 時,將執行命令。
init 或運行級別在 AIX 上與其他基于 Unix 或 Linux® 的系統不同。在 AIX 中定義了下列運行級別:
0、1:保留用于將來的操作系統擴展
2:缺省運行級別
3 至 9:可由用戶定義
a 至 c:專用級別(當 init 執行至運行級別 a、b 或 c 時,進程不會被終止。那些處于這些運行級別并且未運行的進程將開始執行,但是處于之前運行級別的進程保持不變。)
Q、q:通知 init 重新掃描 /etc/inittab 文件的快速方法
Action: action 字段通知 init 進程如何處理 inittab 文件的各個條目中的進程。以下是 AIX 所使用的 action 字段的值:
respawn:如果進程不存在,則啟動進程。不等待其終止,并繼續掃描 inittab 文件。如果進程終止,則重新啟動進程。
wait:啟動進程,并等待其終止。
once:啟動進程,但不等待其終止。如果進程終止,則不重新啟動它。
boot:只在系統啟動時處理條目。
bootwait:在服務器最初從單用戶進入多用戶模式時處理條目。
powerfail:只在 init 收到電源故障信號時執行命令。
powerwait:只在 init 收到電源故障信號時執行命令,并且等待進程終止后再繼續掃描 inittab 文件。
off:如果目前進程正在運行,則發送信號 SIGTERM,并在 20 秒后發送 SIGKILL。
ondemand:該值與 respawn 相同,但只適用于運行級別 a、b 和 c。
initdefault:僅在 init 最初執行時掃描條目。
sysinit:在登錄和 init 訪問控制臺之前執行條目。
Command:/etc/inittab 中最后輸入的字段是 command 字段。這是在 <run level> 已啟動時,<action> 在認為有必要的情況下執行的實際命令。當命令準備執行時,AIX 將以如下方式啟動子進程:sh -c exec <command>。
以下示例演示在啟動運行級別 2 時運行名為 /usr/bin/rc.atc_bin 的 Shell 腳本,并在每次調用運行級別 2 時 respawn 該進程:
CORMANY_BIN:2:respawn:/usr/bin/rc.atc_bin
若要為運行級別 0、1、3、6 和 9 禁用相同的腳本,請使用:
CORMANY_BIN:245780:respawn:/usr/bin/rc.atc_bin
查看和修改 inittab
AIX 提供了比手動更改 /etc/inittab 文件更方便的命令。這些命令遵從與其他 AIX 命令相同的命名約定:
mkitab:向 inittab 文件添加記錄。
以下示例將具有運行級別 2 的 /usr/bin/rc.atc_bin 腳本添加到 inittab 中。
mkitab “CORMANY_BIN:2:respawn:/usr/bin/rc.atc_bin
chitab:更改 inittab 文件中的記錄。語法與 inittab 文件中的實際記錄相同。
以下示例將上一示例的 inittab 文件中的 /usr/bin/rc.atc_bin 腳本的運行級別更改為 3:
chitab "CORMANY_BIN:3:respawn:/usr/bin/rc.atc_bin"
lsitab:列出 inittab 文件中的記錄。使用 lsitab 是單獨或一起查看 inittab 記錄的安全手段。
以下示例查看 inittab 文件中的所有記錄:
lsitab -a
以下示例僅查看標識為 CORMANY_BIN 的記錄:
lsitab CORMANY_BIN
rmitab:從 inittab 文件中刪除記錄。
以下示例將標識為 CORMANY_BIN 的記錄從 inittab 文件中刪除:
rmitab CORMANY_BIN
結束語
現在已讀取 inittab 文件并執行了所有應該執行的進程,系統已準備好進行登錄!您現在可以登錄并暢游您的 AIX 系統。
當您按下服務器上的電源開關時,系統魔術般地啟動了,這一切似乎很簡單,但正如您從本文中看到的,AIX 系統啟動時發生了很多事情。希望您通過閱讀本文能夠更清楚地了解 AIX 需要執行哪些過程來支持穩定的操作系統。
