標籤:
Linux開機流程一、概念
1、boot loader: 領導裝載程式,常用的有(Grub, spfdisk)
2、Grub: 是一個多作業系統啟動管理器,開機時領導不同系統,windows linux等
二、開機的流程
1、載入BIOS(basic input output system)的硬體資訊,並進行自我測試
2、讀取並執行第一個開機裝置內MBR(主引導記錄扇區)的boot loader即grub spfdisk 等程式!
3、 grub(boot loader)就是一個多作業系統啟動管理器,運行之後就是選擇系統(boot loader --grup的功能之後在講)
4、依據 boot loader 的設定載入kernel(也就是在第3步這裡選擇的系統的核心),載入進來的kernel在儲存空間中解壓並執行,偵測硬體資訊載入驅動程式
5、硬體驅動成功之後,kernel會主動呼叫第一個使用者級的程式,init, init 會取得運行層級(runlevel) 的資訊(run level 資訊儲存在 /etc/inittab檔案中)
6、init 執行 /etc/rc.d/rc.sysinit 檔案 來準備軟體執行的環境(如 網路 ,時區等資訊)具體資訊可以 vim /etc/rc.d/rc.sysinit 去查看
7、init 執行 run-level 的各個服務即啟動和這個run-level 對應的服務
8、 執行 /etc/rc.d/rc.local 檔案 (這是使用者自訂開機啟動程式,把需要開機自動啟動並執行程式寫在這個指令碼裡)
9、 init 執行終端機模擬程式 mingtty 來啟動 login 程式,最後等待使用者登入
三、Bios(basic input output system)的作用
1、Bios它是一組固化到電腦內主板上一個Rom(read only memory) 晶片上的程式,它儲存著電腦最重要的基本輸入輸出的程式、系統設定資訊、開機後自檢程式和系統自啟動程式,他裡面的程式是被廠家燒錄進去的,所以只能讀不能改
2、Cmos是微機主板上的一塊可讀寫的RAM晶片,主要用來儲存當前系統的硬體設定和操作人員對某些參數的設定.
3、透過bios 程式去載入cmos 的資訊,並且藉由cmos內的設定值取得主機各硬體設定資訊,如cup ,介面裝置的溝通頻率開機裝置的順序,各個介面裝置的I/O地址等.
4、擷取這些資訊之後,Bios 還會進行開機自我測試,然後開始執行硬體偵測的初始化,並設定pnp裝置,之後再定義出開機的裝置順序,接下來就會開始進行開機裝置的資料讀取(MBR相關任務開始) (MBR master boot record 主引導區)
5、由於系統軟體大多都被放在硬碟上,所以Bios 會制定開機的裝置好讓我們可以讀取磁碟中的作業系統核心檔案。
6、由於不同作業系統的檔案系統格式不同,因此我們必須要以一個開機管理程式來處理核心檔案載入的問題,因此這個開機管理程式就被稱為 boot loader !
7、這個boot loader 就安裝在第一個扇區(sector)內,也就是我們說的MBR( master boot record 住引導記錄區)
8、每種作業系統的 boot loader 都不同,這樣的話Bios怎麼讀取 MBR中的內的boot loader那?
9、其實 BIOS是通過硬體的INT13中斷功能來讀取 MBR 中的內容,也就是說只要BIOS在硬體偵測的時候如果能夠偵測到你的磁碟(不管是sata 還是ide介面)那就有辦法透過INT 13 這條通道來讀取該磁碟的第一個扇區你的MBR中的內容,這樣的話 boot loader 也就能夠被執行了!
四、Boot loader (引導裝載程式)
1、Boot loader 的最主要功能就是要認識作業系統的檔案格式,並載入選定的系統核心到住住儲存空間中去執行。
2、由於每一種作業系統的檔案格式不同,所以每種作業系統都有自己的boot loader
3、這樣的話,當在一台機器上裝多個作業系統怎麼辦因為MBR只有一個,而每種作業系統都有自己的boot loader ,其實每個filesystem 或主分割槽都會留Boot sector(開機磁區),來安裝自己的boot loader 所以可以安裝多系統的問題也就解決了
4、boot loader 的主要功能:
(1)、提供選單: 使用者可以選擇自己的開機項目,這也就是多重開機的重要功能。
(2)、載入核心檔案: 直接指向可開機的程式區段,開始作業系統。
(3)、轉交其他的boot loader : 將開機管理功能轉交給其他的boot loader 負責。
** 由於具有選單功能因此我們可以選擇不同的核心來開機
** 由於具有控制權轉交的功能,因此我們可以載入其他boot sector 內的 boot loader !
5、當boot loader 的管理開始讀取核心檔案後,接下來Linux 就會將核心解壓縮到主儲存空間中,並且利用核心的功能,開始測試與驅動各個周邊的裝置 如儲存裝置, cpu, 網卡,音效卡等。此時linux 核心會以自己的功能重新偵測硬體資訊,而不一定會使用BIOS偵測到的資訊,也就是說此時開始 載入進來的Linux 核心 接管了 BIOS的工作!
6、到此記憶體中已經載入了 kernel 並使用kernel 的功能來偵測硬體以及嘗試掛在根目錄取得額外的驅動程式,但是現在的核心不認識磁碟,沒辦法掛在根目錄,所以也就沒法讀取 /lib.modules/內的驅動
7、核心不認識磁碟,那如何掛在跟目錄,如何載入驅動,那就得藉助 虛擬檔案系統(也叫臨時檔案系統 initrd)來解決
8、虛擬檔案系統的特色是,他能夠通過 boot loader 載入到記憶體中, 然後這個檔案會被解壓並在記憶體中模擬成為一個根目錄,且此模擬目錄能夠提供一支可執行檔程式,透過這個程式來載入開機過程中所需要的模組,而通常這些模組就是 USB RAID SCSI 等檔案系統與磁碟介面的驅動程式,等這些程式載入完畢後 會協助核心重新呼叫 /sbin/init 來開始後續的正常開機流程。
9、到此kernel 載入了需要的驅動程式,因為有了驅動可以找到磁碟,所以就掛載了 根目錄檔案系統,並釋放這個虛擬檔案系統。
10、核心主動載入第一個使用者級程式 /sbin/init
五、第一個使用者級程式init ,及設定檔 /etc/inittab 以及運行等級 run level
1、在核心載入完畢,進行硬體資訊這測與驅動程式載入之後,此時你的主機硬體應該已經準備就緒了,此時核心會主動的呼叫第一個使用者級程式,那就是 /sbin/init (init 被稱為所有進行的祖進程,也是第一個啟動的使用者級進程)
2、 /sbin/ init 最主要的功能就是準備軟體執行的環境,包括系統的主機名稱,網路設定,語系設定,系統檔案格式及其他服務的啟動, 而所有的動作都會透過 init 的設定檔及 /etc/inittab 來規劃。
3、 /etc/inittab 中配置了系統的運行層級 , 這個檔案的最下面 有 id : n : initdefault 這就是設定的系統運行層級
4、為何要設定系統的運行層級,這個有什麼不同: linux藉由 設定的 run level 來規劃,系統使用不同的服務來啟動,讓linux 的使用環境不同,按照有無網路與有無 xwindow可分為 7 個等級
5、 run level 運行層級
(0)、run level 0: 關機
(1) 、run level 1 : single mode 即單人維護模式,一般忘記 root的密碼,系統有問題什麼的使用這個模式
(2)、run level 2 : without NFS 即無NFS系統
(3)、run level 3: 完整含有網路功能的純文字模式
(4)、run level 4: 系統保留
(5)、run level 5: xwinods 與3 是類似的只是純文字變為視窗模式
(6)、run level 6: 重啟 reboot
6、啟動時執行一次的檔案, /etc/rc.d/rc.sysinit 即系統的資料設定完成!
7、啟動系統 服務與 啟動設定檔 /etc/rc,d/rc n(你的系統層級,按照不同的層級啟動不同的服務) /etc/sysconfig
8、載入核心讓整個系統準備接受指令來工作,在經過 /etc/rc.d/rc.sysinit 的系統模組與相關硬體資訊的初始化,你的系統應該已經順利工作了!
六、運行層級的切換
1、事實上不同的運行層級 只是載入的服務不同,,這裡已 run level 3 和 run level 5 為列: 只是他們的 /etc/rc.3d 和 /etc/rc.5d 內的Sxxname 和 Kxxname 不同而已
2、先對比 /etc/rc.3d 和 /etc/rc.5d 內k 和 s開頭的檔案
3、在新的 run level 內多的 K 都被關閉掉
4、在新的 run level 內多的S 都被開啟,而都存在的就不用管了。
ok 這樣運行層級就轉化過來了!
Linux開機流程即運行層級