Linux開機流程分析
開機不是只要按一下電源鈕而關機只要關掉電源鈕就可以了嗎?有何大學問?話是這樣沒錯啦,但是由于 Linux 是一套多人多任務的操作系統,你難保你在關機時沒有人在線上,如果你關機的時候碰巧一大群人在線上工作,那會讓當時在線上工作的人馬上斷線的!那不是害死人了!一些資料可以無價之寶哩!另外,與 DOS 環境不同的是, Linux 在執行的時候,雖然你在畫面上只會看到黑壓壓的一片,完全沒有任何畫面,但其實他是有很多的程序在背景底下執行的,例如郵件程序、瀏覽器主機程序等,你如果隨便關機的話,是很容易傷害硬盤及數據傳輸的動作的!所以在 Linux 下關機可是一門大學問喔
既然開機是很嚴肅的一件事,呵呵,那我們來了解一下整個開機的過程吧!好讓大家比較容易發現開機過程里面發生錯誤的地方,與解決之道!不過,由于開機的過程中,那個 Boot Loader 使用的軟件可能不一樣,例如 Mandrake 9.0 已經同時提供 Lilo 與 Grub 這兩個開機管理程序,雖然 lilo 與 grub 的激活過程或許有點不太相同,但是他的原理則都是一樣的哩!這里我們先介紹較老牌的 Lilo 啰! Lilo 是什么?!簡單的說,他是 LInux LOader 的縮寫,就是 Linux 開機時候加載的咚咚就對了!這東西可是控制了你的多重開機的命脈!底下的篇幅會再分別介紹這兩套開機管理程序!底下先開始來談談 Linux 是如何開機的呢?基本的流程為:
1. 加載 BIOS 的硬件信息;
2. 讀取 MBR 的 Kernel Loader (亦即是 lilo, grub, spfdisk 等等)開機信息;
3. 加載 Kernel 的操作系統核心信息;
4. Kernel 執行 init 程序并取得 run-level 信息;
5. init 執行 /etc/rc.d/rc.sysinit 檔案;
6. 激活核心的外掛式模塊 (/etc/modules.conf);
7. init 執行 run-level 的各個批次檔( Scripts );
8. init 執行 /etc/rc.d/rc.local 檔案;
9. 執行 /bin/login 程序;
10. 登入之后開始以 Shell 控管主機。
大概的流程就是上面寫的那個樣子啦,而每一個程序的內容主要是在干嘛呢?底下就分別來談一談吧!
· 尋找 BIOS 加載硬件信息:
稍微有 PC 硬件經驗的人們大概都知道 BIOS ( Basic Input/Output Setup ) 的作用!他是第一個被加載計算機的資料!你主機的 CPU 資料、開機順序、硬盤大小、芯片組工作狀態、PnP 的開啟與否、內存的時脈等等等...這都記錄在 BIOS 當中!所以啦,開機之后,系統會先去找這個東西;
· 可開機硬盤的 MBR 讀取 Kernel loader:
再來呢?呵呵!當然就是硬盤的開機資料啰!由于個人計算機的系統在讀完 BIOS 之后,會先去讀取第一個開機硬盤的第一個扇區(就是 master boot record, MBR 啰!),還記得這個 MBR 嗎?嗄!忘記了?趕緊回到第二篇好好的再復習一遍ㄋㄟ?。而這個扇區主要就是在記錄開機的信息!還記得上面提到的 Lilo 及 grub 吧?他的紀錄就是在這里啰!所以啰,這個時候 Lilo 紀錄的信息就會被讀出來,系統并依 Lilo 的信息去不同的系統開機,這也就是多重開機設定的地方啦。
好了,先再來回憶一下,如果你是以 grub 程序開機的話,那么在開機的時候會顯示什么資料呢?呵呵!會顯示蠻多的開機選單,沒錯?就是『選單』,然后選擇了你的選擇項目之后,系統就會跑到該扇區去讀取該操作系統的核心啰!呵呵!所以一個好的 boot loader 會具有兩個功能,就是:
o 選單功能 ( menu )
o 指向功能 ( pointer )
那么為何要有 loader 呢?我想,我們得先來探討一下這個話題才行!要探討之前先來了解一下,曉不曉得 Windows 與 Linux 的檔案格式一不一樣?!呵呵!當然不一樣對不對,好了,那么再來說一說,請問,你的計算機怎么知道你的硬盤的資料是什么系統?哈哈!那就是 loader 的主要功能啰!在你能使用系統之前,一定需要加載核心對吧!?但是怎樣讓你的硬件認識核心呢?那就是 kernel loader 的主要功能了!所以這里需要提出的是, Linux 的 loader ( lilo 或 grub ) 是可以認識 windows 的核心檔案的,但是 Windows 的 loader 卻不認識 Linux 的核心檔案,因此,作為一個多重開機的設定 loader ,就無法使用 Windows 所提供的 loader 啰!由于需要讓系統認識你的 kernel ,因此,就需要 kernel loader 啦!這樣想就對啦!
· 加載核心( Kernel ):
好了,等我們在 grub 的選單中選擇了 Linux 這個系統,然后主機跑到 Linux 所在的硬盤之下,就開始將他的核心加載啰。在 Linux 的系統下,通常開機的核心都擺在 /boot 底下,因此,這個時候的 boot loader 就會到 /boot 去尋找相關的核心。我們的 kernel 名稱通常就是 /boot/vmlinuz-xxxx 的格式,目前 Mandrake 9.0 的核心版本為 2.4.19,而 Mandrake 自行釋出的版本為 2.4.19-16mdk ,所以,使用 uname –r 會出現 2.4.19-16mdk 呦!然后 MDK
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解