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