grub作為linux的引導程序,有其獨特的風格
先說Linux的啟動過程
加電自檢-->BIOS(決定啟動次序)-->MBR(bootloader(grub))-->kernel-->init(/etc/inittab)-->rc.sysinit
MBR為0道扇區上的512個字節 Bootloader位於MBR的前446字節
grub 是兩段式的引導
stage1 MBR 負責引導第二個階段
stage2 讀取/boot/grub/中的文件
解讀/etc/grub.conf
default=0 //默認啟用系統的編號順序
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz //因為此系統上的boot目錄為一個單獨的分區,grub則直接進入此分區找到grub目錄,所以沒有指明 boot 目錄,但如果boot目錄在根分區上,則grub就直接進入根分區,找到boot目錄下grub
目錄後,那麼此時需要指明boot目錄
hiddenmenu
password --md5 $1$FSUEU/$uhUUc8USBK5QXc.Bf //#grub-md5-crypt 加密
title外的password表示進入grub編輯模式需要輸密碼,可防止用戶修改管理員密碼而取得管理員權限
title Red Hat Enterprise Linux Server (2.6.18-164.el5) //用於指明同個系統的不同內核或不同的操作系統
root (hd0,0) //grub所使用的根(grub引導過程中內核中的驅動還沒有啟動,無法識別文件系統,grub就以hd來標識磁盤,第一個0為 磁盤號,第二個0為分區號,grub則把它設為文件訪問的起始點)
kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/vol0/root rhgb quiet
##因為boot是一個獨立分區,那麼grub就把此分區當作‘根分區’/,並不同於文件系統中的根
##和上面的解釋一樣 ,如果boot是根分區上的一個目錄,這裡就要寫成/boot/vmlinuz-2.6.18-164.el5,
##記住不能以操作系統的眼光來對待它
## ro 只讀
## root=/dev/vol0/root 表示操作系統的根文件系統
## quit 靜默方式運行
initrd /initrd-2.6.18-164.el5.img
##因為kernel加載根是需要驅動的支持,而驅動又放在了根中models 這個目錄中,initrd則提供了所有kernel所
需要的驅動,那麼kernel就跳過了根,從而驅動文件系統,進而加載根文件系統
title Install Red Hat Enterprise Linux 5
root (hd0,0)
kernel /vmlinuz-5 ks=http://172.16.0.1/workstation.cfg ksdevice=eth0 noipv6
initrd /initrd-5
password --md5 $1$FSUEU/$uhUUc8USBK5QAXc.BfW4m. //title內的password表示進入此kernel時需要密碼
二、如果/boot/grub/grub.conf 不幸丟失,系統找不到此文件時,則可手動添加
grub>root (hd0,0)
grub>kernel /vmlinuz-2.6.18-164.el5 ro
grub>initrd /initrd-2.6.18-164.el5.img
grub>boot
則可引導系統了
三、使用grub-install命令在磁盤上安裝Bootloader
新增一塊磁盤
dd if=/dev/zero of=/dev/sdb bs=512 count=1 //將磁盤的前512字節空間充零
為boot分區分配100M的空間
echo '
n
p
1
+100M
w' |fdisk /dev/sdb
格式化為ext3
#mkfs -t ext3 /dev/sdb1
#mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
使用grub-install磁盤上安裝Bootloader
#grub-install --root-directory /mnt /dev/sdb ##因為是在磁盤上安裝,不需要指明/mnt/boot路徑,直接/mnt Bootloader會安裝在boot目錄中
新開一台虛擬機 將這塊磁盤掛上,有 grub> 提示符則表明安裝成功
grub-install會在boot目錄中創建grub目錄,生成如下文件
e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 stage2_eltorito xfs_stage1_5
fat_stage1_5 jfs_stage1_5 stage1 ufs2_stage1_5
ffs_stage1_5 minix_stage1_5 stage2 vstafs_stage1_5
/usr/share/grub/i386-RedHat目錄中存放的有這些文件 可通過cp 將這些文件拷貝到grub中 達到同樣的效果
那麼如果再為這個磁盤分區,並把kernel 和init,rc.sysinit ,拷到相應的目錄中去 就是我們自己構建的Linux了