AIX啟動過程分析

來源:互聯網
上載者:User

主要參考文檔:

http://www.ibm.com/developerworks/cn/aix/redbooks/test222/boot-process/test222-bootprocess1.html

啟動過程上電自檢(power on self test,post)。ROS載入引導程式

系統唯讀記憶體(system read only storage,ROS)。它是獨立於作業系統的,我的理解就是相當於pc中的bios,它的作用就是定位和載入引導代碼。引導代碼也就是引導程式(initial program loading, IPL)。這段程式做一些準備工作,比如在記憶體中建立一種名為RAMFS的檔案系統等。

引導程式定位BLV

之後就定位、載入並將控制權交給BLV(boot logical volume)。

BLV接管控制權,載入核心。調用3此rc.boot指令碼

3次分別傳遞參數1、2、3完成系統啟動。Rc.boot指令碼在系統引導完成後的位置在/sbin目錄下,若想詳細瞭解3次rc.boot調用的過程可直接查看指令碼內容。

三次rc.boot調用Rc.boot 1

BLV從RAMFS啟動init進程,執行啟動指令碼rc.boot 1。這個過程中的操作有:把ODM中的部分鏡像從BLV複製到RAMFS。然後調用cfgmgr -f命令從這個ODM中讀取一些基礎裝置的設定項,並完成這些基礎裝置的初始化。這些基礎裝置就是訪問rootvg所需的所有的裝置,把基礎裝置初始化從而使2階段中啟用rootvg可以順利進行。在1階段最後,還將調用bootinfo -b命令確定最後的啟動裝置。

Rc.boot 2

啟用rootvg檔案系統,並檢查裝載/usr、/var檔案系統。

Rc.boot 3

啟動/etc/init進程,它將讀取/etc/inittab檔案。

/etc/inittab中的首先將執行rc.boot 3.。這一過程主要完成裝入/tmp檔案系統、對rootvg進行同步,調用cfgmgr命令來初始化裝置,調用cfgcon命令配置控制台,使用savebase命令同步BLV中的ODM和/根檔案系統中的ODM。以及啟動sysncd守護進程和errdemon。

之後,init將繼續執行inittab檔案中的內容,以最終完成系統的初始化。

BLV

BLV中包含的內容可在/usr/lib/boot目錄下進行查看,主要包括系統AIX核心、ODM的一個簡化版本,以及一些基礎裝置的配置方法。系統預設BLV=hd5.

Inittab檔案

在執行完三次rc.boot後,ODM就已經被載入到記憶體,裝置已初始化完成,檔案系統也掛載完畢,作業系統基本的準備工作已經就緒。

之後就是完成作業系統的定製部分,比如啟動cron、tcpip等的守護進程。這些之後的操作都是根據inittab檔案中的內容進行的。

Inittab檔案中每行的格式為:

Identifier:RunLevel:Action:Command

Identifier就是一個標示,就是起個名字,無實質意義。要求在整個inittab檔案內唯一。

Runlevel指名該句執行的運行層級,內容為0-9的數位任意組合。

Action為告訴init程式如何執行該行中的命令。

Command就是要執行的命令內容。

其中action可用的選項及意義有:

respawn:如果進程不存在,則啟動該進程。不需要等待它的結束(繼續掃描 /etc/inittab 檔案)。當進程中止時,重新啟動該進程。如果該進程已經存在,則什麼也不做,繼續掃描 /etc/inittab 檔案。

wait當 init 命令進入到與該條目的運行層級相匹配的運行層級時,啟動該進程,並等待它的結束。當 init 命令處於相同的運行層級時,所有後續對 /etc/inittab 檔案的讀取操作都將導致 init 命令忽略這個條目。

once:當 init 命令進入到與該條目的運行層級相匹配的運行層級時,啟動該進程,並且不需要等待它的結束。當它中止時,不重新啟動該進程。當系統進入一個新的運行層級,並且該進程的運行來自前一個運行層級更改時,不重新啟動該程式。

boot僅在系統啟動時(即在系統啟動的過程中當 init 命令讀取 /etc/inittab 檔案的時候)處理該條目。啟動該進程,不需要等待它的結束,並且當它中止時,不重新啟動該進程。為了使得該指令有意義,運行層級應該為預設值,或者它必須與啟動時 init 命令的運行層級相匹配。對於系統硬體重新啟動之後的初始化功能來說,這種操作是非常有價值的。

bootwait在系統啟動之後,當 init 命令第一次從單使用者進入到多使用者狀態時,處理該條目。啟動該進程,等待它的結束;並且當它中止時,不重新啟動該進程。如果 initdefault 為 2,那麼在啟動之後運行該進程。

powerfail:僅當 init 命令接收到電源故障訊號 (SIGPWR) 時,才執行與這個條目相關聯的進程。

powerwait:僅當 init 命令接收到電源故障訊號 (SIGPWR) 時,才執行與這個條目相關聯的進程,並且在繼續處理 /etc/inittab 檔案之前,必須等待它結束。

off:如果與這個條目相關聯的進程目前正在運行,那麼發送警告訊號 (SIGTERM),等待 20 秒鐘,然後使用刪除訊號 (SIGKILL) 終止該進程。如果該進程沒有運行,則忽略這個條目。

ondemand:從功能上看,與 respawn 是相同的,但是這個操作適用於 a、b 或者 c 值,而不是運行層級。

initdefault僅在 init 命令最初被調用時,才掃描包含這個操作的條目。init 命令使用這個條目(如果它存在的話)來確定最初要進入的運行層級。通過使用運行層級欄位中所指定的最高運行層級,就可以實現這一點,並使用它作為其初始狀態。如果運行層級欄位為空白,那麼將其解釋為“0123456789”:因此,init 命令將進入運行層級 9。另外,如果 init 命令在 /etc/inittab 檔案中沒有找到 initdefault 條目,那麼將要求使用者在啟動時指定一個最初的運行層級。

sysinit當 init 命令在登入之前嘗試存取控制台時,將執行這種類型的條目。在正常情況下,這個條目僅用於初始化裝置(init 命令可能會對這些裝置詢問有關運行層級的問題)。執行這些條目,並等待它們結束,然後再繼續。

若想設定自己的指令碼開機自啟動,可直接修改此檔案,

在此檔案中加上一行。不過一般要加在檔案的末尾,因為此檔案的系統啟動部分,有些程式之間有嚴格的依賴關係,故不能修改順序。

此外,一般不建議修改此檔案。若想把自己的程式設定成開機自啟動,可直接在/etc/rc.d/rc2.d目錄下,增加一個開機檔案。這個目錄下以S開頭的為開機執行的指令碼,並向指令碼傳遞start參數。以K開頭的為關機時執行的指令碼,並向指令碼傳遞stop參數。

這些指令碼在inittab檔案中安排的執行順序為

l2:2:wait:/etc/rc.d/rc 2

即通過向rc指令碼傳遞runlevel參數執行該檔案夾下的內容。

一些其他命令

顯示當前運行層級

Cat /etc/.init.state

更改當前運行層級(此命令要在終端中執行)

Telinit 3(運行層級的數字)

顯示當前可用的啟動列表

Bootlist -m normal -o

-m參數為指定模式,有normal、service、both 或者 prevboot。

-o參數為執行了指定改變後,顯示啟動列表。

更改當前的啟動順序

Bootlist -m normal cd0 hdisk0(後面直接接啟動順序)

修改inittab檔案的幾個命令

Mkitab增加記錄,lsitab列出記錄,chitab更改記錄,rmitab刪除記錄。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.