2021-05-12 14:32:11
Linux作業系統啟動管理器-GRUB
【GRUB是什麼】
GNU GRUB(簡稱“GRUB”)是一個來自GNU專案的啟動載入程式。GRUB是多啟動規範的實現,它允許使用者可以在計算機內同時擁有多個作業系統,並在計算機啟動時選擇希望執行的作業系統。GRUB可用於選擇作業系統分割區上的不同核心,也可用於向這些核心傳遞啟動引數。GRUB是在計算機啟動後執行的第一個程式,他是用來負責載入、傳輸控制到作業系統的核心,一旦把核心掛載,系統引導管理器的任務就算完成退出,系統引導的其它部份,比如系統的初始化及啟動過程則完全由核心來控制完成。
【GRUB的功能】
1、提供選單,並提供互動式介面;啟動介面敲e鍵: 進入編輯模式;
2、選擇要啟動的核心或系統(允許傳遞引導引數給核心、選擇介面可隱藏);
3、為編輯功能提供保護機制。
啟用核心檔案保護:選擇執行指定的核心得先輸入密碼
傳遞引數保護:使用e命令得先輸入密碼
【GRUB的組成】
[root@CentOS6 grub]# ll
total 275
-rw-r--r--. 1 root root 63 Mar 16 14:12 device.map #grub的對應裝置檔案;
-rw-r--r--. 1 root root 13392 Mar 16 14:12 e2fs_stage1_5 #e2fs檔案系統定義檔案;
-rw-r--r--. 1 root root 12632 Mar 16 14:12 fat_stage1_5
-rw-r--r--. 1 root root 11760 Mar 16 14:12 ffs_stage1_5
-rw-------. 1 root root 1137 May 6 20:15 grub.conf #grub的組態檔;
-rw-r--r--. 1 root root 11768 Mar 16 14:12 iso9660_stage1_5
-rw-r--r--. 1 root root 13280 Mar 16 14:12 jfs_stage1_5
lrwxrwxrwx. 1 root root 11 Mar 16 14:12 menu.lst -> ./grub.conf
-rw-r--r--. 1 root root 11968 Mar 16 14:12 minix_stage1_5
-rw-r--r--. 1 root root 14424 Mar 16 14:12 reiserfs_stage1_5
-rw-r--r--. 1 root root 1341 Nov 14 2010 splash.xpm.gz #開機時grub介面的背景圖片;
-rw-r--r--. 1 root root 512 Mar 16 14:12 stage1
-rw-r--r--. 1 root root 126108 Mar 16 14:12 stage2
-rw-r--r--. 1 root root 12036 Mar 16 14:12 ufs2_stage1_5
-rw-r--r--. 1 root root 11376 Mar 16 14:12 vstafs_stage1_5
-rw-r--r--. 1 root root 13976 Mar 16 14:12 xfs_stage1_5
stage1: 這是一個用來啟動GRUB的映像檔案(必須要有)。通常,這個檔案是被裝載到MBR或者啟動磁區所在的分割區.由於PC的啟動磁區的大小為512位元組,所以這個映像檔案編譯以後也必須為512位元組。Stage1的全部的工作是從本地磁碟把Stage 2或者Stage 1.5裝載進來。由於對stage1大小的限制,它通過分程式表的形式來編碼Stage 2或者Stage 1.5的位置,所以在stage1是不能識別任何檔案系統
stage1_5: MBR隨後的磁區,其作為stage1與stage2之間的橋樑,也就是說,stage1載入stage1.5,然後stage1.5載入stage2。 stage1與stage1.5之間的區別是,前者是不識別任何檔案系統的但後者識別檔案系統(例如 'e2fs_stage1_5'識別ext2fs)。所以你可以安全的移動stage2位置,即使是GRUB安裝完以後。
stage2: 用於讀取grub.conf組態檔,並實現引導功能的擴充套件。
【GRUB組態檔grub.conf】
[root@CentOS6 grub]# cat grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_centos6-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1 #選擇第幾個title設定的核心或系統,各title從0開始編號;
timeout=5 #選單顯示的超時時長;
splashimage=(hd0,0)/grub/splash.xpm.gz #指定選單的背景圖片;此圖片只能為14bits色,xpm格式,
gzip壓縮;
hiddenmenu #隱藏選單,在timout之前按下任意鍵才會顯示選單,反之則不顯示選單;
title CentOS (3.19.6) #顯示於選單中的標題;
root (hd0,0) #指定boot分割區所在磁碟及分割區
kernel /vmlinuz-3.19.6 ro root=/dev/mapper/vg_centos6-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos6/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos6/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet #指定核心的絕對路徑、以唯讀方式掛載根檔案系統、root分割區所在位置、等相關引數;
initrd /initramfs-3.19.6.img #指定initramfs檔案的絕對路徑;
注意:
1、在grub中所有硬碟都識別為hd,不同的硬碟基於數位標識:如hd0(表示第一塊硬碟), hd1(第二塊硬碟),同一個硬碟上的不同分割區,也使用數位標識,如hd0,0(第一塊硬碟上的第一個分割區);
2、因為grub不能識別物理卷(PV),當然root不能放在邏輯卷(lv)上,所以root一般單獨分割區且一定為基本磁碟分割區。
【grub命令列介面】
啟動方式: 啟動介面->敲c進入
root(DEVICE):指定哪個分割區為接下來要啟動的系統或核心檔案所在的分割區
例:root (hd0,0)
kernel: 指定要執行的核心檔案
initrd: 為要執行的核心指定其可用的ramdisk檔案
boot: 啟動此前設定好的核心或系統
find (DEVICE)/path/to/file 查詢指定檔案是否在分割區上,支援命令補全
例:find (hd0,0)/vmlinuz-2.6.32-431.el6.i686
註:grub命令列介面支援命令列補全,在此模式下要啟動系統必須預先知道根所在的裝置。
【grub保護機制設定】
途徑:通過修改grub的組態檔,一般為/boot/grub/grub.conf
1、生成密碼:
[root@CentOS6 ~]# grub-md5-crypt #通過md5演算法來生成密碼;
Password: #鍵入預要設定的密碼;
Retype password: #確認密碼;
$1$J99TE$c7VWrcDAfB1GrVqI5.E0L. #用md5演算法生成的密碼;
2、保護編輯功能,則需要在title之外新增:password --md5 密碼串;
# ----略---
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$J99TE$c7VWrcDAfB1GrVqI5.E0L. #設定編輯功能保護
title CentOS (3.19.6)
root (hd0,0)
#----略---
設定後的效果如上圖所示:提示我們想要進入編輯介面,必須先按'p'鍵再鍵入正確的密碼。
3、保護使用某核心,則需要核心對應的title之下新增:password --md5 密碼串
# ----略---
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.19.6)
password --md5 $1$J99TE$c7VWrcDAfB1GrVqI5.E0L. #設定保護CentOS (3.19.6)這核心;
root (hd0,0)
#----略---
【安裝grub的方式】:
1、使用grub-install命令
# grub-install [--root-directory=DIR] DEVICE
--root-directory=指定的路徑必須是核心及initrd檔案所在的分割區的掛載點的父目錄,且此掛載點必須叫boot
例如:在/dev/sdb上的/dev/sdb1分割區含有核心及initrd檔案,現需要在sdb上安裝grub。
[root@CentOS6 ~]#mount /dev/sdb1 /mnt/boot
[root@CentOS6 ~]#grub-install --root-directory=/mnt /dev/sdb
如何在Ubuntu12.04/12.10中重灌或修復Grub2引導 http://www.linuxidc.com/Linux/2012-11/74901.htm
Linux啟動引導過程 grub和mbr http://www.linuxidc.com/Linux/2013-07/87923.htm
grub 的安裝與使用 http://www.linuxidc.com/Linux/2013-07/87682.htm
grub載入程式組態檔分析 http://www.linuxidc.com/Linux/2013-07/87547.htm
CentOS 6.4 grub加密碼 http://www.linuxidc.com/Linux/2013-07/87124.htm
CentOS GRUB引導錯誤無法進入系統解決辦法 http://www.linuxidc.com/Linux/2014-11/108835.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-05/117252.htm
相關文章