IBM AIX 5.3 系统管理 -- 系统启动过程详解
?
一. 啟動過程
啟動過程包含下面的一些步驟:
?????? 1.1啟動一個系統(tǒng)的初始步驟是上電自檢(Power On Self Test,POST)。其目的是驗證基本硬件是否處于正常的工作狀態(tài)。同時初始化內(nèi)存、鍵盤、通信,以及音頻設備。您可以看到在屏幕上顯示了所有的這些設備。在這個步驟中,您可以按下功能鍵,以選擇不同的啟動列表。這個階段中所顯示的 LED 值是模型特定的。硬件和軟件方面的問題都可能使得系統(tǒng)無法啟動。
?????? 注意:基于 MCI 體系結(jié)構(gòu)的舊系統(tǒng)在這個步驟之前還將執(zhí)行一個附加的步驟,即所謂的內(nèi)建自檢(Built In Self Test,BIST)。對于基于 PCI 體系結(jié)構(gòu)的系統(tǒng),不再需要執(zhí)行這個步驟。
?????? 1.2 系統(tǒng)只讀存儲器(System Read Only Storage,ROS)對于每種類型的系統(tǒng)來說都是特定的。它是啟動 AIX 5L Version 5.3 所必需的,但是它并不為啟動工作構(gòu)建所需的數(shù)據(jù)結(jié)構(gòu)。它將定位和加載引導 (bootstrap) 代碼。系統(tǒng) ROS 中包含通用的啟動信息,并且是獨立于操作系統(tǒng)的。
?????? 1.3 軟件 ROS(也稱為引導程序)構(gòu)成了 IPL 控制塊,它與 AIX 5L Version 5.3 是兼容的,用于接收控制和構(gòu)建 AIX 5L 的特定啟動信息。將在內(nèi)存中定位一種特殊的文件系統(tǒng),并創(chuàng)建一種名為 RAMFS 的文件系統(tǒng)。然后,軟件 ROS 定位、加載、并將控制權(quán)交給 AIX 5L 啟動邏輯卷 (BLV)。軟件 ROS 是基于計算機類型的 AIX 5L 信息,并且負責完成計算機準備工作,以使得它能夠啟動 AIX 5L 內(nèi)核。
???? 1.4 可以從 /usr/lib/boot 目錄中獲得 BLV 中所包含的文件的完整列表。其中最重要的組件包含以下內(nèi)容:
?????? ?????? (1)AIX 5L 內(nèi)核
?????? ?????? (2)在啟動過程中調(diào)用的啟動命令,如 bootinfo 和 cfgmgr
?????? ?????? (3)ODM 的一個簡化的版本。在 hd4 可供使用之前,需要對許多設備進行配置,所以它們的相應方法必須存儲在 BLV 中。這些設備都被標記為預定義設備 (PdDv) 中的基礎設備。
?????? ?????? (4)rc.boot 腳本
?????? 1.5 加載 AIX 5L 內(nèi)核,并接管控制權(quán)。系統(tǒng)將在 LED 面板上顯示 0299。前面所有的代碼都是與硬件相關的。通過配置設備和啟動 init 進程,內(nèi)核將完成啟動過程。在這個階段中所顯示的 LED 代碼都是通用的 AIX 5L 代碼。
?????? 1.6 到此為止,系統(tǒng)對硬件進行了檢測、找到了 BLV、創(chuàng)建了 RAMFS,并且從 BLV 中啟動了 init 進程。但是尚未激活 rootvg。從現(xiàn)在開始,將調(diào)用三次 rc.boot 腳本,并且每次都傳遞不同的參數(shù)。
?
?????? 1.6.1 啟動階段 1
?????? 在這個階段中,將執(zhí)行下面的步驟:
?????? (1)從 RAMFS 啟動的 init 進程將執(zhí)行啟動腳本 rc.boot 1。如果出于某種原因,init 進程執(zhí)行失敗,那么將在 LED 顯示屏上顯示代碼 c06。
?????? (2)在這個階段中,將調(diào)用 restbase 命令,以便將 ODM 的部分鏡像從 BLV 復制到 RAMFS。如果這個操作成功完成,那么 LED 顯示屏將顯示 510;否則,將顯示 LED 代碼 548。
?????? (3)在執(zhí)行了該操作之后,cfgmgr -f 命令將從簡化的 ODM 中讀取 Config_Rules 類。在這個類中,將屬性 phase=1 的設備認為是基礎設備。基礎設備是訪問 rootvg 所需的所有設備。例如,如果 rootvg 位于某塊磁盤中,那么必須對從主板到磁盤之間的所有設備進行初始化。調(diào)用相應的方法,以便能夠在啟動階段 2 中激活 rootvg。
?????? (4)在啟動階段 1 結(jié)束后,將調(diào)用 bootinfo -b 命令以確定最后的啟動設備。在這個階段中,LED 將顯示 511。
?
?????? 1.6.2 啟動階段 2
?????? 在啟動階段 2 中,向 rc.boot 腳本傳遞的參數(shù)為 2。在這個階段中,將執(zhí)行下面的這些步驟:
?????? (1)可以使用 varyonvg 命令(名為 ipl_varyon 命令)的特殊版本來激活 rootvg 卷組。如果這個命令執(zhí)行成功,那么系統(tǒng)將顯示 517;否則,將顯示下面 LED 代碼中的某一個:552、554、或者 556,并且停止啟動過程。
?????? (2)使用 fsck -f 命令來檢查根文件系統(tǒng) hd4。該操作將驗證在上一次關機之前是否已經(jīng)干凈地卸載了這個文件系統(tǒng)。如果這個命令執(zhí)行失敗,那么系統(tǒng)將顯示代碼 555。
?????? (3)將根文件系統(tǒng) (/dev/hd4) 裝入到 RAMFS 中的臨時裝入點 (/mnt)。如果這個操作執(zhí)行失敗,那么在 LED 顯示屏中將顯示 557。
?????? (4)使用 fsck -f 命令檢查 /usr 文件系統(tǒng),然后進行裝入。如果這個操作執(zhí)行失敗,那么 LED 將顯示 518。
?????? (5) 使用 fsck -f 命令檢查 /var 文件系統(tǒng),然后進行裝入。使用 copycore 命令檢查是否發(fā)生了轉(zhuǎn)儲。如果發(fā)生了轉(zhuǎn)儲,那么從缺省轉(zhuǎn)儲設備 /dev/hd6 復制到缺省復制目錄 /var/adm/ras。然后,卸載 /var。
?????? (6)激活 rootvg 的主分頁空間 /dev/hd6。
?????? (7)調(diào)用 mergedev 進程,并將 RAM 文件系統(tǒng)的所有 /dev 文件復制到磁盤。
?????? (8)將 RAM 文件系統(tǒng)中所有自定義的 ODM 文件復制到磁盤。對于 hd4 和 hd5 中的兩個 ODM 版本,現(xiàn)在進行同步。
?????? (9)最后,將 rootvg(磁盤)中的根文件系統(tǒng)裝入到 RAMFS 的根文件系統(tǒng)。rootvg 文件系統(tǒng)的裝入點已變得可用。現(xiàn)在,再次將 rootvg 的 /var 和 /usr 文件系統(tǒng)裝入到它們的正常裝入點。
在這個階段中,不能使用控制臺,所以所有的啟動消息都將復制到 alog。alog 命令可以對日志進行維護和管理。
?
?????? 1.6.3 啟動階段 3
?????? 在階段 2 完成之后,激活了 rootvg,并將執(zhí)行下面的步驟:
?????? (1)啟動 /etc/init 進程。它將讀取 /etc/inittab 文件,并使用參數(shù) 3 調(diào)用 rc.boot。
?????? (2)裝入 /tmp 文件系統(tǒng)。
?????? (3)通過調(diào)用 syncvg 命令(將該命令啟動作為一個后臺進程)對 rootvg 進行同步。因此,將對 rootvg 中所有過時的分區(qū)進行更新。在這個階段中,將顯示 LED 代碼 553。
?????? (4)在這個階段中,將調(diào)用 cfgmgr 命令;如果系統(tǒng)以正常模式進行啟動,那么將使用選項 -p2 來調(diào)用 cfgmgr 命令;如果系統(tǒng)以服務模式進行啟動,那么將使用選項 -p3 來調(diào)用 cfgmgr 命令。cfgmgr 命令將從 ODM 讀取 Config_rules 文件,并且調(diào)用與 phase=2 或者 phase=3 相對應的所有方法。所有其他非基礎設備的設備,并不在這里進行配置。
?????? (4)接下來,通過調(diào)用 cfgcon 命令對控制臺進行配置。在配置了控制臺之后,如果沒有設置 STDOUT 重定向,那么啟動消息將發(fā)送到控制臺。然而,可以在 /var/adm/ras/conslog 中找到所有遺漏的消息。此時,可能顯示的 LED 代碼包括:
????????????? 1)c31:控制臺尚未配置。提供相應的指令以選擇控制臺。
????????????? 2)c32:控制臺是 LFT 終端。
????????????? 3)c33:控制臺為 TTY。
????????????? 4)c34:控制臺為磁盤中的文件。
?????? (5)最后,使用 savebase 命令對 BLV 中的 ODM 與 / (root) 文件系統(tǒng)中的 ODM 進行同步。
?????? (6)啟動 syncd 守護進程和 errdemon。
?????? (7)LED 顯示屏將關閉。
?????? (8)如果文件 /etc/nologin 存在,則將其刪除。
?????? (9)如果 CuDv 中有設備被標記為缺失,那么將在控制臺中顯示一條消息。
?????? (10)消息“System initialization completed”發(fā)送到控制臺。rc.boot 執(zhí)行完成。進程 init 將繼續(xù)處理 /etc/inittab 中的下一條命令。
?
?
二. 系統(tǒng)初始化
?????? 在系統(tǒng)啟動過程中,在預初始化過程中裝入根文件系統(tǒng)之后,將發(fā)生下面這些事件:
?????? (1)作為啟動過程中的最后一個步驟,運行 init 命令。
?????? (2)init 命令嘗試讀取 /etc/inittab 文件。
?????? (3)如果 /etc/inittab 文件存在,那么 init 命令將嘗試在 /etc/inittab 文件中查找 initdefault 條目。
?????? ?????? ?????? 1)如果 initdefault 條目存在,那么 init 命令使用指定的運行級別作為初始的系統(tǒng)運行級別。
?????? ?????? ?????? 2)如果 initdefault 條目不存在,那么 init 命令將請求用戶從系統(tǒng)控制臺 (/dev/console) 輸入一個運行級別。
?????? ?????? ?????? 3)如果用戶輸入 S、s、M、或者 m 運行級別,那么 init 命令將進入維護運行級別。只有這些運行級別不需要經(jīng)過正確格式化的 /etc/inittab 文件。
?????? (4)如果 /etc/inittab 文件不存在,那么 init 命令在缺省情況下將使系統(tǒng)進入維護運行級別。
?????? (5)init 命令每隔 60 秒將再次讀取 /etc/inittab 文件。如果在 init 命令上一次讀取 /etc/inittab 文件之后,其中的內(nèi)容發(fā)生了更改,那么將執(zhí)行 /etc/inittab 文件中的新命令。
?
2.1 /etc/inittab 文件
?????? /etc/inittab 文件用于控制初始化過程。
??????
?????? /etc/inittab 文件提供了相應的腳本,以使得 init 命令的角色成為通用的進程調(diào)度器。init 命令的進程調(diào)度活動中的主要進程是 /etc/getty 線路進程,它將啟動單獨終端線路。通常由 init 命令進行調(diào)度的其他進程包括守護進程和 Shell。
?
?????? /etc/inittab 文件由一些與位置無關的條目組成,它們的格式如下所示:
????????????? Identifier:RunLevel:Action:Command
?
?????? 每個條目之間由一個換行符進行分隔。換行符前面加上一個反斜杠 (/) 表示繼續(xù)該條目。在 /etc/inittab 文件中,對于條目的數(shù)目沒有任何限制(但不能超過最大的條目大小)。最大的條目大小為 1024 個字符。
?
條目字段包括:
(1)Identifier,由一到十四個字符組成的字段,唯一地標識一個對象。
(2)RunLevel,可以對該條目進行處理的運行級別。
運行級別具有下面的屬性:
????????????? 1)運行級別有效地對應于系統(tǒng)中的進程配置。
????????????? 2)可以為每個由 init 命令啟動的進程分配一個或者多個運行級別(該進程可以存在于其中)。
????????????? 3)運行級別使用數(shù)字 0 到 9 進行表示。例如,如果系統(tǒng)處于運行級別 1,那么只有那些在運行級別字段中包含 1 的條目才會啟動。
?????? ?????? 4)當您請求 init 命令更改運行級別時,在運行級別字段中不包含匹配條目(對于目標運行級別)的所有進程都將接收到一個警告信號 (SIGTERM)。在使用刪除信號 (SIGKILL) 強行結(jié)束這些進程之前,有 20 秒鐘的過渡期。
?????? ?????? 5)通過使用從 0 到 9 的任意組合,可以選擇多個運行級別,從而在運行級別字段中為一個進程定義多個運行級別。如果沒有指定運行級別,那么就假定該進程在所有的運行級別中都是有效的。
????????????? 6)在運行級別字段中,還可能出現(xiàn)其他四種取值,即使它們并不是真正的運行級別:a、b、c 和 h。僅當使用 telinit 命令請求它們運行時(無論系統(tǒng)當前運行級別如何),才會處理那些運行級別字段中包含這些字符的條目。它們與運行級別的不同之處在于,init 命令不可能進入到運行級別 a、b、c 或者 h。另外,任何這些進程的執(zhí)行請求都不會更改當前運行級別。而且,在 init 命令更改級別時,不會終止以 a、b 或者 c 命令開頭的進程。只有在下面三種情況下才會終止它們:在 /etc/inittab 文件中,它們所在行的操作字段被標記為 off,從 /etc/inittab 中完全刪除它們所在的行,或者 init 命令進入到單用戶模式。
?
(3)Action,用于告訴 init 命令如何處理在進程字段中指定的進程。init 命令能識別下列的操作:
????????????? 1)respawn:如果進程不存在,則啟動該進程。不需要等待它的結(jié)束(繼續(xù)掃描 /etc/inittab 文件)。當進程中止時,重新啟動該進程。如果該進程已經(jīng)存在,則什么也不做,繼續(xù)掃描 /etc/inittab 文件。
????????????? 2)wait:當 init 命令進入到與該條目的運行級別相匹配的運行級別時,啟動該進程,并等待它的結(jié)束。當 init 命令處于相同的運行級別時,所有后續(xù)對 /etc/inittab 文件的讀取操作都將導致 init 命令忽略這個條目。
????????????? 3)once:當 init 命令進入到與該條目的運行級別相匹配的運行級別時,啟動該進程,并且不需要等待它的結(jié)束。當它中止時,不重新啟動該進程。當系統(tǒng)進入一個新的運行級別,并且該進程的運行來自前一個運行級別更改時,不重新啟動該程序。
????????????? 4)boot:僅在系統(tǒng)啟動時(即在系統(tǒng)啟動的過程中當 init 命令讀取 /etc/inittab 文件的時候)處理該條目。啟動該進程,不需要等待它的結(jié)束,并且當它中止時,不重新啟動該進程。為了使得該指令有意義,運行級別應該為缺省值,或者它必須與啟動時 init 命令的運行級別相匹配。對于系統(tǒng)硬件重新啟動之后的初始化功能來說,這種操作是非常有價值的。
????????????? 5)bootwait:在系統(tǒng)啟動之后,當 init 命令第一次從單用戶進入到多用戶狀態(tài)時,處理該條目。啟動該進程,等待它的結(jié)束;并且當它中止時,不重新啟動該進程。如果 initdefault 為 2,那么在啟動之后運行該進程。
????????????? 6)powerfail:僅當 init 命令接收到電源故障信號 (SIGPWR) 時,才執(zhí)行與這個條目相關聯(lián)的進程。
?????? ?????? 7)powerwait:僅當 init 命令接收到電源故障信號 (SIGPWR) 時,才執(zhí)行與這個條目相關聯(lián)的進程,并且在繼續(xù)處理 /etc/inittab 文件之前,必須等待它結(jié)束。
????????????? 8)off:如果與這個條目相關聯(lián)的進程目前正在運行,那么發(fā)送警告信號 (SIGTERM),等待 20 秒鐘,然后使用刪除信號 (SIGKILL) 終止該進程。如果該進程沒有運行,則忽略這個條目。
????????????? 9)ondemand:從功能上看,與 respawn 是相同的,但是這個操作適用于 a、b 或者 c 值,而不是運行級別。
????????????? 10)initdefault:僅在 init 命令最初被調(diào)用時,才掃描包含這個操作的條目。init 命令使用這個條目(如果它存在的話)來確定最初要進入的運行級別。通過使用運行級別字段中所指定的最高運行級別,就可以實現(xiàn)這一點,并使用它作為其初始狀態(tài)。如果運行級別字段為空,那么將其解釋為“0123456789”:因此,init 命令將進入運行級別 9。另外,如果 init 命令在 /etc/inittab 文件中沒有找到 initdefault 條目,那么將要求用戶在啟動時指定一個最初的運行級別。
????????????? 11)sysinit:當 init 命令在登錄之前嘗試訪問控制臺時,將執(zhí)行這種類型的條目。在正常情況下,這個條目僅用于初始化設備(init 命令可能會對這些設備詢問有關運行級別的問題)。執(zhí)行這些條目,并等待它們結(jié)束,然后再繼續(xù)。
?
(4)Command:要執(zhí)行的 Shell 命令。整個命令字段以 exec 作為前綴,然后以 sh -c exec command 的形式傳遞給一個使用 fork 系統(tǒng)調(diào)用生成的 sh。任何合法的 sh 命令語法都可以出現(xiàn)在這個字段中。可以使用 # comment 語法插入注釋。
?
?????? getty 命令將覆蓋 /etc/inittab 文件中出現(xiàn)在它之前的任何命令的輸出。要將這些命令的輸出記錄到啟動日志,可以使用管道將它們的輸出傳遞給 alog -tboot 命令。
?
?????? 在 init 命令處理 inittab 條目時,stdin、stdout 和 stderr 文件描述符可能是不可用的。向 stdout 或者 stderr 進行寫入操作的任何條目都可能無法按照預期的方式工作,除非它們將自己的輸出重定向到一個文件或者 /dev/console。
?
對于修改 /etc/inittab 文件中的記錄,僅支持下列的命令:
?????? (1)mkitab:將記錄添加到 /etc/inittab 文件。
?????? (2)lsitab:列出 /etc/inittab 文件中的記錄。
?????? (3)chitab:更改 /etc/inittab 文件中的記錄。
?????? (4)rmitab:刪除 /etc/inittab 文件中的記錄。
?
例如,向 /etc/inittab 文件添加一條記錄,以便在運行級別 2 中運行 find 命令,并且在它結(jié)束后再次啟動它:
1. 運行 ps 命令,并顯示那些僅包含單詞 find 的進程:
| # ps -ef | grep find???????????????????????????????????? ?????? root 19750 13964?? 0 10:47:23? pts/0? 0:00 grep find # |
?
2. 使用 mkitab 命令向 /etc/inittab 添加一條名為 xcmd 的記錄:
| # mkitab "xcmd:2:respawn:find / -type f > /dev/null 2>&1" |
?
3. 使用 lsitab 命令顯示新的記錄:
| # lsitab xcmd xcmd:2:respawn:find / -type f > /dev/null 2>&1 |
?
4. 顯示進程:
| # ps -ef | grep find????????????????????????????????????? ?????? root 28972 13964?? 0 11:07:33? pts/0? 0:00 grep find? |
?
5. 結(jié)束 find 進程:
| # kill 25462 |
?
6. 顯示進程:
| # ps -ef | grep find????????????????????????????????????????????????????????? ?????? root 23538 13964?? 0 10:58:24? pts/0? 0:00 grep find????????????????????? ?????? root 28966???? 1?? 4 10:58:21????? -? 0:00 find / -type f |
?
由于 action 項被設置成為了 respawn,所以一個新的 find 進程(上面顯示的 28966)在前一個進程結(jié)束后又被系統(tǒng)啟動了。
這個進程會被不斷的重新啟動,除非把 action 項的設置修改,如:
1. 把 xcmd 這條記錄的 action 項的值從 respawn 修改為 once:
| # chitab "xcmd:2:once:find / -type f > /dev/null 2>&1" |
?
2. 顯示進程:
| # ps -ef | grep find?????????????????????? ??????????????????????????????????? ?????? root 20378 13964?? 0 11:07:20? pts/0? 0:00 grep find????????????????????? ?????? root 28970???? 1?? 4 11:05:46????? -? 0:03 find / -type f |
?
3. 結(jié)束 find 進程:
| # kill 28970 |
?
4. 顯示進程:
| # ps -ef | grep find??????????????????? ?????????????????? ?????? root 28972 13964?? 0 11:07:33? pts/0? 0:00 grep find? |
?
可以看到 find 進程沒有再被系統(tǒng)啟動。
要從 /etc/inittab 文件中刪除這條記錄,您可以使用 rmitab 命令。例如:
| # rmitab xcmd # lsitab xcmd # |
?
2.2 /etc/inittab 條目的順序
?
在 /etc/inittab 文件中,基本條目按照如下所示的方式進行排序:
(1)initdefault
(2)sysinit
(3)Powerfailure Detection (powerfail)
(4)Multiuser check (rc)
(5)/etc/firstboot (fbcheck)
(6)System Resource Controller (srcmstr)
(7)Start TCP/IP daemons (rctcpip)
(8)Start NFS daemons (rcnfs)
(9)cron
(10)pb cleanup (piobe)
(11)getty for the console (cons)
??????
?????? 必須在 etc/inittab 文件的開始處附近啟動系統(tǒng)資源控制器(System Resource Controller,SRC),因為需要 SRC 守護進程來啟動其他進程。因為 NFS 需要 TCP/IP 守護進程正確地運行,所以應該在啟動 NFS 守護進程之前啟動 TCP/IP 守護進程。/etc/inittab 文件中的條目根據(jù)依賴關系進行排序,這意味著,如果一個進程 (process2) 的正常運行需要另一個進程 (process1) 的存在,那么在 /etc/inittab 文件中,process1 的條目應該出現(xiàn)在 process2 的條目之前。
?
三.? 如何對無響應的啟動過程進行恢復
?????? 如果您的系統(tǒng)無法啟動,AIX 5L 提供了一些工具和方法以便對掛起的啟動過程進行恢復。
?????? 這個部分將介紹可能導致系統(tǒng)在啟動過程中出現(xiàn)掛起的情況。
?
3.1? bootlist 命令
?????? 可以更改系統(tǒng)查找相關設備(以獲得其啟動代碼)的順序。bootlist 命令顯示并改變可用于系統(tǒng)的啟動設備列表。該命令的一般語法規(guī)則如下所示:
| ? |
?????? bootlist [ { -m Mode } [ -r ] [? -o? ] [ [ -i ] | [ [ -f File ]
?????? [ Device [ Attr=Value ... ] ... ] ] ]
?
bootlist 命令最常使用的一些標志。
| 標志 | 說明 |
| -m mode | 指定所要顯示或改變的啟動列表。模式變量的可能取值為 normal、service、both 或者 prevboot。 |
| -f File | 表示從指定的文件名讀取設備信息。 |
| -i | 表示由 -m 標志指定的設備列表應該失效。 |
| -o | 表示執(zhí)行了任何指定的改變之后,將顯示指定的啟動列表。輸出是設備名稱列表。 |
| -r | 表示執(zhí)行了任何指定的改變之后,將顯示指定的啟動列表。輸出取決于硬件平臺。 |
?
bootlist 命令允許用戶顯示和改變要啟動的系統(tǒng)中可能的啟動設備的列表。這個命令支持下面的更新:
?????? (1)常規(guī)啟動列表:當系統(tǒng)以常規(guī)方式啟動時,常規(guī)列表為此指定可能的啟動設備。
?????? (2)服務啟動列表:當系統(tǒng)以服務方式啟動時,服務列表為此指定可能的啟動設備。
?????? (3)前一啟動設備條目:該條目指定了最近一次啟動系統(tǒng)的設備。一些硬件平臺可能試圖在查找其他列表中的啟動設備之前先從前一啟動設備進行啟動。
?
?????? 對這些啟動列表的支持,可能隨著平臺的不同而不同,并且在某些平臺中可能沒有啟動列表。當系統(tǒng)啟動時,它將在啟動列表中搜索啟動設備,系統(tǒng)將選擇列表中的第一個設備,并確定它是否可以啟動。如果在第一個設備上沒有檢測到啟動文件系統(tǒng),該系統(tǒng)將轉(zhuǎn)移至列表中的下一個設備。因此,設備在設備列表中的排序是非常重要的。
?
要顯示啟動列表(AIX Version 4.2 或更高版本),可以使用下面的命令:
| # bootlist -m normal -o cd0 hdisk0 blv=hd5 rmt0 |
?
對正常的啟動列表進行更改,并且刪除 rmt0(舉例來說),可以使用下面的命令:
| # bootlist -m normal cd0 hdisk0 |
?
或者創(chuàng)建一個包含 cd0 hdisk0 的列表的文件(由空格進行分隔,或者每個設備占一行),并且使用下面的命令:
| # bootlist -m normal -f filename |
?
?????? 這將更改常規(guī)啟動列表,以表示在啟動系統(tǒng)時,它將首先嘗試從 cd0 進行啟動。如果在 cd0 中無法找到啟動鏡像,那么它將轉(zhuǎn)向 hdisk0。如果搜索失敗,那么它將顯示一個 LED 代碼,并等待用戶進行干預。它不會繼續(xù)搜索 rmt0。
在更改了啟動列表之后,對其進行驗證,如下所示:
| # bootlist -m normal -o hdisk0 blv=hd5 cd0 |
?
?????? 對這些啟動列表的支持可能隨著平臺的不同而不同,并且在某些平臺中可能沒有啟動列表。當搜索啟動設備時,系統(tǒng)將選擇列表中的第一個設備,并確定它是否可以啟動。如果在第一個設備中沒有檢測到 BLV,那么系統(tǒng)將轉(zhuǎn)移至列表中的下一個設備。因此,設備在設備列表中的排序是非常重要的。
?
?
3.2? 啟動設備選擇
?????? 下表提供了可以在您的啟動列表中使用的命名規(guī)范。向啟動列表所添加的每個設備都必須處于 AVAILABLE 狀態(tài)。否則,bootlist 命令將失敗,并且您將碰到與以下所示類似的錯誤:
| 0514-210 bootlist: Device xxxxx is not in the AVAILABLE state |
?
| 設備 | 說明 |
| hdiskxx | 物理卷設備邏輯名 |
| cdxx | SCSI 和 IDE CD-ROM 設備邏輯名 |
| rmtxx | 磁帶設備邏輯名 |
| entxx | 以太網(wǎng)適配器邏輯名 |
| tokxx | 令牌環(huán)適配器邏輯名 |
?
?
3.3? 訪問無法啟動的系統(tǒng)
?????? 如果您無法啟動系統(tǒng),那么第一步是訪問該系統(tǒng),并查看導致該故障的可能原因。這個過程允許您獲得系統(tǒng)提示符,以便您可以嘗試從系統(tǒng)恢復數(shù)據(jù),或者執(zhí)行糾正性的操作以使得系統(tǒng)能夠從硬盤啟動。
?
要訪問該系統(tǒng),需要執(zhí)行以下步驟:
?????? (1)將系統(tǒng)功能鍵(如果有的話)旋至 Service 位置,或者在基于 PCI 的系統(tǒng)中按 F5,以便使系統(tǒng)從磁帶/CD-ROM/DVD-ROM 驅(qū)動器進行啟動(在步驟 4 的執(zhí)行過程中)。
?????? (2)在打開系統(tǒng)單元的電源之前,先打開所有外部設備的電源,如終端、CDROM 或 DVD-ROM 驅(qū)動器、磁帶驅(qū)動器、監(jiān)視器和外部磁盤驅(qū)動器。然后,打開系統(tǒng)單元以便從安裝媒體進行啟動。
?????? (3)將安裝媒體 Volume 1 插入到磁帶驅(qū)動器、CDROM 或 DVD-ROM 驅(qū)動器,關閉系統(tǒng)單元的電源。
?????? (4)將系統(tǒng)單元的電源開關切換到打開位置。在啟動時,將會顯示這樣一個屏幕(在圖 1 的屏幕之前),其中要求您按 F1 功能鍵以選擇合適的顯示器作為系統(tǒng)控制臺。系統(tǒng)中每個顯示器都將接收一個功能鍵數(shù)值,以便將其標識為系統(tǒng)控制臺。系統(tǒng)從安裝媒體啟動。幾分鐘之后,LED 中將顯示 c31(如果您的系統(tǒng)有 LED;否則,將會顯示與圖 1 所示類似的屏幕)。
圖 1. BOS 安裝和維護屏幕
???????????????????????????????????
?????? (5)選擇選項 3“Start Maintenance Mode for System Recovery”,并按回車。這時將顯示與圖 2 所示類似的屏幕。
圖 2. 維護菜單
?????????????
?????? (6)輸入 1,即“Access a Root Volume Group”。這時將顯示與圖 3 所示類似的屏幕。
圖 3. 警告屏幕
?????????????
?????? (7)請記下警告信息。如果您希望返回到前一個菜單,請輸入 99;否則,輸入 0 以進行確認。這將顯示圖 4 中的屏幕。
圖 4. 所找到的卷組的列表
??????????????????
?????? (8)選擇您希望顯示邏輯卷信息的卷組。這是非常重要的,因為 rootvg 中將包含 hd5,即啟動邏輯卷。輸入卷組編號,并按回車。這時將顯示與圖 5 所示類似的屏幕。
圖 5. 在所選擇的卷組中找到的邏輯卷的列表
???????????? ?
?????? (9)從“Volume Group Information”屏幕中選擇一個選項,并按回車。其中每一項將進行以下操作:
????????????? 1)選項 1:選擇這個選項,將在系統(tǒng)為您提供 Shell 和系統(tǒng)提示符之前,先導入并激活 rootvg 卷組,并為根卷組裝入文件系統(tǒng)。
????????????? 2)選項 2:選擇這個選項,將在為根卷組裝入文件系統(tǒng)之前,先導入并激活 rootvg 卷組,并為您提供 Shell 和系統(tǒng)提示符。
????????????? 3)選項 99:輸入 99 將使您返回到“Access a Root Volume Group”屏幕。
?????? (10)使用適當?shù)姆椒▉砘謴蛿?shù)據(jù),或者采用動作(如使用 bosboot 命令)使系統(tǒng)可以正常地啟動。
?
3.4? 常見的啟動 LED 代碼
?????? 在系統(tǒng)初始化過程中,提供了操作員面板顯示屏的服務器將顯示一些 LED 代碼,這些代碼可以提供有關啟動過程狀態(tài)的信息。一些代碼是指示服務器運行到啟動過程哪一步的檢查點。對于不同的服務器類型,這些代碼也有所不同。 例如,在一個提供了 4 個字符的顯示屏的服務器上,E1F1 表示系統(tǒng)定義的控制臺已經(jīng)激活,而在提供了 3 個字符的顯示屏的服務器上,則使用 FF1 進行表示。Fxx(其中 xx 為十六進制數(shù)字)格式的代碼一般是與固件有關的。 其他代碼用來表示所檢測到的錯誤。表 3 中給出了一些最常見的 LED 代碼,它們用于表示啟動問題,以及如何解決它們以使得您的系統(tǒng)能夠再次啟動并運行。
表 3
| LED 201 - 啟動鏡像損壞 |
| 1. 按照“訪問無法啟動的系統(tǒng)”中所描述的過程來訪問您的 rootvg。 |
| LED 223-229 - 無效的啟動列表 |
| 1. 將鍵模式切換到 Service(或者 F5,對于那些沒有鍵盤鎖的系統(tǒng)),并打開計算機的電源。 |
| LED 551、555 和 557 - 損壞的文件系統(tǒng)、損壞的 JFS 日志等等 |
| 1. 在裝入任何文件系統(tǒng)(“Volume Group Information”屏幕中的選項 2)之前,按照“訪問無法啟動的系統(tǒng)”中所描述的過程來訪問 rootvg。 |
| LED 552、554 和 556 - 損壞的超級塊和損壞的自定義 ODM 數(shù)據(jù)庫 |
| 1. 重復 LED 551、555 和 557 中的步驟 1 到 2。 |
?
常見的啟動 LED 和解決方案
| LED 553 - 損壞的 /etc/inittab 文件 |
| 1. 按照“訪問無法啟動的系統(tǒng)”中所描述的過程來訪問所有已裝入的文件系統(tǒng)的 rootvg。 |
?
?
四.? 運行級別
?????? 在操作系統(tǒng)中執(zhí)行維護任務,或在更改運行級別之前,您應該深入地研究各種運行級別。運行級別是只允許選定的一組進程存在的一種軟件配置。
?
4.1 確定系統(tǒng)運行級別
?????? 這個部分描述如何確定系統(tǒng)當前所處的運行級別,以及如何顯示以前的運行級別的歷史。表 4 中列出了系統(tǒng)可用的運行級別。
表 4
| 運行級別 | 說明 |
| 0-1 | 保留為操作系統(tǒng)將來使用。 |
| 2 | 包含多用戶環(huán)境下的所有終端進程和守護進程。這是缺省的運行級別。 |
| 3-9 | 可以根據(jù)用戶的首選項進行定義。 |
| a、b、c、h | 這些并不是真正的運行級別;它們與運行級別的不同之處在于,init 命令無法請求整個系統(tǒng)進入這些運行級別。請參見上半部分的“/etc/inittab 文件”,以獲得更詳細的信息。 |
| S、s、M、m | 維護模式。當系統(tǒng)從其他運行級別進入維護模式時,只有系統(tǒng)控制臺可以作為終端使用。 |
?
4.2? 確定當前運行級別
在命令行中,輸入下面的命令:
| # cat /etc/.init.state? 2??????????????????????? |
?
系統(tǒng)將顯示一個數(shù)字,即當前運行級別。
?
4.3? 顯示以前的運行級別的歷史
使用 fwtmp 命令,您可以顯示以前的運行級別的歷史,如下所示:
?????? (1). 以 root 用戶的身份登錄。
??(2). 輸入下面的命令,系統(tǒng)將顯示與下面所示類似的信息:
| # /usr/lib/acct/fwtmp < /var/adm/wtmp |grep run-level run-level 2?? 1???? 0 0062 0123 1132072406??? Tue Nov 15 10:33:26 CST 2005????????????????????? run-level 2?? 1???? 0 0062 0123 1132075614??? Tue Nov 15 11:26:54 CST 2005????????????????????? run-level 2?? 1???? 0 0062 0123 1132092491??? Tue Nov 15 16:08:11 CST 2005????????????????????? run-level 2?? 1???? 0 0062 0123 1132094756??? Tue Nov 15 16:45:56 CST 2005 |
?
4.4 更改系統(tǒng)運行級別
?????? 系當系統(tǒng)第一次啟動時,它會進入 /etc/inittab 文件中的 initdefault 項所定義的缺省運行級別。系統(tǒng)會一直在該運行級別中運行,直到它收到一個更改運行級別的信號。您可以執(zhí)行 lsitab 命令,以查看您的系統(tǒng)的缺省運行級別:
| # lsitab init init:2:initdefault: |
?
要更改運行級別,請執(zhí)行下面的過程:
?????? 1. 檢查 /etc/inittab 文件,以確認您將要改變到的運行級別是否支持您正在運行的進程。進程 getty 是很重要的,因為它可以控制系統(tǒng)控制臺和其他登錄的終端線路訪問。確保 getty 進程在所有的運行級別中都可以運行。
?????? 2. 使用 wall 命令通知所有的用戶,您將要改變系統(tǒng)運行級別,并要求這些用戶退出系統(tǒng)。
?????? 3. 使用 telinit 命令(以您將要切換到的運行級別作為該命令的參數(shù)),例如:
| ?????? # telinit M?? ?????? |
?
telinit 命令
?????? 通過接受單個字符的參數(shù),并發(fā)送信號以告知 init 進程執(zhí)行適當?shù)膭幼?#xff0c;telinit 命令可以直接控制 init 進程(進程 ID 為 1)的操作。通常情況下,telinit 命令將使系統(tǒng)進入到指定的運行級別。telinit 命令可以向 init 進程傳遞下列參數(shù)作為指令:
?????? (1)0-9:告知 init 進程將系統(tǒng)置于運行級別 0-9。
?????? (2)S、s、M、m:告知 init 進程將系統(tǒng)置于維護模式。
?????? (3)a、b、c:告知 init 進程僅檢查 /etc/inittab 文件中在運行級別字段中包含 a、b、c 的那些記錄。
?????? (4)Q、q:告知 init 進程重新檢查整個 /etc/inittab 文件。
?????? (5)N:向重新生成的進程發(fā)送中止進程的信號。
?
例如,要進入到維護模式,可以輸入:
| # telinit M |
?
注意:您還可以使用 shutdown -m 命令進入到維護模式。
?
4.5 執(zhí)行運行級別腳本
?????? 運行級別腳本允許用戶在更改運行級別時啟動和停止所選擇的應用程序。以 K 開頭的腳本是停止腳本,以 S 開頭的腳本是啟動腳本。
?????? 這些腳本保存于它們所從屬的運行級別的特定子目錄中,每個子目錄的格式為 rcn.d,其中 n 表示運行級別:
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc/rc.d/rc6.d
/etc/rc.d/rc7.d
/etc/rc.d/rc8.d
/etc/rc.d/rc9.d
?
/etc/rc.d/rc 腳本將運行它在指定目錄中發(fā)現(xiàn)的啟動腳本,并在運行級別更改時執(zhí)行該啟動腳本。腳本將首先運行停止應用程序的腳本,然后運行啟動應用程序的腳本。
?
五.?? rc.* 文件的介紹
?????? rc 文件作為初始化過程中的一部分加以執(zhí)行;它們?yōu)橄到y(tǒng)做好配置的準備,并做好運行的準備。
?
5.1?? rc.boot 文件
?????? /sbin/rc.boot 文件是一個可以由簡單的 Shell init和標準 init 命令調(diào)用的、用來使系統(tǒng)啟動的腳本。它可以控制計算機的啟動進程。當系統(tǒng)啟動時,在每個啟動階段都會調(diào)用 /sbin/rc.boot 文件,每次都使用一個不同的參數(shù)。
??????
?????? 根據(jù)啟動設備的類型,rc.boot 文件對設備進行配置,并調(diào)用合適的應用程序。合適的應用程序包括:
?????? (1)從磁盤進行啟動(啟動階段 1)
?????? (2)激活根卷組(啟動階段 2)
?????? (3)啟用文件系統(tǒng)(啟動階段 2)
?????? (4)調(diào)用 BOS 安裝程序或者診斷程序
?????? 注意:rc.boot 程序只能由 init 進程調(diào)用;在一個正在運行的系統(tǒng)上執(zhí)行 rc.boot 腳本會產(chǎn)生不可預知的結(jié)果。
?
5.2? /etc/rc 文件
?????? /etc/rc 文件執(zhí)行正常的啟動初始化;在 /etc/inittab 文件中,它的條目位于 rc.boot 條目之后。init 命令將讀取 /etc/inittab 文件,并為 /etc/rc 文件創(chuàng)建一個進程。對于不同的安裝,/etc/rc 文件的內(nèi)容也有所不同。如果所有必需的操作都已成功完成,那么文件會出現(xiàn)一個返回碼 0,以便允許 init 命令啟動登錄程序來完成正常的初始化和啟動。
?
?????? /etc/rc 文件可以完成許多啟動功能,如:
?????? (1)激活所有標記為自動激活的卷組。
?????? (2)激活 /etc/swapspaces 文件中列出的所有分頁空間(使用 swapon -a 命令)。
?????? (3)配置所有的轉(zhuǎn)儲設備(使用 sysdumpdev -q 命令)。
?????? (4)執(zhí)行文件系統(tǒng)檢查(使用 fsck -fp 命令)。
?????? (5)裝入在 /etc/filesystems 文件中列出的標記為 mount=true 的文件系統(tǒng)(使用 mount all 命令)。
?
?????? 注意:/、/usr、/var 和 /tmp 文件系統(tǒng)會在啟動過程(階段 2)中自動地裝入。/etc/rc 文件在運行 mount all 命令時不會嘗試再次裝入這些文件系統(tǒng)。
?
5.3? rc.net 文件
???? /etc/rc.net 文件是一個包含網(wǎng)絡配置信息的 Shell 腳本。其中的一些節(jié)允許您啟用網(wǎng)絡接口和設置主機名、缺省網(wǎng)關以及當前主機的靜態(tài)路由信息。這個文件可用于進行單步配置,作為單獨配置主機所需的一組命令和文件的替代方法。 rc.net Shell 腳本在配置過程的第二階段中通過配置管理器程序運行。如果 TCP/IP 已經(jīng)安裝,那么在配置過程的第二階段完成,并且 init 命令啟動了 SRC 之后,由 init 命令運行第二個腳本 rc.tcp。
?
?????? 應該顯示該文件中的節(jié),以便提示用戶目前的運行狀態(tài)。
?
?????? 如果在系統(tǒng)配置完成之后運行 cfgmgr 命令,/etc/rc.net Shell 腳本還可以由配置管理器程序 (cfgmgr) 運行。它經(jīng)常在系統(tǒng)添加新設備后,在系統(tǒng)啟動時運行。如果 cfgmgr 命令運行 rc.net,那么配置方法和 rc.net 文件本身都要檢查網(wǎng)絡設備是否已經(jīng)處于可用狀態(tài)。如果是,那么就不改變設備的屬性值,以避免覆蓋啟動之后的任何配置更改。
?
?????? 如果在運行 /etc/rc.net 時沒有調(diào)用 cfgmgr 命令,那么將設備屬性重設為在 ODM 庫中的屬性值,而不管它當前的狀態(tài)如何。這就允許系統(tǒng)配置恢復為 ODM 庫中指定的屬性值。
?
5.4? rc.tcpip 文件
?????? /etc/rc.tcpip 文件是一個 Shell 腳本,當它執(zhí)行時,使用 SRC 命令初始化所選擇的守護進程。在系統(tǒng)每次重新啟動時,rc.tcpip 腳本文件都會自動地執(zhí)行。它也可以在任何時間從命令行加以執(zhí)行。
?
?????? 大多數(shù)守護進程可以由 TCP/IP 特定的 rc.tcpip 文件進行初始化。這些守護進程包括:
?????? (1)inetd(在缺省情況下會啟動)
?????? (2)gated
?????? (3)routed
?????? (4)named
?????? (5)timed
?????? (6)rwhod
注意:在一臺主機上同時運行 routed 和 gated 會引起不可預知的結(jié)果。
?
?????? 還有一些特定于基本操作系統(tǒng)或其他應用程序的守護進程,也可以在 rc.tcpip 文件中啟動。這些守護進程包括:
?????? (1)lpd
?????? (2)portmap
?????? (3)sendmail
?????? (4)syslogd(在缺省情況下會啟動)
?
以下的示例可以作為參考:
(1)下面的命令將啟動 syslogd 守護進程:
#啟動 syslog 守護進程(用于錯誤和事件日志記錄)
start /usr/sbin/syslogd "$src_running"
(2)下面的節(jié)將啟動 lpd 守護進程:
#啟動 print 守護進程
start /usr/sbin/lpd "$src_running"
(3)下面的節(jié)將啟動 routed 守護進程,但是不啟動 gated 守護進程:
#啟動 routing 守護進程(僅啟動一個)
start /usr/sbin/routed "$src_running" -g
#start /usr/sbin/gated "$src_running"
?
?
整理自:
啟動過程(上)
http://www.ibm.com/developerworks/cn/aix/redbooks/test222/boot-process/test222-bootprocess1.html
?
啟動過程(下)
http://www.ibm.com/developerworks/cn/aix/redbooks/test222/boot-process/test222-bootprocess2.html
?
?
?
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
網(wǎng)上資源: http://tianlesoftware.download.csdn.net
相關視頻:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(滿); DBA2 群:62697977(滿)
DBA3 群:62697850?? DBA 超級群:63306533;????
聊天 群:40132017
--加群需要在備注說明Oracle表空間和數(shù)據(jù)文件的關系,否則拒絕申請
轉(zhuǎn)載于:https://www.cnblogs.com/tianlesoftware/archive/2010/12/23/3609856.html
總結(jié)
以上是生活随笔為你收集整理的IBM AIX 5.3 系统管理 -- 系统启动过程详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu 1250 Hat's Fibon
- 下一篇: java信息管理系统总结_java实现科