grub相關說明

GRUB相關說明: 


主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5組成。


device.map:存放的是內核文件的根分區


menu.lis:爲菜單列表,裏面爲可選擇的菜單列表,存放於stage2中。


stage:用於grub引導程序過大,所以分2段引導,第一段存放在MBR中,第二段存放於內核文件系統中,第一段引導完成後可以找到第二段。 但是,第二段是存放於內核文件系統中的,此時還沒有格式化文件系統,如何可以訪問到第二段的menu.lst,就需要藉助於中間層 stage1_5,有它來協助 stage1 段來訪問stage2階段。stage1_5通常位於stage1 字段後的 63 個扇區。 由於stage2 在內存中存放可以使用的文件系統不確定,所以這就是有多個stage1_5 的原因。


Grub Legacy:分三階段

stage1:存放在MBR上

stage1_5:存放在MBR之後的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統;

stage2:磁盤分區(/boot/grub/)


引導加載程序先讀取MBR上的gurb第一階段,由於MBR很小隻有512字節採用grub這種方式引導程序,隨後讀取扇區中的stage1.5階段,讀取1.5階段以後從而就能驅動第二階段stage2所在的磁盤分區,stage2是存放在磁盤分區上的還包括了內核文件及ramdisk等都在這個分區上存放的;這就是爲什麼通過Bootloader之grub就能夠加載內核文件的原因。


注意:當前硬件平臺,主板BIOS必須能識別硬盤,然後BIOS才能加載硬盤中的Bootloader,磁盤中的Bootloader自身加載完以後,就能夠識別當前主機上的硬盤設備了。


但硬盤設備能識別,並不代表硬盤上的文件系統能識別,因爲文件系統是額外附加的一層軟件組織的文件結構,所以要能夠對接一種文件系統,必須要用到文件系統驅動;對應的應用程序必須能識別和理解這樣的文件系統纔可以,這種程序就稱爲文件系統驅動;grub的1.5階段就是給gurb提供了文件系統驅動的,從而就能夠訪問對應的第二階段和內核所在的分區了,這通常是一個基本磁盤分區;所以grub第二階段以及內核和ramdisk文件通常都會放在一個基本磁盤分區上;因爲grub驅動不了邏輯卷這種高級接口。


stage2一般是掛載至/boot/grub/目錄下;grub也有自己的配置文件:/boot/grub/grub.conf且通常有個符號鏈接文件:/etc/grub.conf;


stage2的功用:

 (1)提供菜單或交互式接口;

 (2)能加載用戶選擇的內核或操作系統;

 (3)爲菜單通過了保護機制。


/boot/grub/grub.conf配置文件詳解:


進入單用戶模式: 

1)編輯grub菜單,選定要編輯的title,而後使用e命令  

2)在選定的kernel後附加1 ,s 或single  

3)在kernel所在的行,鍵入b鍵      

演示:

啓動時按e鍵:


上下選擇到kernel後按e編輯輸入1或s、S、single,再次按b鍵重啓


6、根切換

  在掛載根文件系統時爲了避免內核中有bug或操作過程中有bug導致根文件系統被損壞,先只讀掛載根文件系統,加載完成後纔讀寫掛載,完成整個掛載根文件系統後,直接去找/sbin/init程序,即開始運行用戶空間的第一個程序。


用戶空間啓動流程

7、/sbin/init程序

  init程序主要依賴於配置文件:/etc/inittab,大體分爲:設定默認啓動級別 --> 設定系統初始化腳本 --> 啓動對應級別的服務 --> 打印各終端登錄界面(如果級別爲3處理提供文本登錄界面,如果級別爲5還提供圖形登錄界面)


8、設置默認運行級別

  (1)運行級別:爲了系統的運行或維護等目的而設定的機制;

    0-6:共7個級別;

     0:關機,shutdown

     1:單用戶模式(single user),root用戶,無須認證,維護模式;

     2:多用戶模式(multi user),會啓動網絡功能,但不會啓動NFS,維護模式;

     3:多用戶模式(multi user),完全功能模式,文本界面;

     4:預留級別:目前無特別使用目的,但習慣以同3級別功能使用;

     5:多用戶模式(multi user),完全功能模式,圖形界面;

     6:重啓,reboot


圖示:

讀取配置文件:/etc/inittab


(2)配置文件:/etc/inittab定義了很多功能,每一行定義一種操作(action)以及與之對應的process(僅適用於CentOS 5),一行就定義了init要執行的任務,甚至是一堆任務,每一行的語法格式爲:   

                                                          id:runlevels:action:process

  id爲一個任務的標識符;

  runlevels:在哪些運行級別下啓動此任務;例:3,2345,也可爲空表示所有級別;

  action:在什麼條件下啓動此任務;

    wait:等待切換至此任務所在的級別時執行一次(剛剛切換進來時);

    respawn:一旦此任務終止時,就自動重啓;(如:登錄終端執行logout登出後會再次啓動)

    initdefault:設定默認允許級別;此時process省略爲空;

    sysinit:設定系統初始化方式,此處一般爲指定/etc/rc.d/rc.sysinit腳本;(CentOS 5,6都用到此腳本,CentOS 7是靠systemd完成的),在CentOS 6中僅保留此配置文件中設定啓動運行級別的功能。

    process:具體任務;通常爲應用程序,或腳本,或二進制的程序,取決於自定義。


演示:


9、系統初始化腳本

系統初始化腳本:/etc/rc.d/rc.sysinit

(1)設置主機名;

(2)設置歡迎信息;

(3)激活udev和selinux;

(4)掛載/etc/fstab文件中定義的所有文件系統;

(5)檢測根文件系統,並以讀寫方式重新掛載根文件系統;(重新掛載是指根文件檢測完之後)

(6)設置系統時鐘;

(7)根據/etc/sysctl.conf文件來設置內核參數;

(8)激活lvm即軟raid設備;

(9)激活swap設備;

(10)加載額外設備的驅動程序;(內核加載驅動只加載根文件系統的)

(11)清理操作;


注意:在init配置文件:/etc/inittab中,有一行內容是定義/etc/rc.d/rc.sysinit,此腳本文件是負責完成系統初始化的腳本文件。


10、關閉/啓動對應級別下的服務

  腳本文件/etc/rc.d/rc作用爲當級別切換時啓動或停止服務;此腳本接受傳遞的參數給腳本中$runlevel變量,然後,讀取/etc/rc$runlevel.d/K*和/etc/rc$runlevel.d/S*所有文件,這些文件就是爲什麼開機啓動後,有些服務會自動啓動,有些服務沒有啓動的原因。

K*:要停止的服務,K##*,優先級,數字越小,越優先關閉,依賴的服務先關閉,然後再關閉被依賴的。

S*:要啓動的服務,S##*,優先級,數字越小,越是優先啓動,被依賴的服務先啓動,而依賴的服務後啓動。

/etc/rc.d/init.d目錄還有個鏈接目錄爲/etc/init.d目錄,這兩目錄下文件相同。


如上訴定義將會啓動3級別下的以S打頭的進程:

圖示:


11、啓動終端(圖形終端)

 操作系統啓動完成

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