Linux系統--Linux的Grub應用

grub應用

1.Grub(bootloader):全稱爲:GRand Unified Bootloader

現在存在兩個版本:

grub 0.x: grub legacy

grub 1.x:grub2

2.grub的功能:

功能:提供一個菜單,允許用戶選擇要啓動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,並把系統控制權移交給內核;

3.grub legacy 有三個階段,分別是:

stage1,stage1_5stage2

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,同時會加載stage1stage1會嘗試讀取隨後扇區的stage1_5階段,stage1_5階段會幫助stage1中的bootloader識別statge2所在的分區上的文件系統,然後加載stage2所在磁盤分區,這個分區不但有stage2階段,還有內核和ramdisk.

stage2及內核等通常放置於一個基本磁盤分區,而不會放在一個複雜的磁盤分區上,因爲stage無法識別複雜的磁盤分區,如邏輯卷,軟raid等。這也是爲什麼要單獨創建一個簡單的boot分區,而系統跟/做一個邏輯卷。但並不意味着boot要單獨分區。

常用功能:

(1) 提供菜單、並提供交互式接口

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

c: 命令模式,交互式接口;

(2) 加載用戶選擇的內核或操作系統

允許傳遞參數給內核

可隱藏此菜單

(3) 爲菜單提供了保護機制

爲編輯菜單進行認證

    爲啓用內核或操作系統進行認證

4.grub的交互式接口:

在系統啓動時會有timeout用戶選擇的時長,按Enter鍵會進入一下界面(菜單選項):

wKioL1YJCbuxY82KAAEjTI3xv0s007.jpg

grub如何識別設備:

(hd#,#)

hd#:表示第幾塊磁盤

#:表示第幾塊分區

(1)grub的命令行接口:

按下c鍵,會給出一個grub>命令行接口:

help令:獲取幫助列表

help KEYWORD:詳細獲取某個命令的幫助信息

        find (hd#,#)/Path/To/Somefile:查找某個磁盤分區上的某個文件

        wKioL1YJCxKinyiYAABBGqg4d8o229.jpg

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

Consolekernel 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 #在啓動時關閉或開啓SELinuxselinux=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

wKioL1YJDnrDpM1wAAFPMFJgH5U657.jpg

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查找stage2kernel文件所在設備分區;爲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配置文件:

        wKioL1YJD0GizetAAAGw0HQ_I5k273.jpg

重啓系統進行測試:

(2)進入單用戶模式

(1) 編輯grub菜單(選定要編輯的title,而後使用e命令); 

(2) 在選定的kernel後附加

    1, s, Ssingle都可以;

        (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命令行接口,在此處手動啓動系統:

wKiom1YJEBTB7D6cAACEJzN-rLI463.jpg

啓動系統之後,在/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)

eg:
wKiom1YJEOiBKsd3AAB9PZWIxfQ051.jpg

            wKiom1YJEUaA_LhnAADO9ZSJa7w407.jpg

3.grub已經損壞,系統已經關閉,無法啓動的情況下:

有以下修復情況:

a.把損壞的磁盤拆卸下來,裝載到一個好的系統上,在好的系統上利用grub-install命令進行對損壞的磁盤進行安裝grub.

b.利用鏡像文件進行修復:在系統啓動時,以cdrom方式啓動,啓動之後會有一個選擇界面的菜單,我們選擇Rescue installed system 一項,即緊急救援模式。或者按Esc鍵,進入命令行模式,輸入linux rescue 。bootlinux rescue

如:

wKiom1YJEgDhu1xDAAGHIYQ8rQM028.jpg

wKioL1YJEhewkQONAAB-g_yORiw360.jpg

然後執行以下命令即可:

# chroot /mnt/sysinit

# grub-install --root-directory=/ /dev/sda

# exit

# reboot

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章