GRUB(GRand Unified Bootloader簡稱「GRUB」)是一個來自GNU項目的多操做系統啓動程序。GRUB是多啓動規範的實現,它容許用戶能夠在計算機內同時擁有多個操做系統,並在計算機啓動時選擇但願運行的操做系統。GRUB可用於選擇操做系統分區上的不一樣內核,也可用於向這些內核傳遞啓動參數。linux
基本功能ubuntu
GNU GRUB 和GRUB是GRand UnifiedBootloader的縮寫,它是一個多重操做系統啓動管理器。用來引導不一樣系統,如windows,linux。windows
在X86架構的機器中,Linux、BSD 或其它Unix類的操做系統中GRUB、LILO 是你們最爲經常使用,應該說是主流。bash
Windows也有相似的工具NTLOADER;好比咱們在機器中安裝了Windows 98後,咱們再安裝一個Windows XP ,在機器啓動的會有一個菜單讓咱們選擇進入是進入Windows 98 仍是進入Windows XP。NTLOADER就是一個多系統啓動引導管理器,NTLOADER 一樣也能引導Linux,只是極爲麻煩罷了。架構
在PowerPC 架構的機器中,若是安裝了Linux的Powerpc 版本,大可能是用yaboot 多重引導管理器,好比Apple機用的是IBMPowerPC處理器,因此在若是想在Apple機上,安裝Macos 和Linux Powerpc 版本,大可能是用yaboot來引導多個操做系統。app
由於X86架構的機器還是主流,因此目前GRUB和LILO 仍然是咱們最經常使用的多重操做系統引導管理器。ide
由硬盤啓動時,BIOS一般是轉向第一塊硬盤的第一個扇區,即主引導記錄(MBR)。工具
裝載GRUB和操做系統的過程,包括如下幾個操做步驟:this
基本引導裝載程序所作的惟一的事情就是裝載第二引導裝載程序。加密
這第二引導裝載程序其實是引出更高級的功能,以容許用戶裝載一個特定的操做系統。
IDE硬盤用hd開始,SCSI硬盤用sd開頭。軟盤用fd開頭。命名和linux不大同樣。是從0算起。
(hd0,0)。表示C盤。
(hd0,4)。表示D盤。固然這裏指的是(第一個邏輯分區,若是D盤也是主分區,應該寫成hd0,1)
系統的第一個硬盤驅動器表示成(hd0),其上的第一個分區表示爲(hd0,0),也就是說對於硬盤,採用(hdx,y)的形式來表示,x、y都是從0開始計數的,x表示硬盤號,y表示分區號。
在Linux系統中,如ubuntu,(hdx,y)中的y是從1開始計數的。第一邏輯分區用(hd0,5),第二邏輯分區用(hd0,6)來表示
當GRUB環境開始載入第二步引導裝載程序時,它尋找本身的配置文件(menu.lst)。當找到配置文件後,它使用這個配置文件創建一個要載入的操做系統的菜單列表,而後顯示引導菜單接口。若是配置文件沒有被找到,或者若是配置文件不能讀取,那麼GRUB將載入命令行接口。
配置文件:/boot/grub/grub.conf,保證grub和內核等在一個目錄;此外它建立了一個連接文件/etc/grub.conf指向配置文件來保證用戶使用配置文件一致性;
配置項:
default=#:設定默認啓動的菜單項:菜單項(title)編號從0開始
timeout=#:指定菜單項等待選項選擇的時長;
splashp_w_picpath=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;
hiddemenu:隱藏菜單
password[--md5] STRING:菜單編輯認證;
titleTITLE:定義菜單項「標題」,可出現屢次;
root(hd#,#):grub查找stage2及kernel文件所在設備分區:爲grub的「根」
kernel/PATH/TO/VMLINUZ_FILE [PARAMETERS]:啓動的內核
initrd/PATH/TO/INITRAMFS_FILE:內核匹配的ramfs文件
password[--md5] STRING:啓動選定的內核或者操做系統進行認證;
注意:password在不一樣的位置所起效果不一樣
功用:
(1)提供菜單、並提供交互式接口
e:編輯模式,用於編輯菜單
c:命令模式,交互式接口
(2)加載用戶選擇的內核或操做系統
容許傳遞參數給內核;可隱藏此菜單(經過grub.conf中的hiddenmenu)
(3)爲菜單提供了保護機制
爲編輯菜單進行認證(title上定義的password)
爲啓用內核或者操做系統進行認證(title下的password字段)
[root@www root]# grub-md5-crypt
Password: Retype password: $1$Mp7Rp1$l2wzOILNUqpUhAR7zXvQb0 # 上面是生成的加密字符串 # 而後將信息加入到 grub.conf 文件中,格式以下: password --md5 $1$Mp7Rp1$l2wzOILNUqpUhAR7zXvQb0 # 固然加入 grub.conf 文件的位置不一樣,加密效果也不同。 # 加入到 title 以前的話,會加密整個菜單。 # 加入到 title 指內的話,會加密對應的操做系統的入口。
(4)grub-install
使用格式:
grub-install --root-directory=/PATH/TO/rootDIR DEVICE
~]# grub-install --root-directory=/ /dev/sda3 Installation finished. No error reported. This is the contents of the device map //boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install‘. # this device map was generated by anaconda (hd0) /dev/sda
grub的命令行命令:
help:獲取幫助信息
help KEYWORD:獲取某一具體命令的幫助信息
find (hd#,#)/PATH/TO/SOMEFFILE:查找文件(內核文件等)
root (hd#,#):設定那個磁盤是根,執行後,fnd不需指磁盤了;
kernel /PATH/TO/KERNEL_FILE:設定本次啓動時用到的內核文件;
initrd /PATH/TO/OMOTRAMFS_FILE:設定爲選定的initrd文件
boot:引導啓動選定的內核;
示例:手動啓動系統
按c:命令模式,依次輸入如下命令,注意要寫上你的 內核版本_架構 And root分區
示例:進入單用戶模式 (無需輸入root密碼)
(1)編輯grub菜單(選定要編輯的title,然後使用e命令)
(2)在選定的kernel後附加 1,s,S或single 均可以
(3)ESC退出後在編輯界面,選中kernel所在行,鍵入"b"命令,啓動系統;
示例:當grub出現故障,沒法進入系統時,如圖所示:
若是你不知道你的引導分區所在的位置,那麼我們只能輸入root (hd0,而後按tab鍵,會有以下顯示,那麼我們須要把type 0x83的分區位置都得試一下,由於0x83的分區都有多是/root分區,他們都是主分區,我這隻有即0分區.
那麼我就從root (hd0,0)開始了,而後輸入kernel /vm 按tab鍵補全則說明是正確的,個人系統是 邏輯卷 的 因此我 接着輸入 ro root=/dev/mapper/vg0-root,你們的若是是/dev/sda1,可輸入 ro root=/dev/sda1 ,注意(hd0,0)=/dev/sda1 (hd0,1)=/dev/sda2 如圖:
接着輸入initrd /ini 按tab鍵補全, 而後 輸入boot命令,啓動系統
大功告成!