Grub2配置詳解

一、grub.cfg詳解(紅色爲說明)

grub.cfg 默認爲只讀,要修改前先設爲可寫 
sudo chmod +w /boot/grub/grub.cfg

set default=0
#默認爲0
insmod jpeg
#添加jpg支持,如要使用png或tga文件做背景,加上 insmod png或insmod tga
insmod ext2
#除了用作啓動的分區外,其他分區格式可在menu底下再添加
set root=(hd0,7)
#設定root分區
search --no-floppy --fs-uuid --set f255285a-5ad4-4eb8-93f5-4f767190d3b3
#設定uuid=****的分區爲root,和上句重複,可刪除
# 以下爲終端配置
if loadfont /usr/share/grub/unicode.pf2 ; then
#設置終端字體,unicode.pf2支持中文顯示
set gfxmode=640x480
#設置分辨率,默認爲 640x480,可用800x600,1024x768,建議跟你想設定的圖片大小一致
insmod gfxterm
#插入模塊 gfxterm,支持中文顯 示,它還支持 24 位圖像
insmod vbe
#插入 vbe 模塊,GRUB 2 引入很多模塊的東西,要使用它,需要在這裏加入
if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don't
# understand terminal_output
terminal gfxterm
#設置 GRUB 2 終端爲 gfxterm
fi
fi
set timeout=10
background_image (hd0,7)/boot/images/1.jpg
#設置背景圖片
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=cyan/black
#這兩行爲 Debian 下的菜單顏色設置,如果默認的話,你會發現背景完全被藍色擋住了,你需要修改 blue 爲 black,這樣背景就會出現 
### END /etc/grub.d/05_debian_theme ###

# 10_linux 爲自動添加的當前root分區linux引導項
### BEGIN /etc/grub.d/10_linux ###
#菜單項,要包括 menuentry 雙引號" " 和大括號 { }才完整,否則不顯示菜單
menuentry "Ubuntu, Linux 2.6.31-9-386" {
insmod ext2
set root=(hd0,7)
search --no-floppy --fs-uuid --set f255285a-5ad4-4eb8-93f5-4f767190d3b3
#這句與set root=(hd0,7)重複,可刪除
linux /boot/vmlinuz-2.6.31-9-386 root=UUID=f255285a-5ad4-4eb8-93f5-4f767190d3b3 ro quite splash
#不喜歡看到一長串的, roo=UUID=***可用root=/dev/sda7代替
initrd /boot/initrd.img-2.6.31-9-386
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
linux16 /boot/memtest86+.bin
}
### END /etc/grub.d/20_memtest86+ ###

# 自動添加存在於其他分區的系統引導項
### BEGIN /etc/grub.d/30_os-prober ###
#windows 啓動菜單
menuentry "Windows Vista (loader) (on /dev/sda1)" {
insmod ntfs
#windows格式爲ntfs,或爲fat32改爲 insmod fat 
set root=(hd0,1)
search --no-floppy --fs-uuid --set ece067d2e067a196
#可刪除
#grub2比較先進的地方就是如果發現windows啓動是通過ntldr 引導的,定爲2000/xp/2003,會在這加上 drivemap -s (hd0) ${root} ,作用相當於grub的map,可正常啓動非第一硬盤的xp/2003系統。
chainloader +1 
}
# 查找到其他分區上的linux系統並自動添加 
menuentry "Ubuntu karmic (development branch) (9.10) (on /dev/sda3)" {
insmod ext2
set root=(hd0,3)
search --no-floppy --fs-uuid --set 4d893970-0685-44ed-86b3-1de45b2db84a
linux /boot/vmlinuz-2.6.31-9-generic root=/dev/sda3
initrd /boot/initrd.img-2.6.31-9-generic
}
#若存在macos會自動在這裏添加。
### END /etc/grub.d/30_os-prober ###
# 以下爲手動添加的菜單項
### BEGIN /etc/grub.d/40_custom ###
menuentry "CDLinux"{
set root=(hd0,8)
linux /CDlinux/bzImage root=/dev/ram0 vga=791 CDL_LANG=zh_CN.UTF-8
initrd /CDlinux/initrd
}
### END /etc/grub.d/40_custom ###

# 手動添加時,硬盤編號從0開始(hd0),主分區編號從1開始(hd0,1),邏輯分區從5開始(hd0,5)

二、grub2終端部分命令介紹
在出現選擇菜單時,按C進入終端命令行模式,按E進入當前菜單項編輯模式(和grub一樣),編輯中按Ctrl + C退出,按Ctrl + X 以編輯內容啓動。

1. help
查看命令用法,顯示所有可用命令
help search 
search 命令用法
2. ls
列出當前的所有設備。如 (hd0) (hd0,1) (hd0,5) (hd1) (hd1,1) (hd1,2) .......
ls -l
詳細列出當前的所有設備。對於分區,會顯示其label及uuid。
ls /
列出當前設爲root的分區下的文件
ls (hd1,1)/
列出(hd1,1)分區下文件
3. search
search -f /ntldr
列出根目錄裏包含ntldr文件的分區,返回爲分區號
search -l LINUX
搜索label是LINUX的分區。
search --set -f /ntldr
搜索根目錄包含ntldr文件的分區並設爲root,注意如果多外分區含有ntldr文件,set 失去作用。
4. loopback
loopback命令可用於建立回放設備,如
loopback lo0 (hd1,1)/abc.iso

可以使用lo0設備來訪問abc.iso裏的內容,比如說,可以從abc.iso裏的軟盤映像中啓動
loopback lo0 (hd1,1)/aa.iso
linux (lo0)/memdisk
initrd (lo0)/abc.img

要刪除某一回放設備,可以使用-d參數:
loopback -d lo0
5. set
使用set可以設置變量的值
set root=
set timeout=
需要調用變量的值時,使用${AA},如set root=(hd1,1)
則${root}=(hd1,1)
6. pager
分頁顯示。
set pager=1
滿頁時暫停,按space繼續
set pager=0
取消分頁
7. linux
linux取代grub中的kernel


三、
單linux系統或
硬盤安裝時iso放在C盤,umount /isodevice引起的誤認爲單系統
不能出現菜單項的幾種處理方法。
1. 開機自檢後時按幾下shift鍵,可調出菜單項
2. sudo update-grub
重建grub.cfg,會發現新的系統而改寫grub.cfg,一般能出現菜單項。
3.如第二種方法不能解決,直接修改grub.cfg
把在### BEGIN /etc/grub.d/30_os-prober 中的這一段
if keystatus; then
if keystatus --shift; then
set timeout=-1
else
set timeout=0
fi
else
if sleep$verbose --interruptible 3 ; then
set timeout=0
fi
fi
刪除或修改三處set timeout=<大於0>

四、雙硬盤雙系統 Grub Loading時間過長的解決方案

grub2的boot.img設定root的uuid從第一分區開始搜索分區的/boot/grub下的模塊並加載, 如果linux分區處於第二硬盤甚至第三硬盤,會導致搜索時間過長而,出現菜單時間會長達10多秒。
對雙(多)硬盤的情況建議把grub安裝在ubuntu所在硬盤的mbr上,/boot分區或 / 分區 儘量靠前,並設該硬盤爲啓動盤,會大大縮短啓動時間。

五、grub2幾種修復方法

1. 雙系統重裝windows造成grub2被改寫的修復
方法一 grub4dos0.4.4
在Windows啓動項上加上grub4dos啓動(不多說了,看置頂貼),重啓選擇進入grub,在命令行下輸入(/boot單獨分區的去掉 /boot)
代碼:
     grub>find --set-root /boot/grub/core.img
grub>kernel /boot/grub/core.img
grub>boot

進入grub2菜單,進入系統後再執行
代碼:
    sudo grub-install /dev/sd?

方法二 進入Livecd 後修復(感謝billbear)
引用:
sudo -i
mount 你的根分區 /mnt
mount 你的/boot 分區 /mnt/boot #如果有的話
#掛載你其他的分區,如果有的話
# 重建grub到sda的mbr
grub-install --root-directory=/mnt /dev/sda


2. 由於root分區uuid改變造成的不能正常啓動,只能進入grub rescue模式的修復

代碼:
grub rescue>set
grub rescue>prefix=(hd?,?)/grub
grub rescue>root=hd?,?
grub rescue>set root=hd?,?
grub rescue>set prefix=(hd?,?)/boot/grub
grub rescue>set
grub rescue>root=hd?,?
grub rescue>prefix=(hd?,?)/boot/grub
grub rescue>insmod /boot/grub/normal.mod
grub rescue>normal

這時就可以調出 /boot/grub/grub.cfg,修改相應uuid,
改到命令行下
grub>insmod /boot/grub/linux.mod
grub>set root=hd?,?
grub>linux /boot/vmlinuz-*** root=/dev/sd??
grub>initrd /boot/initrg.img-****
進入系統
hd?,? 是grub文件所在分區 sda? 是/分區。

3. grub模塊和配置文件grub.cfg受損無法啓動時修復

Livcd啓動進入試用
引用:
sudo -i
mount 你的根分區 /mnt
mount 你的/boot 分區 /mnt/boot #如果有的話
# 掛載你其他的分區,如果有的話

# 重建grub到sda的mbr
grub-install --root-directory=/mnt /dev/sda

# 重建grub.cfg
mount --bind /proc /mnt/proc
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
chroot /mnt update-grub
umount /mnt/sys
umount /mnt/dev
umount /mnt/proc


六、 一些補充說明

1. chainloader
grub2將支持 chainloader /file 的用法。
目前支持的文件只有 grub2 的 boot.img 和 grub4dos 的grldr 和 grub.exe。希望正式版能支持 ntldr bootmgr peldr 等文件。

2. drivemap
drivemap 兼容 grub 的 map,主要用於只能從 (hd0) 引導啓動的系統如 win2000 xp 2003,可以象 map 用法一樣如:

menuentry "Windows XP" {
insmod ntfs
drivemap (hd0) (hd1)
drivemap (hd1) (hd0)
set root=(hd1,1)
chainloader +1
}

實際上 drivemap 有了更方便的用法:
menuentry "Windows XP" {
insmod ntfs
set root=(hd1,1)
drivemap -s (hd0) ${root}
chainloader +1
}

3. grub2 引導軟盤img鏡像啓動
比如要加載(hd1,1)根目錄下的 a.img 鏡像,先把 memdisk 從 memdisk.gz 中解壓出來,用法是:
linux (hd1,1)/memdisk #鏡像文件超過2.88M要加上 c=* h=* s=*
initrd (hd1,1)/a.img
boot

現在有bug,加載memdisk會自動重啓,beta2還沒修正。

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