grub應用
1.Grub(bootloader):全稱爲:GRand Unified Bootloader。
現在存在兩個版本:
grub 0.x: grub legacy
grub 1.x:grub2
2.grub的功能:
功能:提供一個菜單,允許用戶選擇要啓動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,並把系統控制權移交給內核;
3.grub legacy 有三個階段,分別是:
stage1,stage1_5,stage2
stage1:存放在MBR中
stage1_5:存放在MBR之後的扇區中,讓stage1中的Bootloader 能識別stage2所在的分區上的文件系統
stage2:存在磁盤分區上(/boot/grub),提供菜單讓用戶選擇不同的內核或操作系統。
grub的配置文件存放目錄爲:/boot/grub/grub.conf 其中/etc/grub.conf文件是/boot/grub/grub.conf 的一個連接文件
當系統啓動的時,如果要加載grub所在的磁盤時,會讀取這個磁盤的MBR,同時會加載stage1,stage1會嘗試讀取隨後扇區的stage1_5階段,stage1_5階段會幫助stage1中的bootloader識別statge2所在的分區上的文件系統,然後加載stage2所在磁盤分區,這個分區不但有stage2階段,還有內核和ramdisk等.
stage2及內核等通常放置於一個基本磁盤分區,而不會放在一個複雜的磁盤分區上,因爲stage無法識別複雜的磁盤分區,如邏輯卷,軟raid等。這也是爲什麼要單獨創建一個簡單的boot分區,而系統跟/做一個邏輯卷。但並不意味着boot要單獨分區。
常用功能:
(1) 提供菜單、並提供交互式接口
e: 編輯模式,用於編輯菜單;
c: 命令模式,交互式接口;
(2) 加載用戶選擇的內核或操作系統
允許傳遞參數給內核
可隱藏此菜單
(3) 爲菜單提供了保護機制
爲編輯菜單進行認證
爲啓用內核或操作系統進行認證
4.grub的交互式接口:
在系統啓動時會有timeout用戶選擇的時長,按Enter鍵會進入一下界面(菜單選項):
grub如何識別設備:
(hd#,#)
hd#:表示第幾塊磁盤
#:表示第幾塊分區
(1)grub的命令行接口:
按下c鍵,會給出一個grub>命令行接口:
help命令:獲取幫助列表
help KEYWORD:詳細獲取某個命令的幫助信息
find (hd#,#)/Path/To/Somefile:查找某個磁盤分區上的某個文件
root (hd#,#):設置grub的跟設備。
kernel /Path/To/Kernel_FILE
設定本次啓動時用到的內核文件;額外還可以添加許多內核支持使用cmdline參數;如:init=/path/to/init selinux=0
常用的內核啓動參數:
磁盤相關啓動參數:
root #指出啓動的根文件系統 如:root=/dev/sda1
ro #指定根設備在啓動過程中爲read-only,默認情況下一般都是這樣配的
rw #和ro類似,它是規定爲read-write,可寫
rootfstype #根文件系統類型,如:rootfstype=ext4
Console和kernel log相關啓動參數:
console #console的設備和選項,如:console=tty0 console=ttyS0
debug #enable kernel debugging 啓動中的所有debug信息都會打印到console上
quiet 靜默模式 將kernel log level設置爲KERN_WARNING,在啓動中只非常嚴重的信息
loglevel #設置默認的console日誌級別,如:loglevel=7 (0~7的數字分別爲:KERN_EMERG,..,KERN_DEBUG)
time #設置在每條kernel log信息前加一個時間戳
內存相關的啓動參數:
mem #指定kernel使用的內存量,mem=n[KMG]
hugepages #設置大頁表頁(4MB大小)的最多個數,hugepages=n
CPU相關的啓動參數:
mce # Enable the machine check exception feature.
nosmp #Run as a single-processor machine. 不使用SMP(多處理器)
max_cpus #max_cpus=n, SMP系統最多能使用的CPU個數(即使系統中有大於n個的CPU)
Ramdisk相關的啓動參數:
initrd #指定初始化ramdisk的位置,initrd=filename
noinitrd #不使用initrd的配置,即使配置了initrd參數
初始化相關啓動參數:
init #在啓動時去執行的程序,init=filename,默認值爲/sbin/init
PCI相關的啓動參數:
pci #pci相關的選項,我常使用pci=assign_buses,也使用過pci=nomsi
SELinux相關啓動參數:
enforcing #SELinux enforcing狀態的開關,enforcing=0表示僅僅是記錄危險而不是阻止訪問,enforcing=1完全enable,默認值是0
selinux #在啓動時關閉或開啓SELinux,selinux=0表示關閉,selinux=1表示開啓selinux
initrd /PATH/TO/INITRAMFS_FILE: 設定爲選定的內核提供額外文件的ramdisk;其中ramdisk 必須要和內核版本號一致。
boot:引導啓動選定的內核
手動在grub命令行接口下啓動系統:
grub> root (hd#,#)
grub> kernel /vmlinuz-Version_Release ro root=/dev/DEVICE ...
grub> initrd /initramfs-Version_Release.img
grub> boot
(2)進入編輯模式:
每次手動引導啓動系統,還是有點麻煩的,可以在按e鍵進入編輯模式:
在編輯模式下可以修改內核參數,也可以進入單用戶模式下等等。
其實編輯模式下顯示的內容就是grub的配置文件的內容:/boot/grub/grub.conf
5.grub的配置文件內容介紹:
配置文件/boot/gurb/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]:啓動的內核
nitrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件;
password [--md5] STRING: 啓動選定的內核或操作系統時進行認證;
(1)使用命令grub-md5-crypt生成密鑰字符串爲菜單或啓動選定的內核進行認證
如:
生成加密字符串:
[root@localhost ~]# grub-md5-crypt
Password:
Retype password:
$1$bQjoR$xpjXuIPvDgccSKfEP3hE2.
編輯grub配置文件:
重啓系統進行測試:
(2)進入單用戶模式
(1) 編輯grub菜單(選定要編輯的title,而後使用e命令);
(2) 在選定的kernel後附加
1, s, S或single都可以;
(3) 在kernel所在行,鍵入“b”命令;
6.安裝grub:
(1)grub-install
grub-install --root-directory=root /dev/DISK
其中--root-directory 的值爲boot所在的目錄。
如:boot目錄在/mnt/boot 則--root-directory=/mnt
(2)grub
grub> root (hd#,#)
grub> setup(hd#)
7.grub損壞的修復:
(1)grub的配置文件損壞的情況下:
模擬grub配置文件損壞,丟失的情況下的修復過程:
先備份一下:# cp grub.conf{,.bak}
刪除配置文件:# rm -rf grub.conf
重啓系統:# init 6
重新啓動系統之後,會出現grub命令行接口,在此處手動啓動系統:
啓動系統之後,在/boot/grub目錄下在手動添加grub.conf配置文件。
(2)磁盤上的grub損壞的情況下:
模擬grub損壞,進行修復的過程:
模擬grub損壞:# dd if=/dev/zero of=/dev/sda bs=200 count=1
修復方法:
1.在grub已損壞,系統還沒有重啓的情況下:# grub-install --root-directory=/ /dev/sda 執行這個命令即可。
2.在grub已損壞,系統還沒有重啓的情況下:在grub的命令行模式下執行如下命令:
grub> root (hd0,0)
grub>setup (hd0)
3.grub已經損壞,系統已經關閉,無法啓動的情況下:
有以下修復情況:
a.把損壞的磁盤拆卸下來,裝載到一個好的系統上,在好的系統上利用grub-install命令進行對損壞的磁盤進行安裝grub.
b.利用鏡像文件進行修復:在系統啓動時,以cdrom方式啓動,啓動之後會有一個選擇界面的菜單,我們選擇Rescue installed system 一項,即緊急救援模式。或者按Esc鍵,進入命令行模式,輸入linux rescue 。boot:linux rescue
如:
然後執行以下命令即可:
# chroot /mnt/sysinit
# grub-install --root-directory=/ /dev/sda
# exit
# reboot