linux系統啟動流程
linux系統啟動流程,計算機接通電源後首先是:
一、BISO進行POST自檢。然後根據BISO内設定的引導順序,從硬碟和軟碟中讀取引導,
BIOS的第1個步驟是加電POST自檢。POST的工作是對硬體進行檢測。BIOS的第2個步驟是進行本地裝置的枚舉和初始化。當POST完成以後,他就會從記憶體中清理出來,而而BISO運作服務确依然停留在記憶體之中,是以目标作業系統就可以使用這些服務。
一般來說,linux系統都是從硬碟上引導的,其主引導記錄是MBR,他包含主引導加載程式,當MBR加載到RAM中,BISO會将控制權移交給MBR。
在超級使用者root下運作。才看MBR内容。
#dd if=/dev/had of=mbr.bin bs=512 count=1
二.啟動GRUB/LILO引導加載程式!
注:引導加載程式用于引導作業系統啟動。當機器引導它的作業系統時,BIOS會讀取引導媒體上最前面的512位元組(主引導記錄)。
LILO和GRUB的差別。
LILO沒有互動式指令界面,而GRUB有;
LILO不支援網絡引導,GRUB支援。
LILO将可以引導的作業系統的資訊存儲在MBR中。
如果配置檔案出錯,就會預設轉到GRUB指令行界面中。
三.加載核心
加載核心映像到記憶體中,核心映像并不是一個可執行的核心,而是一個壓縮過的核心映像,(壓縮映像<512kb,,或是一個>512kb的壓縮映像)。
init 在進入某個特定的運作級别時運作相應的程式,以此對各種運作級别進行管理。它的這個作用是由/etc/inittab檔案定義的。
1./etc/rc.d/rc.sysinit
在init的配置檔案中有如下一行:
si::sysinit:/etc/rc.d/rc.sysinit
rc.sysinit是由init執行的第一個腳本,它主要完成一些系統初始化的工作。rc.sysinit是每一個運作級别都要首先運作的重要腳本,它主要完成的工作有:激活交換分區、檢查磁盤、加載硬體子產品以及其他一些需要優先執行的任務。/etc/rc.d/ rc.sysinit主要完成各個運作模式中相同的初始化工作。包括:
設定初始的$PATH變量;
配置網絡;
為虛拟記憶體啟動交換;
調協系統的主機名;
檢查root檔案系統,以進行必要的修複;
檢查root檔案系統的配額;
為root檔案系統打開使用者群組的配額;
以讀/寫的方式重新裝載root檔案系統;
清除被裝載的檔案系統表/etc/mtab;
把root檔案系統輸入到mtab;
使系統為裝入子產品做準備;
查找子產品的相關檔案;
檢查檔案系統,以進行必要的修複;
加載所有其他檔案系統;
清除/etc/mtab、/etc/fastboot和/etc/nologin;
删除UUCP和lock檔案;
删除過時的子系統檔案;
删除過時的pid檔案;
設定系統時鐘;
激活交換分區;
初始化串行端口;
裝入子產品。
2./etc/rc.d/rcX.d/[KS]
在rc.sysinit執行後,将傳回init,繼續執行/etc/rc.d/rc程式。以運作級别5為例,init将執行配置檔案inittab中的以下内容:
15:5:wait:/etc/rc.d/rc 5
這一行表示以5為參數運作/etc/rc.d/rc,/etc/rc.d/rc是一個shell腳本,它接受5作為參數,去執行/etc/rc.d/rc5.d目錄下的所有的rc啟動腳本,/etc/rc.d/rc5.d目錄中的啟動腳本實際上都是一些連結檔案,而不是真正的rc啟動腳本,真正的rc啟動腳本實際上都在/etc/rc.d/init.d目錄下。而這些rc啟動腳本有着類似的用法,它們一般能接受stat、stop、restart、status等參數。
/etc/rc.d/rc5.d中的rc啟動腳本通常是以K或S開頭的連結檔案,以S開頭的啟動腳本将以start參數來運作。如果發現相應的腳本也存在K打頭的連結,而且已經處于運作狀态了(以/var/lock/subsys下的檔案作為标志),則将首先以stop為參數停止這些已經啟動了的守護程序,然後再重新運作。這樣做是為了保證當init改變運作級别時,所有相關的守護程序都将重新開機。
至于在每個運作級中将運作哪些守護程序,使用者可以通過chkconfig來自行設定。常見的守護程序如下。
amd:自動安裝NFS守護程序。
apmd:進階電源管理守護程序。
arpwatch:記錄日志并建構一個在LAN接口上看到的以太網位址和IP位址對應的資料庫。
outofs:自動安裝管理程序automount,與NFS相關,依賴于NIS。
crond:Linux系統下計劃任務的守護程序。
named:DNS伺服器。
netfs:安裝NFS、Samba和Netware網絡檔案系統。
network:激活已配置網絡接口的腳本程式。
nfs:打開NFS服務。
portmap:RPCportmap管理器,它管理基于RPC服務的連接配接。
sendmail:郵件伺服器sendmail。
smb:Samba檔案共享/列印服務。
syslog:一個讓系統引導時啟動syslog和klogd系統日志守候程序的腳本。
xfs:X Window字型伺服器,為本地和遠端X伺服器提供字型集。
Xinetd:支援多種網絡服務的核心守護程序,可以管理wuftp、sshd、telnet等服務。
這些守護程序啟動完畢,rc程式也就執行完了,然後又傳回init繼續下一步。
3.執行/etc/ec.d/rc.local
RHEL 4中的運作模式2、3、5都把/etc/rc.d/rc.local做為初始化腳本中的最後一個,是以使用者可以自己在這個檔案中添加一些需要在其他初始化工作之後、登入之前執行的指令。在維護Linux系統時一般會遇到需要系統管理者對開機或關機指令腳本進行修改的情況。如果所做的修改隻在引導開機的時候起作用,并且改動不大的話,可以考慮簡單地編輯一下/etc/rc.d/rc.local腳本。這個指令腳本程式是在引導過程的最後一步被執行的。
六.執行/bin/login程式
login程式會提示使用者輸入賬号及密碼,接着編碼并确認密碼的正确性,如果賬号與密碼相符,則為使用者初始化環境,并将控制權交給shell,即等待使用者登入。
login會接收mingetty傳來的使用者名作為使用者名參數,然後login會對使用者名進行分析。如果使用者名不是root,且存在/etc/nologin檔案,login将輸出nologin檔案的内容,然後退出。這通常用來在系統維護時防止非root使用者登入。隻有在/etc/securetty中登記了的終端才允許root使用者登入,如果不存在這個檔案,則root可以在任何終端上登入。/etc/usertty檔案用于對使用者作出附加通路限制,如果不存在這個檔案,則沒有其他限制。
在分析完使用者名後,login将搜尋/etc/passwd以及/etc/shadow來驗證密碼以及設定賬戶的其他資訊,比如:主目錄什麼、使用何種shell。如果沒有指定主目錄,則将主目錄預設設定為根目錄;如果沒有指定shell,則将shell類型預設設定為/bin/bash。
Login程式成功後,會向對應的終端再輸出最近一次登入的資訊(在/var/log/lostlog中有記錄),并檢查使用者是否有新郵件(在/usr/spool/mail的對應使用者名目錄下),然後開始設定各種環境變量。對于bash來說,系統首先尋找/etc/profile腳本檔案并執行它;然後如果使用者的主目錄中存在.bash_profile檔案,就執行它,在這些檔案中又可能調用了其他配置檔案,所有的配置檔案執行後,各種環境變量也設好了,這時會出現大家熟悉的指令行提示符,至此整個啟動過程就結束了。
四.執行init程序
init程序是系統所有程序的起點,核心在完成核内引導以後,即在本程序空間内加載init程式,它的程序呈是1。Init程序是所有程序的發起者和控制者。因為在任何基于Linux的系統中,它都是第一個運作的程序,是以init程序的編号(PID)永遠是1。還有init程序永遠不會被終止。