1. 程式人生 > >13.2、grub引導程序介紹

13.2、grub引導程序介紹

操作 otf selinux 配置 def table 進程 nac making

1、linux系統啟動流程:

post--->根據主板上ROM固件中的系統設置、判斷從哪個設備啟動--->讀取設備的第一扇區的前512字節(MBR),判斷用什麽bootloader引導系統到內存中--->啟動內核程序,有可能會借助於ramdisk--->將內核裝載在內存中,建立臨時根文件系統(rootfs),完成根系統切換--->啟動第一個用戶進程init(pid1:/sbin/init、/etc/inittab:設定默認運行級別、etc/init/*.conf:init的配置文件、初始化腳本參數及啟動對應級別下的服務)--->啟動終端


2、GRUB(bootloader):grand unified bootloader

grub0.x:grub legacy(centos5/6)

grub1.x:grub2


3、grub legacy:此版本的grub分為三個階段

stage1:引導安裝在MBR中的引導程序(bootloader)

stage1_5:MBR之後的扇區,讓stage1中的bootloader能識別stage2所在分區上的文件系統

stage2:存放在磁盤上的grub(存放位置:/boot/grub),grub的配置文件:/boot/grub/grub.conf,在etc目錄下有此文件的連接文件:/etc/grub.conf,如下:

[root@localhost ~]# ll /etc/grub.conf

lrwxrwxrwx. 1 root root 22 Dec 31 20:14 /etc/grub.conf -> ../boot/grub/grub.conf

[root@localhost ~]#

註意:stage2階段及內核通常放置於同一個磁盤分區。

grub.conf的配置示例:

[root@localhost boot]# cat grub/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/VolGroup-lv_root

# initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-358.el6.x86_64.img

[root@localhost boot]#


4、stage2 grub的作用:

①、提供菜單,並提供交互命令接口

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

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

②、加載用戶選擇的內核或操作系統

允許傳遞參數給內核

可隱藏此菜單

③、為grub菜單提供了保護機制

為編輯菜單進行認證

為啟動內核或操作系統進行認證


5、grub根介紹:

grub一般放在的目錄下/boot/grub,那麽/boot這個目錄是否單獨分區就直接決定了grub所在根(/)的位置,

如果一塊磁盤上分了兩個區a和b,分區a單獨給boot用(即存在grub、vmlinuz),分區b單獨給根(/)用,那麽/boot/grub的根就是磁盤分區a,此時grub的根即為分區a;

如果一塊磁盤上就分了一塊區,並將grub、vmlinuz放置於/boot下,那麽此時grub的根為/boot,


boot被做成單獨的簡單分區,而根(/)被放在邏輯卷中,即boot可以不使用邏輯卷,可以是單獨分區,centos5/6默認是將根(/)放在邏輯分區上的。

註意:grub不能訪問軟raid、邏輯卷等復雜操作。


6、grub識別設備的方法實現:

(hd#,N)

hd:hardware disk,硬盤

#:第#塊磁盤,用數字表示,從0開始編號

N:硬盤的第N個分區,用數字表示,從0開始編號

如:(hd0,0):表示第一塊磁盤的第一個分區,註意“()”括號必須寫,固定格式。


7、grub的命令行接口

help:獲取命令列表

help KEYWORD:獲取特定命令的使用幫助

find:搜索磁盤上的文件;格式:find(hd#,N)/PATH/TOSOMEFILE

如:find(hd0,0)/vmlinuz-2.6.32-504.el6.x86_64

root (hd#,N):設定(hd#,N)為grub的根,即設置哪塊磁盤哪個分區為根,此時可以用find直接去查找文件,如:find /vmlinuz-2.6.32-504.el6.x86_64

kernel /PATH/TO/SOMEFILE:設定本次啟動時用到的內核文件在哪裏,內核文件通常命名為linuz,z表示壓縮;

kernel除了指定內核文件位置之外,還可以添加許多內核支持使用的命令參數,如:init=/bin/init,selinux=0等等

initrd /PATH/TO/SOMEFILE:用來指ramdisk文件在哪裏,即設定為選定的內核提供額外文件的ramdisk,需要註意的是:ramdisk的版本號與內核的版本號必須完全匹配

boot:引導啟動選定的內核


grub.conf的配置示例:

[root@localhost boot]# cat grub/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/VolGroup-lv_root

# initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0 //啟動的默認菜單項,即title的編號,默認從0開始編號,0、1、2、3....

timeout=5 //菜單項默認顯示時間

splashimage=(hd0,0)/grub/splash.xpm.gz //grub菜單的背景圖片,640*480的14位圖

hiddenmenu //隱藏菜單

password [--md5] 12345678 //定義編輯菜單的密碼認證,--MD5可選

title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64) //定義菜單項,即開機顯示的菜單選項

root (hd0,0) //設定grub根所在位置

kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet ///vmlinuz-2.6.32-358.el6.x86_64設定啟動的內核文件,root=/dev/mapper/VolGroup-lv_root設定真正的根文件系統位置

initrd /initramfs-2.6.32-358.el6.x86_64.img //設定與內核匹配的ramdisk文件

password [--md5] 12345678 //啟動選定內核或操作系統是的密碼認證

[root@localhost boot]#



註意:可以用grub-md5-crypt命令生成密碼密碼


8、進入單用戶模式:

①、編輯grub菜單(選定要編輯的title,然後使用“e”命令)

②、在選定的kernel後附加:數字1或s或S或single,這幾個參數都可以實現進入單用戶模式。

③、在kernel所在行鍵入“b”鍵,進入單用戶


grub配置文件丟了,會顯示grub提示符,此時只需要啟動系統,然後編輯一個grub

如果grub文件壞了,如grub stage1壞了,只要bootloader壞了,磁盤上所有系統都將無法引導,此時只能修復bootloader(如:重新安裝grub)

重新安裝grub的命令:grub-install


9、











13.2、grub引導程序介紹