grub:GRand Unified Bootloaderlinux
在早期的Linux發行版中,Bootloader一直採用LILO,LILO曾經是Linux發行版中主流的Bootloader,可是它不能引導1024柱面之後的分區,大大限制了操做空間,因此現現在的Linux發行版中的Bootloader都使用了GRUB,它有更好的接口和界面,並且能爲用戶提供交互式接口,使用配置更加靈活方便。算法
grub版本:grub 0.x : grub legacy(傳統grub)bash
grub 1.x: grub2ide
grub的啓動階段(grub legacy):加密
stage1:位於mbr中;操作系統
stage1_5:mbr以後的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統;命令行
stage2:磁盤分區(/boot/grub);3d
配置文件:/boot/grub/grub.conf <-- /etc/grub.confblog
stage2及內核等一般放置於一個基本磁盤分區中;接口
grub的訪問路徑:/grub,grub剛啓動時內核並無被啓動起來,因此根文件系統也沒有被掛載,因此grub的第二階段就把本身的訪問路徑設爲了臨時根目錄,但並非啓動後的根文件系統,因此在內核啓動以前grub的路徑就是/grub,內核的訪問路徑就是/vmlinuz.
功用:(1)提供菜單、並提供交互式接口
e:編輯模式,用於編輯菜單;
c:命令模式,交互式接口;
(2)加載用戶選擇的內核或操做系統
容許傳遞參數給內核
默認隱藏此菜單
(3)爲菜單提供了保護機制
爲編輯菜單進行認證
爲啓用內核或操做系統進行認證
注:在啓動系統的界面鍵入ESC鍵可進入grub
能夠鍵入e鍵進入編輯模式,用於編輯菜單:
鍵入c鍵進入命令行編輯模式
grub如何識別:
(hd#,# ):表示第#塊磁盤的第#號分區
(hd0,0):表示第一塊磁盤的第一個分區。
grub的命令行接口:
help:獲取幫助列表
help KEYWORD:詳細幫助列表。
find(hd#,#)/PATH/TO/SOMEFILE:查找指定文件(設定根文件系統以後就不用再指定磁盤進行查找了)
root (hd0,0) :設置相應磁盤爲根文件系統
kernel /PATH/TO/KERNEL_FILE: 設定本次啓動時用到的內核文件;額外還能夠添加許多內核支持使用的cmdline參數;
例如:init=/path/to/init, selinux=0
initrd /PATH/TO/INITRAMFS_FILE: 設定爲選定的內核提供額外文件的ramdisk;
boot: 引導啓動選定的內核;
手動在grub命令行接口啓動系統:
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
但每次開機都要手動啓動太麻煩,grub能夠自動讀取配置文件生成菜單模式來啓動內核。
grub的配置文件:/boot/grub/grub.conf <-- /etc/grub.conf
配置項:
default=#: 設定默認啓動的菜單項;落單項(title)編號從0開始;
timeout=#:指定菜單項等待選項選擇的時長;
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;
hiddenmenu:隱藏菜單;
password [--md5] STRING: 菜單編輯認證(可省略);
title TITLE:定義菜單項「標題」, 可出現屢次;
root (hd#,#):grub查找stage2及kernel文件所在設備分區;爲grub的「根」;
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啓動的內核
initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件;
password [--md5] STRING: 啓動選定的內核或操做系統時進行認證(可省略);
grup-md5-crypt命令可生成加密算法爲md5的密碼
咱們用命令行接口手動啓動時候輸入的命令都能經過該配置文件設置,配置完該文件後就會生成菜單頁面自動執行操做。
進入單用戶模式:
(1)編輯grub菜單(選定要編輯的title,然後使用e命令)
(2)在選定的kernel後附加 1,s,S或single均可以;
(3)在kernel所在行,鍵入「b」命令;
安裝grub(能夠爲新的磁盤建立新的grub,也能夠在Bootloader損壞時安裝新的grub):
(1)grub-install
grub-install --root-directory=ROOT /dev/DISK
(2)grub(此種方法須要保證在該磁盤中必需要有grub目錄以及各類文件的存在)
grub> root(hd#,#)
grub>setup (hd#)
咱們能夠在操做系統中新增長硬盤並裝入grub並在新的操做系統中使用它:
以CentOS6(虛擬機)爲例新增磁盤:
啓動以後爲新增的俄磁盤分區,grub會默認安裝在boot目錄中,因此咱們要爲新的磁盤至少建立三個分區,一個用來看成boot分區安裝grub,一個爲swap分區,另外一個爲根文件系統,這三個分區只能建立爲基本分區。
如圖:咱們已經建立增長了新的磁盤:
以後咱們須要進行分區,安裝文件系統並掛載新的磁盤分區。
磁盤分區安裝完文件系統後,咱們須要建立新的boot目錄讓grub識別,咱們暫且建立在/mnt中,並將它掛載至/dev/sdb1上:
在/mnt/boot中安裝grub,並指明grub的根文件目錄:
然後建立新的根掛載至sdb3,並建立根文件系統所須要的目錄:
併爲新的根系統複製一個bash程序
咱們還須要爲grub提供內核以及initrd:
爲grub編寫配置文件,由於咱們要在新的系統上使用該grub,因此咱們指定的磁盤分區爲第一個。
copy一個bash程序到新的根文件系統中,
建立新的CentOS6並使用該新建的磁盤,並在內核選項中設置selinux=0:
成功運行了此係統中的grub並啓動了設定的第一個程序bash
如何修復grub:
如圖所示:咱們破壞了grub的stage1
咱們重裝grub就能修復
也能夠進入grub命令提示符進行修復,前提是grub目錄中的stage1和stage1.5目錄必須存在
若是grub被破壞後重啓。就須要經過載入光盤進入救援模式進行安裝grub的修復。