grub (GRand Unifined Bootloader)
統一引導加載器
bootloader的類型
Windows: ntloader
Linux: LILO, GRUB
LILO設計之初,硬盤很小;沒有考慮到1024柱面之后,磁盤不能識別;
GRUB:用一個精巧的設計,將GRUB程序放在bootloader中,實現諸多功能的配置在一個單獨的分區之上;
grub 0.x: grub leagcy (CentOS 5,6)
grub 1.x: grub2 (CentOS 7)
MBR位于0磁道的0扇區
446Bytes:bootloader:提供一個可供用戶選擇的菜單,將指定的操作系統或不同版本的內核加載至內存中,內核自解壓展開,移交控制權給內核;
64Bytes: 存放分區表
2Bytes: 有效標識符:55AA表示有效;
grub是取代早期bootloader,僅在446字節(446個字符)中要實現的功能很薄弱;
GRUB工作流程
stage1: bootloader
stage1_5: MBR后的扇區,提供普通分區的驅動;并將此分區作為grub的根,grub訪問其下的所有文件從/起始;
stage2:找到grub所在的普通分區,根據其配置提供眾多功能;
GRUB功能
提供菜單:編輯操作及輸出一個命令行接口
隱藏菜單
保護機制:加載內核、編輯菜單
GRUB命令行接口
grub> root 指明grub的根分區在哪個磁盤的哪個分區;提供內核、inird及grub配置文件;
grub> kernel /vmlinuz-VERSION-release grub的根提供的內核;即本次要加載的內核;后可接參數;
grub> initrd /initrd-VERSION-release grub的提供的initrd;即提供給內核的驅動,用于加載根文件系統;
grub> boot 引導;
kernel cmdline可以接的參數:
ro root=/paht/to/device 只讀掛載路徑對應的根設備;注意:此處為initrd驅動的根文件系統;
init=/sbin/init 內核關聯根文件系統后,第一個啟動的程序
selinux=0 表示本次啟動不啟動selinux
quiet 不輸出信息
GRUB配置文件
/boot/grub/grub.conf <– /etc/grub.conf
或 /boot/grub2/grub.conf <– /etc/grub2.conf
GRUB配置文件格式
default=0 默認引導第1個菜單
timeout=5 等待用戶選擇的時長;
splashimage=(hd#,#)/PATH/TO/PIC_FILE.xpm.gz 菜單背景圖片;
hiddenmenu 隱藏菜單
password –md5 STRING: 菜單編輯認證;
title STRING 標題,有空格無須對其加引號;
root (hd#,#) grub1_5驅動的文件系統所在分區;#號從0開始編號;
kernel /PATH/TO/VMLINUZ_FILE: grub識別的根下的內核文件;
initrd /PATH/TO/INITRAMDISK_FILE:grub識別的根下的initramfs文件;設定提供根文件系統驅動的路徑;
password –md5 STRING: 啟用內核或操作系統認證;
GRUB相關故障排除
沒有stage1
BIOS不會將其設定為啟動設備;
(1) 安裝bootloader
stage1損壞:
開機黑屏
(1) 光盤救援模式:
(2) 借助于有bootloader的設備,引導系統
沒有stage2或stage2文件損壞:
用grub命令行,指定grub的根分區、分區下的內核及inird文件,即可啟動;并在啟動系統后修復即可;
重裝GRUB
~]# grub-install –root-directory=/PAHT/TO/BOOT /dev/DEVICE
–root-directory= boot目錄所在目錄;即為要安裝grub的目錄;
/dev/DEVICE 給哪個設備安裝Bootloader,不是分區;
修復GRUB
~]# grub
grub> root (hd#,#) grub目錄安裝所在的磁盤及分區;
grub> setup (hd#) grub目錄安裝所在的磁盤;
光盤啟動引導補充
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/89056
原來這里還有道友!