Linux--grub

一、Grub簡介

    系統啓動引導管理器(bootloader),就是系統啓動時在執行POST加電自檢功能的BIOS程序之後、操作系統內核運行之前這中間所運行的一段程序,一旦把內核掛載,系統引導管理器的任務就算完成退出,系統引導的其它部份,比如系統的初始化及啓動過程則完全由內核來控制完成。所以,它的主要作用是加載內核,並將整個系統的控制權移交給內核。常見的bootloader有Windows的ntloader、Linux的lilo、grub及grub2等。其中,在CentOS 5/6系列上使用的是grub,而在CentOS 7開始則使用grub;lilo則常見於手機,因此lilo是使用者最多的一種bootloader。

二、Grub配置

(1)stage

Linux將Boot Loader的程序運行與配置項加載分成三個階段(stage)來進行:

        stage1:運行Boot Loader主程序,就是從一個本地磁盤加載 stage 2 或者 stage1_5,這個程序必須要被安裝在啓動區,即MBR中。stage1 是用於引導 Grub 的一個必須的映象文件。因爲 MBR 空間有限,只有512字節,所以 stage1 也是512字節。因此在MBR當中僅安裝Boot Loader的最小主程序,即 stage1,並沒有安裝 Boot Loader 的相關配置文件。因爲大小的限制,stage1 對 stage2 或者 stage1_5 的位置進行編碼。

        stage1_5:在MBR隨後的扇區存放,主要用於與 stage2 的分區的文件系統進行交互,讓stage1中的 Boot Loader 能夠識別stage2所在分區的上的文件系統,通過藉助於stage1.5階段所提供的文件系統驅動,stage1就可以通過加載其中某一種文件系統驅動來識別stage2所在分區的文件系統了。

        stage2:(1) 向用戶提供菜單,並提供交互式接口。例如,在啓動時可進入菜單,通過鍵入e鍵進入編輯模式,可以編輯菜單,此時會讀取配置文件;也可以通過鍵入c鍵可以進入命令行模式,即進入交互式接口,可以自己手動指定要啓動的內核而不讀取grub配置文件;

                      (2) 加載用戶選擇的內核或操作系統。在選擇時允許用戶傳遞參數給內核,也可以隱藏菜單的具體內容;

                      (3) 爲菜單提供保護機制。可以爲編輯菜單提供認證,用戶需要通過認證方可編輯指定菜單;也可以爲內核或操作系統提供認證,用戶需要通過認證方可啓動指定的內核或操作系統。

      device.map:定義 grub 裝在了哪裏
                e2fs_stage1_5:ext4文件系統的定義
                 fat_stage1_5:fat文件系統的定義
                ffs_stage1_5:ffs文件系統的定義
                grub.conf:grub的配置文件
                iso9660_stage1_5:光驅文件系統的定義
                jfs_stage1_5:jfs文件系統的定義
                menu.lst -> ./grub.conf 
                minix_stage1_5:minix文件系統的定義
                reiserfs_stage1_5:reiserfs文件系統的定義
                splash.xpm.gz:啓動時在 grub 底下的背景圖示
                stage1:tage 1的相關說明
                stage2:tage 2的相關說明
                ufs2_stage1_5:ufs2文件系統的定義    
                vstafs_stage1_5:vstafs文件系統的定義
                xfs_stage1_5:xfs文件系統的定義

由以上得知在 /boot/grub 目錄下最重要的是grub的配置文件及各種文件系統的定義,當 Boot Loader 讀取了這些文件系統所定義的數據後,就能夠識別文件系統並讀取該文件系統上的內核文件了。

(2)grub的配置文件

 配置文件:/boot/grub/grub.conf<--/etc/grub.conf,grub.conf是grub的主配置文件,通過這個配置文件,grub才能找到kernel,系統才能正常啓動。

CD@DM6PR3$$`)Z4S[SZCIVB.png

default=0
    表示默認的啓動條目,假如同時裝有多個操作系統,0  表示定義的第一個title系統,1 表示定義的第二個title系統,依次類推。
timeout=5
    表示可供選擇的等待時間,如果超過5秒,則使用默認的啓動條目default定義的。
splashimage=(hd0,0)/grub/splash.xpm.gz
    定義啓動時的gurb背景圖片信息,一般爲壓縮文件。
hiddenmenu
    啓動時是否要顯示菜單,默認情況下是不顯示菜單信息,如果想要顯示菜單,可以將該配置註釋即可;
title
    定義各個操作系統的名稱或系統內核
root 
    表示內核文件存放的位置,這裏指定的是分區位置,而非根目錄  
(hd0,0)
    識別硬盤設備    
    hd#: 磁盤編號,用數字表示;從0開始編號    
    #: 分區編號,用數字表示; 從0開始編號    
    (hd0,0) 第一塊硬盤,第一個分區   
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=e0d35066-8d37-42f2-bdb9-e4416aec281a rhgb quiet    
        內核的名稱以及一些啓動時的核心參數。由於啓動過程中需要掛載根目錄,因此就需要指定根目錄所在的分區。rhgb表示色彩顯示,quiet表示靜默模式加載內核。
initrd /initramfs-2.6.32-696.el6.x86_64.img
    虛擬文件系統,指明用於輔助內核完成系統啓動的ramdisk文件路徑再次在內存緩存

注意: kernel與initrd這兩個設置項中,指定的路徑都是絕對路徑。因爲這兩個文件都存放在/boot目錄。而且/boot所在的分區已經在root (hd[0-n],[0-n])中指定,所以就無需再指明kernel與initrd在哪個分區了。如果boot分區爲獨立分區,那麼前面的/boot省略掉。如果boot分區爲非獨立分區,那麼必須加上/boot。

三、實驗

在Linux系統中,出於安全的考慮,只有一個root用戶,因此若遺忘root用戶的登錄密碼,就可以藉助grub進入單用戶模式進行修改密碼。

實驗1:修改root密碼

(1)重啓系統,在讀秒沒完成之前,按任意鍵進入grub菜單。出現grub菜單時,按↑,↓進行引導,並定位到要進入的操作系統選項,如圖進行操作。

2DSK]CCJP1T9NI(SADI~WZK.png

(2)按“↓”進行引導,定位到第二個選項,按“e”進入編輯模式。

$@]X%YOF$F@83NO76GE2{`P.png

(3)輸入1之後回車返回grub模式,按b進入單用戶模式。

2(_PZ6CFT2{5D$VV0@0K3RN.png

(4)進入shell環境,輸入passwd,重新更改root密碼,輸入完成後,使用reboot命令重啓系統。

ZOJG1A676JOFZD2~EU97VLN.png

(5)輸入用戶名和新密碼,啓動系統。

N]Q1U]QOTJ1WA@_W12SFWK3.png

實驗2:  刪除/boot下的所有文件,並恢復

(1)刪除/boot下的所有文件,並重啓系統

[C))OR~%~2Z_@NABAE)S_VH.png

(2)在進度條沒完成之前,右手按鼠標左鍵,同時左手按ESC鍵,進入Boot  Menu,使用↓進行引導,定位到3. CD-ROM  Drive 選項,回車。

UJ8(VR%)$[O$W7Q5W6_JQH0.png

(3)使用↓進行引導,定位到選項resuce(救援模式),回車

(4)依次“yes”“yes”“no”“yes”“continue”“OK”......,直至進入shell編輯模式,回車。

S64]OVSR(9L22Z_C]G)8FMV.png

_W([FH{U53%%(6C[NU5GLG1.png

(5)切換根目錄,安裝grub.

chroot /mnt/sysimage
grub-install /dev/sda

P8_LWFDX_6OF63LL$]M0YM9.png

(6)掛載光盤,複製vmlinux到/boot目錄下,創建initrd系統。

mount /dev/cdrom /media
cp /media/isolinux/vmlinux /boot
mkinitrd /boot/initrd-$(uname -r).img $(uname -r)

MP0QERFK6{C[GYT@6(MM×××1.png

(7)進入/boot/grub/目錄下,使用vim命令編輯grub.conf文件,內容如下:

WKLZ0H@ATS{ZWNLOO`[J76P.png

注:腳本里的UUID指的是/boot目錄下的UUID,別搞錯了。

(8)輸入兩次exit命令,退出shell編輯模式,重啓系統,回車。

(H])OO)81~3A13NJU39_@7S.png

實驗3:給grub加密

grub也有自己的保護機制,只有通過認證才能修改grub.conf信息。可以通過一些方式來對grub.conf進行保護:

   1、在第一個title之上添加 password --md5 ************ 主要用於保護編輯功能;
    2、在某個title內添加 password --md5 ************ 主要用於保護內核;
生成密碼的命令:grub-md5-crypt

(1)輸入grub-md5-crypt命令,生成明文密碼

CEFR2[CDMYLSI%U4JHTDJLV.png

(2)在grub.conf裏添加密碼

{7(XR2RMH_)`]D6ZH8)~$)0.png

(3)重啓系統,在讀秒沒完成之前,按任意鍵進入grub菜單,在下方有下一步提示。

VC)8~8JY`R}ADP[XC)F2{@L.png

(4)根據提示,輸入p之後提示輸入密碼

FH%)1_OF)(TTK%QX2P]WI18.png

(5)輸入密碼完成認證就出現正常編輯grub的配置界面。

0A8C_O3KZ~9272CRW~]%{~Y.png

grub的界面支持命令行接口,在grub界面可以按照提示輸入e、b、c等命令繼續相應的編輯,在對應的title中輸入c可以進入命令行模式,在命令行中可以輸入一些信息:

help:獲得幫助
    find:文件查找,通常用於定位文件,方法find (hd#,#)/
    root
    kernel
    initrd
    boot

實驗四:手動在grub命令行接口啓動系統

grub> root (hd0,0)                                  進入root第一個磁盤,第一個分區
grub> kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2           掛載內核和root根目錄
grub> initrd /initramfs-2.6.32-696.el6.x86_64.img                  掛載虛擬文件系統
grub> boot                                                                    啓動系統

在grub界面輸入“c”命令進入grub編輯界面,依次輸入以上命令就可以手動在grub命令行接口啓動系統。

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