天天看點

grub 引導-系統引路人

<span style="font-family: 楷體, 楷體_GB2312, SimKai;">42.grub.md</span>

    GNU GRUB(GRand Unified Bootloader簡稱“GRUB”)是一個來自GNU項目的多作業系統啟動程式。GRUB是多啟動規範的實作,它允許使用者可以在計算機内同時擁有多個作業系統,并在計算機啟動時選擇希望運作的作業系統。GRUB可用于選擇作業系統分區上的不同核心,也可用于向這些核心傳遞啟動參數。

    回憶下開機流程:BIOS(POST)--> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 設定預設運作級别 --> 系統初始化腳本 --> 關閉和啟動對應級别下的服務 --> 啟動終端

    從以上流程可以看出,grub處于系統硬體初始化完成和核心初始化開始之前的位置,grub的功能就是;基于硬體環境(就是一個基本功能完整的主機環境),提供一個菜單,允許使用者選擇要啟動的系統或不同的核心版本; 把使用者標明的核心裝載到RAM中的特定空間中、解壓、展開,而後把系統控制權移交給核心。

    CentOS5,6版本用grub 0.x版本:也就是grub legacy, grub 1.x也就是grub2。目前企業應用中較為常用的系統時CentOS6,是以grub1版本是最為常用的,是以基于centos6.7,暫時介紹grub1這個版本。

    grub legacy分段設計為stage1,stage2,其中還存在grub stage1.5,其差別與功用如圖:

grub 引導-系統引路人

    grub配置檔案為 /boot/grub/grub.conf 由上圖可以看到,該檔案位于磁盤上,

grub的功用:功能和作用不一樣,作用是功能的必須,功能是作用的升華。

(1) 提供菜單、并提供互動式接口

        e: 編輯模式,用于編輯菜單;

        c: 指令模式,互動式接口;

(2) 加載使用者選擇的核心或作業系統

        允許傳遞參數給核心

        可隐藏此菜單

(3) 為菜單提供了兩種保護機制

        為編輯菜單進行認證

        為啟用核心或作業系統進行認證

grub的指令行接口(centos 6,centos7 和6很大不同)

    help: 擷取幫助清單

    help KEYWORD: 詳細幫助資訊

    find (hd#,#)/PATH/TO/SOMEFILE #在指定裝置查找檔案

    root (hd#,#) # boot檔案所在的根檔案所在裝置

    kernel /PATH/TO/KERNEL_FILE # 設定本次啟動時用到的核心檔案;額外還可以添加許多核心支援使用的cmdline參數;

    例如:init=/path/to/init, selinux=0 # 使用這個init作為init程式, selinux=0

                root=/dev/DEVICE #指定核心根檔案系統的分區

    initrd /PATH/TO/INITRAMFS_FILE #設定為標明的核心提供額外檔案的ramdisk;必須與核心版本完全比對。

    boot: 引導啟動標明的核心;

如何手動在grub指令行接口啟動系統:

grub> root (hd#,#)

grub> kernel /vmlinuz-2.6.32-584.el6.x86_64  ro root=/dev/mapper/vg0-root quiet

grub> initrd /initramfs-2.6.32-584.el6.x86_64.img

grub> boot

grub 如何識别裝置:

    (hd#,#):

    hd#: 磁盤編号,用數字表示;從0開始編号

    #: 分區編号,用數字表示; 從0開始編号

    示例:(hd0,0)

    說明:grub從grub2開始不用0辨別磁盤和分區第一個為:hd(1,1)辨別

配置檔案:

    /boot/grub/grub.conf 有連結檔案為 /etc/grub

    配置項:

default=#: 設定預設啟動的菜單項;菜單項(title)編号從0開始;

timeout=#:指定菜單項等待選項選擇的時長;

splashp_w_picpath=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖檔檔案路徑;

hiddenmenu:隐藏菜單;hiddenmenu會顯示讀秒而不進入菜單,回車進菜單,否則顯示菜單,等待使用者選擇;

password [--md5] STRING: 設定認證方式,菜單編輯認證;按“e”鍵的編輯的時候就會提示輸入該密碼

title TITLE:定義菜單項“标題”, title 可出現多次,進而引導不同的核心;

[縮進]root (hd#,#):grub查找stage2及kernel檔案所在裝置分區;為grub的“根”; 

[縮進]kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS] root=/dev/sdb2 init=/bin/bash :啟動的核心,root指定核心rootfs根裝置位置,init指定啟動init程式位置。

    init 

[縮進]initrd /PATH/TO/INITRAMFS_FILE: 核心比對的ramfs檔案;

[縮進]password [--md5] STRING: 啟動標明的核心或作業系統時進行認證;

grub密碼生成工具

    grub-md5-crypt工具可以生成指令,由于grub.conf是對所有使用者可見的,是以建議用--md5指定加密碼串。

        grub-md5-crypt

        輸入密碼:

        再次輸入密碼:

進入單使用者模式:

(1) 編輯grub菜單(標明要編輯的title,而後使用e指令); 

(2) 在標明的kernel後附加

    1, s, S或single都可以;

(3) 光标定位在kernel所在行,鍵入“b”指令,進入單使用者模式;

恢複grub

    安裝grub:

1) grub-install 

    grub-install --root-directory=ROOT /dev/DISK # 所有階段1、1.5、2 階段。??是否需要存在grub目錄的stage1,1_5、2檔案

dd if=/dev/zero of=/dev/sda bs=200 count=1                
grub-install --root-directory=/ /dev/sda                
reboot      

(2) grub # 需要所有階段1、1.5、2 階段。

grub> root (hd0,0)     root (hd0,0)       
Filesystem type is ext2fs, partition type 0x83    
grub> setup (hd0)                       
setup (hd0)     
Checking if "/boot/grub/stage1" exists... no     
Checking if "/grub/stage1" exists... no     
說明:setup 會需要檢測是否存在/boot/grub/stage1setup (hd0)   
Checking if "boot/grub/stage1" exits... no   
Checking if "/grub/stage1" exits... yes   
Checking if "/grub/stage2" exits... yes   
Checking if "/grub/e2fs_stage1_5" exits... yes   
Running "enbed /grub/e2fs_stage1_5 (hd0)" ..   27 sectors are enbended.successed    
Runing "install /grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf" ... succededDone      

繼續閱讀