linux開機啓動步驟詳解


linux開機啓動簡單流程圖如下:

wKioL1WeBP3z94OkAAEKw6DP7H8120.jpg

一、BIOS 加電自檢

按下電源開關,電腦會首先啓動BIOS(基本輸入輸出系統)BIOS一般是集成在主板上的。

BIOS主要做如下工作:

1、檢測連接硬件,比如顯卡,內存,磁盤等等,檢測的目的是以後把這些設備信息提供給操作系統;

2、尋找啓動磁盤,可以在BIOS開機啓動菜單菜單裏設置以哪個設備啓動系統。比如:光驅,硬盤,網絡等等,這個菜單可以設置多個選項,依照設置次序在設備上尋找啓動信息;

3、找到了啓動硬盤,接着BIOS就會在磁盤上找啓動扇區,再找到內核啓動系統。

a、先試着尋找第一個扇區,也就是主引導記錄MBR(Master Boot Record)

b、如果第一個扇區上沒有沒有存在操作系統,再去尋找標記爲BOOT的分區。

但不論是MBR還是BOOT分區,存儲操作系統的空間都只有446字節。如果沒有在上面提到的位置找到操作系統的內核,那麼BIOS就無法繼續啓動工作。

       那麼問題來了,我們的內核往往都會大於446個字節,存放在磁盤的其他位置上,既然446裝不下內核,又爲了能順利的找到放在其他位置上的內核,人們想出了一個辦法就在446字節裏寫了一個小程序,當BIOS試着啓動操作系統時就會執行這個小程序,然後再由小程序來載入其他位置的內核。這個小程序就是啓動載入器(boot loader) ,下面來講講這個boot loader是個什麼鬼。

二、BOOT Loader

linuxboot loader常見的有兩種:lilogrub

       因爲lilo存在着一個1024柱面的限制,並且更改了磁盤上的啓動信息文件後需要重新啓動系統才能同步446字節的內容,因爲lilo的缺陷,已經被grub所取代,因爲grub沒有這些限制。現在的絕大多數類linux系統都採用grubboot loader,既然如此咱們不用再管lilo了,下面主要講grub

       grub能修改系統文件的啓動內容就可以立刻與446內容同步。下面看看grub裏面到底是什麼,它存放在在於 /boot/grub中。

    wKiom1WeA57zUBwVAADO7NaMjCY030.jpg    

       GRUB有幾個重要的文件,STAGE1STAGE1_5STAGE2

       STAGE1:它只有512字節,通常放在MBR中,它的作用就是在系統啓動時用於裝載STAGE2,並且將控制權交給它。

       wKiom1WeA7qylsTUAABvZI9z8Os264.jpg

       STAGE2:它是GRUB的核心,所有的功能都是由它實現。

       STAGE1_5:介於STAGE1STAGE2之間,是連接它們的橋樑,由於STAGE2較大,通常都是放在一個文件系統當中的,但是STAGE1並不能識別文件系統格式,所以才需要STAGE1_5來引導位於某個文件系統當中的STAGE2。根據文件系統格式的不同,STAGE1_5也需要相應的文件,如:e2fs_stage1_5fat_stage1_5,分別用於識別extfat的文件系統格式。它存放於1-63的柱面之間。

       wKioL1WeBZvAbONBAACGFoH3cKE633.jpg

       GRUB啓動時會在 /boot/grub中尋找一個名字爲grub.conf的設置文件,如果找不到此設置文件則不進入菜單模式而直接進入命令行模式。

       配置文件中選項含義如下:

       title:一個操作系統引動的標頭,可以使多個

       root:指明所需文件存在於哪個磁盤哪個分區上 (hd00)表示第一個硬盤,第一個分區,可參考/boot/grub/device.map

       kernel:內核文件的名字,並且會有一些加載內核時的參數 or代表以只讀方式加載

       initrd:包含一些附加的驅動程序

 

default=num默認啓動第num +1行選項,也就說default=0,則默認啓動菜單第1行的操作系統,default=1,則啓動第2行的系統,如此類推。

timeout=num搜索設置在num秒之後引導默認的操作系統。CentOS默認是timeout=5,也就是說5秒之內如果沒有其他命令就啓動系統。如果設成 -1,則 GRUB 會一直等待直到用戶選擇一個選項爲止。

splash pathname/filename指出開機畫面的文件所存放的路徑和文件名,如splashimage=(hd0,0)/grub/splash.xpm.gz是指用在/boot/grub路徑下的splash.xpm.gz文件作爲開機畫面。感興趣的可以自己修改下試試。

title OSname title後面的字符串就是在菜單項上所看見的選項,可以寫上操作系統的名字和描述,如title CentOS (2.6.32-431.el6.x86_64)代表這一選項的話,是引導CentOS (2.6.32-431.el6.x86_64)這個系統。

下面使用實例講解

 wKiom1WeA-bigFL-AAEc3DpilaQ367.jpg

root  (hd0,0)是指第一個硬盤的第一個分區,,可參考/boot/grub/device.map

kernel /vmlinuz-2.6.32-431.el6.x86_64 是指Linux內核的路徑是/boot/vmlinuz-2.6.32-431.el6.x86_64

ro:表示只讀加載kernel

          rhgb:表示圖形方式啓動

爲了加速引導啓動進程,可以指定磁盤是否加密、語言環境、不啓用LVMRAID、鍵盤等等,節省dracut查找的時間,如一下幾個選項:

          rd_NO_LUKS:指定磁盤不加密

LANG:指定語言環境

          rd_NO_LVM:禁用LVM

rd_NO_DM:禁用RAID

          KEYTABLE:指定字體顯示

          crashkernel:爲啓動捕獲內核預留指定內存,默認爲crashkernel=auto,可自行設定如crashkernel=256M

quiet:表示不輸出啓動信息

initrd:包含一些附加的驅動程序

三、內核啓動

       內核啓動後會向bios查詢電腦的所有硬件信息,然後自己接手管理這些設備,以便提供給linux使用

       內核會試着驅動這些設備,這些設備的驅動一部分包含在內核中,叫做靜態驅動,一部分以模塊的方式(動態)存放文件系統中,由於此時還未掛載任何文件系統,因此還不能使用文件系統中的模塊,這裏只能驅動在內核中存在的硬件驅動程序的對應設備。想驅動內核中未包含的硬件驅動就需要加載文件系統。

       內核會嘗試掛載根文件系統,根文件系統至少包含 /etc/bin/sbin/lib/dev5大目錄。缺一不可,否則都會導致系統無法啓動。

       根文件系統掛載是以只讀方式掛載的,因爲這時linux還在啓動階段,並不穩定,避免破壞系統文件。

四、啓動INIT服務

       順利的掛載了根文件系統後,就會啓動init服務。內核會按/sbin/init/etc/init/bin/init順序尋找init程序,如果找不到則內核報錯,這裏存在一個參數init=/bin/sh如果啓動時指定了則最後執行/bin/sh而不會產生內核報錯。也被稱爲快速啓動,因爲它忽略了很多啓動初始化工作。

       啓動init的目的就是爲了初始化系統環境,啓動了init就證明了內核已經順利啓動,接下來就由init服務來建立linux使用環境

       init會根據 /etc/inittab 文件的信息來進行初始化工作。會執行三個腳本 /etc/rc.d/rc.sysinit/etc/rc.d/rc/etc/rc.d/rc.local

       rc.sysinit 主要的功能用來建立系統的基本環境

              啓動udevselinux子系統

              udev負責產生/dev中的文件,selinux負責增強系統的安全性

              設定核心參數sysctl -p 加載/etc/sysctl.conf

              設定系統時間,將硬件時間設定爲系統時間

              加載鍵盤和交換分區swapon -a -e

              設置主機名,掛載文件系統,並將根重新掛載爲可讀寫的。

              加載動態驅動模塊USB設備、RAID LVM

              卸載/initrd/目錄

             

       rc腳本設置啓動級別 linux中有許多不同的啓動級別,不同的啓動級別會制定不同的服務

          根據指定rc的參數會對應執行 /etc/rc.d/rc[0-6].d/ 中的連接腳本文件以S開頭的則啓動

 

       rc.local如果我們想在啓動過程中放置一些其他程序,應該使用rc.local腳本中,因爲S99local軟鏈接存在於rc[2-5].d中,並指向rc.local文件。

       三個rc腳本執行完畢後,就會建立虛擬主控制檯執行/bin/login就提供了用戶登陸界面了,如果是圖形 L5級別的話,會啓動Xwindow登錄界面。

 

至此所有的啓動就都已經完畢,以上腳本可以自己直接打開查看

 

用戶環境初始化
       輸入用戶名和密碼系統驗證,然後會執行一下這些文件:
       /etc/profile
       /etc/profile.d/*.sh        $HOME/.bash_profile
       /etc/bashrc
       $HOME/.bashrc  
       
系統啓動級別:
       runlevel 0          關機
       runlevel 1          單用戶模式,僅root用戶可登
       runlevel 2          多人模式,無網絡
       runlevel 3          命令行模式    
       runlevel 4          保留
       runlevel 5          圖形模式
       runlevel 6          重新啓動
 
查看啓動級別
[root@ju grub]# runlevel 
N 5
切換啓動級別
[root@ju grub]# init 3



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章