2012-08-03

自訂 Grub2 on Ubuntu 9.10+

從 Ubuntu 9.10 開始,凍仁就沒什麼調校過開機選單,畢竟 Grub 與 Grub2 的差異真的不小,記得以前只要修改 /boot/grub/menu.lst 一個檔案即可,可現在的卻會動態產生這個檔案,也就是實際可編寫的設定檔改了位置也改了規則

不過 Grub2 最棒的地方是它會搜尋所有分割區上的作業系統,並納入開機選單,這點可是讓 Ubuntu 更人性化不少呢!至於 Grub2 不完美的部份嘛,那就自己小小調校一下了。

1. 一般設定

[ jonny@precise ~
$ sudo vi /etc/default/grub [Enter]
# 更改預設開機系統。
GRUB_DEFAULT=0

# 隱藏 grub 開機選單。
GRUB_HIDDEN_TIMEOUT=0

# 使用文字模式開機,裝上 NVIDIA 顯卡驅動的圖形化開機不夠美觀
GRUB_CMDLINE_LINUX_DEFAULT=""

# 自訂解析度。
GRUB_GFXMODE=800x600

1.2. 更新開機選單。
[ jonny@precise ~
$ sudo update-grub [Enter]
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-24-generic-tp
Found initrd image: /boot/initrd.img-3.2.0-24-generic-tp
Found linux image: /boot/vmlinuz-3.2.0-24-generic
Found initrd image: /boot/initrd.img-3.2.0-24-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
Found Windows 7 (loader) on /dev/sda2
Found Windows 7 (loader) on /dev/sdb1
Found Ubuntu 10.04.4 LTS (10.04) on /dev/sdb6
done

2. 進階設定

以下章節需對開機選單分割區系統配置觀念,搞砸也甭擔心,把 os-prober 啟用並更新開機選單即可。

2.1. 建立自訂選單

2.1.1. 參考 /boot/grub/grub.cfg 編寫 /etc/grub.d/40_custom,以下為凍仁自訂的開機選單。
[ jonny@precise ~ ]
$ sudo vi /etc/grub.d/40_custom [Enter]
 1 #!/bin/sh
 2 exec tail -n +3 $0
 3 # This file provides an easy way to add custom menu entries.  Simply type the
 4 # menu entries you want to add after this comment.  Be careful not to change
 5 # the 'exec tail' line above.
 6 
 7 # - Ubuntu 10.04 on /dev/sdb6
 8 menuentry "# ----" --class gnu-linux --class gnu --class os {
 9    insmod part_msdos
10    insmod ext2
11    set root='(hd2,msdos6)'
12    search --no-floppy --fs-uuid --set=root 3c4b2a07-a099-4e2a-8f35-c46162389986
13    chainloader +1
14 }
15 
16 # - Windows 7 on /dev/sda1
17 menuentry "Windows 7 (/dev/sda1)" --class windows --class os {
18     insmod part_msdos
19     insmod ntfs
20     set root='(hd1,msdos1)'
21     search --no-floppy --fs-uuid --set=root 9440E68540E66E04
22     chainloader +1
23 }
24 
25 # - Windows XP on /dev/sdb1
26 menuentry "Windows XP (/dev/sdb1)" --class windows --class os {
27         insmod part_msdos
28         insmod ntfs
29         set root='(hd2,msdos1)'
30         search --no-floppy --fs-uuid --set=root 2CDCBD4CDCBD1156
31         chainloader +1
32 }
33 
34 # - Ubuntu 10.04 on /dev/sdb6
35 menuentry "Ubuntu 10.04 (/dev/sdb6)" --class gnu-linux --class gnu --class os {
36    insmod part_msdos
37    insmod ext2
38    set root='(hd2,msdos6)'
39    search --no-floppy --fs-uuid --set=root 3c4b2a07-a099-4e2a-8f35-c46162389986
40    #linux /boot/vmlinuz-2.6.32-41-generic-tp root=UUID=3c4b2a07-a099-4e2a-8f35-c46162389986 ro
41    #initrd /boot/initrd.img-2.6.32-41-generic-tp
42    chainloader +1
43 }
44 

2.1.2. 停用 os-prober,也就是往後使用 update-grub 指令時將不會自動產生其他作業系統的設定。
[ jonny@precise ~
$ sudo vi /etc/default/grub [Enter]
GRUB_DISABLE_OS_PROBER=true

2.1.3. 更新開機選單。
[ jonny@precise ~
$ sudo update-grub [Enter]
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-24-generic-tp
Found initrd image: /boot/initrd.img-3.2.0-24-generic-tp
Found linux image: /boot/vmlinuz-3.2.0-24-generic
Found initrd image: /boot/initrd.img-3.2.0-24-generic
Found memtest86+ image: /boot/memtest86+.bin
done

相關連結:
os-prober
grub2 如何更改選單中的開機順序 ? | 酷學園

資料來源:
GRUB 2 中文指南 - Ubuntu 正體中文 Wiki