一、linux開機啟動流程大體可以分為:
<a href="http://s3.51cto.com/wyfs02/M00/19/0A/wKioL1MTU_PQkNgIAADVEDtf8XQ190.jpg" target="_blank"></a>
第一步、POST(Power-On-Self-Test,上電自檢)
沒有什麼好說的,就是打開計算機的電源,加載BIOS資訊,因為在BIOS會包含了CPU的相關資訊,硬碟資訊,記憶體資訊,系統時鐘等,BIOS的資訊至關重要,以至于加電開機後必須要先找到它。
第二步、BIOS(boot sequence)
<a href="http://s3.51cto.com/wyfs02/M01/19/1E/wKiom1MTZ1SheOqlAACo4UbZiIc800.jpg" target="_blank"></a>
在BIOS中有一個BOOT選項,在這裡可以選擇從那一個裝置(實體媒體)來引導,其實隻是為了搜尋一個作業系統來啟動,當BIOS自檢通過後,這個過程會通路系統中的硬碟或CD-ROM的第一個扇區硬碟上第0磁道第一個扇區,這就是MBR,也就是Master Boot Record,即主引導記錄,它的大小是512位元組,裡面卻存放了預啟動資訊、分區表資訊。分成兩段,第一段是引導分區(在系統CD光牒上或鏡像安裝到此處)大小是446個位元組,第二段是分區表,共有66個位元組,記錄了分區資訊預引導區的作之一是找到活動的分區,并将其分區的引導區讀入記憶體。
第三步、GRUB(Grand Unified Bootloader)
<a href="http://s3.51cto.com/wyfs02/M01/19/30/wKioL1MTdx2wjko_AAEbErPF-yc291.jpg" target="_blank"></a>
BIOS完成自檢後,bootloader就接手初始化硬體裝置、建立存儲器空間的映射,以便為作業系統核心準備好正确的軟硬體環境,系統讀取記憶體中的grub配置資訊(一般為menu.lst或grub.lst),并依照此配置資訊來啟動不同的作業系統,而grub又是分段的
1st stage: 位于MBR中,為了引導2nd stage
1.5 stage: 位于boot基本磁盤分區中,為識别核心檔案所在的檔案系統提供檔案系統識别擴充
2nd stage: 位于boot基本磁盤分區中(位于/boot/grub/),GRUB的引導程式
<a href="http://s3.51cto.com/wyfs02/M01/19/2A/wKiom1MTcrnRJPkIAAFMFjYCVAM018.jpg" target="_blank"></a>
grub.conf配置檔案文法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<code>[root@localhost grub]</code><code># cat grub.conf</code>
<code>.....</code>
<code>default=0 </code><code>#引導順序</code>
<code>timeout=5 </code><code>#等待使用者選擇要啟動的核心或OS的時長,機關為秒;</code>
<code>splashimage=(hd0,0)</code><code>/grub/splash</code><code>.xpm.gz </code><code>#背景圖檔路徑。</code>
<code>hiddenmenu </code><code>#隐藏菜單</code>
<code>title CentOS (2.6.32-431.el6.x86_64) </code><code>#标題</code>
<code> </code><code>root (hd0,0)</code><code>#核心所的那一個硬碟的那一個分區中(無論什麼類型的硬碟#都會識别為hd,不區分主分區與邏輯分區的概念)</code>
<code> </code><code>kernel </code><code>/vmlinuz-2</code><code>.6.32-431.el6.x86_64 ro root=</code><code>/dev/mapper/vg0-root</code> <code>rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0</code><code>/swap</code> <code>rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0</code><code>/root</code> <code>KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet</code>
<code>#核心挂載的位置</code>
<code> </code><code>initrd </code><code>/initramfs-2</code><code>.6.32-431.el6.x86_64.img</code>
<code>#預加載外圍驅動</code>
<code>#完整最小系統</code>
<code>#作用:是将根放在更加進階的裝置上</code>
grub讀取完成後,将後需工作交給了核心
第四步、Kernel初始化
<a href="http://s3.51cto.com/wyfs02/M00/19/42/wKiom1MTiNLR50iyAAJipWmx2ug812.jpg" target="_blank"></a>
而在核心中要完在對硬體探測、硬體驅動初始化(initrd)、挂載根檔案系統(隻讀挂載_ro)
核心被加載後,通過init程序,第一個運作的程式便是/sbin/init,該檔案會讀取/etc/inittab檔案,并依據此檔案來進行初始化工作。其實/etc/inittab檔案最主要的作用就是設定Linux的運作等級,其設定形式是“:id:3:initdefault:”,這就表明Linux需要運作在等級3上。Linux的運作等級設定如下:
15
16
17
18
19
20
21
<code>[root@localhost /]</code><code># cat /etc/inittab</code>
<code># Default runlevel. The runlevels used are:</code>
<code># 0 - halt (Do NOT set initdefault to this) #關機</code>
<code># 1 - Single user mode #單使用者模式</code>
<code># 2 - Multiuser, without NFS (The same as 3, if you do not have networking)#無網絡支援的多使用者模式</code>
<code># 3 - Full multiuser mode #有網絡支援的多使用者模式</code>
<code># 4 - unused #保留,未使用</code>
<code># 5 - X11 #有網絡支援有X-Window支援的多使用者模式</code>
<code># 6 - reboot (Do NOT set initdefault to this) #重新開機系統,即重新開機</code>
<code>#</code>
<code>id</code><code>:3:initdefault:</code>
<code>#第一列:id: 操作的ID</code>
<code>#第二列:runlevels: 在哪些級别下執行此操作</code>
<code>#第三列:action: 動作</code>
<code>#每一種動作又可以分為:</code>
<code>#initdefault: 設定預設運作級别,無需定義操作</code>
<code>#sysinit:指定系統初始化腳本</code>
<code>#wait: 等待系統切換至此級别時運作一次;</code>
<code>#ctrlaltdel: 定義組合鍵被按下時要運作的指令;</code>
<code>#respawn: 當指定操作程序被關閉時立即再啟動一次;</code>
init程序将以/etc/inittab中設定的預設值來執行rc.sysinit,Linux系統執行的第一個使用者層檔案就是/etc/rc.d/rc.sysinit腳本程式,它做的工作非常多,包括設定PATH、 設定網絡配置(/etc/sysconfig/network)、啟動swap分區、設定/proc等等;
/etc/rc.d/rc.sysinit主要的作用是在各個運作模式中相同的初始化工作。包括:
調入keymap以及系統字型
啟動swapping
設定主機名
設定NIS域名
檢查(fsck)并mount檔案系統。
打開quota
裝載聲霸卡子產品
設定系統時鐘
清理
/etc/sysctl.conf設定核心參數
/etc/rc.d/rc.sysinit 則根據其參數指定的運作模式(運作級别,你在inittab檔案中可以設定)來執行相應目錄下的腳本,凡是以K開頭的,都以stop為參數調用;凡是以S開頭的,都以start為參數來調用的。調用順序按##從小到大來執行。例如,假如預設的運作模式是3,/etc/rc.d/rc3.d/就會按上述方式來調用。
centos或redhat中的運作模式2,3,5都把/etc/rc.d/rc.local做為初始化腳本中的最後一個,是以使用者可以在這個檔案中添加一些需要在其他初始化工作之後,登入之前執行的指令。rc.local就是在一切初始化工作後,Linux留給使用者進行個性化的地方。你可以把你想設定和啟動的東西放到這裡。
第五步、Shell
<a href="http://s3.51cto.com/wyfs02/M02/19/44/wKiom1MTinTTZaKuAABsaKLipLg275.jpg" target="_blank"></a>
執行/bin/login程式,進入登入狀态。
此時,系統已經進入到了等待使用者輸入username和password的時候了,你已經可以用自己的帳号登入系統了。
本文轉自 jinlinger 51CTO部落格,原文連結:http://blog.51cto.com/essun/1366045,如需轉載請自行聯系原作者