原文出處:http://www.cnblogs.com/ini_always/archive/2011/04/08/2009654.html
在上一篇拙作中,本人賣了一個關子,其實這個很簡單,如果你堅持看完https://help.ubuntu.com/community/Grub2這個介紹GRUB2的部分,你就已經全懂了,或者看下面這部分,你也會懂的。 ^_^
下面是我對這個頁面選擇性地進行的翻譯(另外一部分沒有翻譯是因爲我覺得對常規用戶用處不大。如果你需要的功能在下面的翻譯中沒有找到,請移步前面的網址去找找看有沒有想要的答案 ^_^)。
另:感覺這個頁面貌似是好幾個人合作寫的,很多地方前後重複,而且還有些地方前後衝突,不過不影響閱讀,更不影響用戶把自己的電腦當小白鼠進行試驗~~~ :D
=================這裏是華麗的分界線=================
GRUB2指GRUB 1.98或者更高的版本,GRUB 0.97版本則被稱爲GRUB。GRUB是GRand Unified Bootloader的簡寫,從ubuntu9.10(Karmic Koala)開始,GRUB2就成爲其默認的啓動加載器(boot loader),負責在開機的時候引導不同的操作系統(如果你的電腦是多系統的話)。可以用grub-install -v來檢測GRUB的版本。GRUB 1.99版本將會作爲ubuntu11.04默認的啓動加載器,這裏講的主要是針對GRUB 1.98版本。
改進
GRUB2相對於GRUB的主要新特性包括:
- 腳本已經支持條件語句和函數
- 動態模塊載入
- 救援模式
- 用戶自定義菜單
- 主題
- 圖形啓動菜單和提升的splash capability(這個我真不知道該怎麼翻譯)
- 直接從硬盤啓動LiveCD ISO映象
- 新的配置文件結構
- 非x86平臺支持(如PowerPC)
- UUID的通用支持(不只是ubuntu)
GRUB vs GRUB2
GRUB2默認的菜單和GRUB看起來是一樣的,但在這相同的表面之下,兩者卻擁有衆多的不同。
- 如果只有一個ubuntu系統的話,GRUB2將直接引導至login提示界面或者直接進入桌面,不會再顯示菜單
- 在啓動過程中按住Shift來顯示菜單(GRUB則是按ESC)
- 不再有/boot/grub/menu.lst文件,取而代之的是/boot/grub/grub.cfg文件
- 就算是root用戶,也不建議編輯/boot/grub/grub.cfg主菜單文件
- 如果有系統更新,內核的添加或者移除,又或者用戶運行update-grub命令,則grub.cfg文件就會被重新寫入
- 可啓動的內核清單是自動從/boot目錄裏的文件生成的,並不是手動編輯清單文件生成的,可以運行update-grub來更新啓動清單
- 用戶可以使用/etc/grub.d/40_custom這個自定義文件,這個文件裏面用戶可以放置他們自己的操作系統引導項
- /etc/default/grub是用來改變啓動菜單的配置文件
- 有很多文件可以配置啓動菜單,/etc/default/grub,以及/etc/grub.d/文件夾裏面的所有文件
- 分區的數字順序發生了改變,以前第一個分區是0,現在是1。但現在第一個設備仍然是hd0,儘管這是可以在/boot/grub/device.map裏面改變的
- 不管update-grub是不是被執行過,都自動搜索其它的操作系統,比如windows
- 配置文件改動後必須運行update-grub命令纔會生效
安裝
這部分就省略了,因爲從9.10開始就是GRUB2了,我想應該沒人還在用9.04以前的版本,如果需要請前往原文觀摩。 ^_^
文件結構
GRUB2使用了改進的文件和目錄體系,GRUB的menu.lst文件也不再被使用。
GRUB2主要使用的目錄和文件主要包括:
/boot/grub/grub.cfg
這個是最接近GRUB的/boot/grub/menu.lst的文件,它包含了GRUB2的啓動菜單信息,但不像menu.lst,它不建議被直接編輯。
- grub.cfg中每個部分的信息都使用###BEGIN描述,並且其中的信息是根據/etc/grub.d目錄下的文件生成的
- 由root用戶運行update-grub命令更新grub.cfg
- 如果有內核安裝或者移除,或者其它可以改變grub.cfg內容的更新,都會導致grub.cfg自動更新
- 默認的,不管什麼時候執行update-grub命令,grub.cfg都是“只讀”的,這是爲了防止用戶手動編輯它
用戶應該會注意到/boot/grub目錄下會有很多的.mod文件,這些代表modular nature(汗,真心不知道什麼意思),它們由GRUB按需要加載。
/etc/default/grub
- 這個文件包含了詳細的配置信息,具有root權限的用戶可以編輯它,並且執行更新指令後會將其合併到grub.cfg文件。
/etc/grub.d/(目錄)
- 這個目錄內的文件在執行update-grub命令期間會被讀取,它們包含的指令會被合併到grub.cfg文件
- 啓動菜單項在grub.cfg文件中的先後順序是由這個目錄中的文件執行順序來決定的,具有較小數字前綴的文件會先被執行,如10_linux會在20_memtest之前執行,字母開頭的文件會在數字開頭的文件之後執行
- 用戶自定義菜單項可以在40_custom中添加,或者在新建文件中添加,根據文件名,40_custom定義的菜單項會在菜單的最底端出現
- 在執行update-grub命令期間,只有可執行文件纔會生成信息到grub.cfg文件
該目錄默認的文件有:
- 00_header:設置啓動的一些特性,如圖形界面,默認啓動項,超時時間等。這些設置是由/etc/default/grub裏面的一些信息導入的。用戶通常不需要改變這個文件
- 05_debian_theme:這個文件設置啓動菜單的背景圖片,文字顏色,選擇高亮顏色及主題。由於默認沒有背景圖片,所以該文件設置了一個單色的主題來顯示啓動菜單。如何設置字體和背景圖片將會在下面的部分講到
- 10_hurd:定位Hurd內核,目前用不上該文件
- 10_linux:定位用戶硬盤上目前正在使用的操作系統內核。它取得內核的相關信息並且把這些內核的名字添加到啓動菜單。注意:如果你不想你所有的舊內核都出現在菜單上,那就把它們相關的文件從/boot裏移走
- 20_memtest86+:搜索/boot/memtest86+.bin並且把它添加到啓動菜單。目前這個選項出不出現在啓動菜單裏都無所謂。如果要禁止這個菜單項,把該文件裏的可執行代碼註釋掉,再運行update-grub即可
- 30_os-prober:這個文件搜索Linux和其它的操作系統。搜索的結果會加到grub.cfg裏面去。這個文件分成了四部分,分別代表了不同的操作系統類型:windows,Linux,OSX,Hurd。這個文件中的變量決定了菜單中最終顯示的名字。如果用戶熟悉腳本編程,就可以改變這些變量值來改變菜單項的顯示名稱。該文件默認忽略任何處理dmraid信號的風險,這可以利用命令dmraid -r -c列舉出來
- 40_custom:這個文件是一個添加用戶自定義菜單項的模板,文件中"exec tail -n +3 $0"這一行以下的內容,包括註釋,在執行update-grub後都會被沒有改動地直接添加到grub.cfg文件
配置GRUB2
/etc/default/grub
這個是可以讓用戶修改來改變GRUB默認設置的配置文件,以下是可以由用戶編輯的變量:
- GRUB_BACKGRUOND:設置背景圖片,要求輸入圖片的全路徑
- GRUB_DEFAULT:設置默認的菜單項,它的值可以是數字,可以是完整的名稱引用,也可以是"saved"
- GRUB_DEFAULT=0:用菜單項在grub.cfg中出現的位置來設置默認菜單項,第一個菜單項是0,第二個是1,依此類推
- GRUB_DEFAULT="xxxx":一個準確的菜單項名字,包括引號,這種情況下,菜單項在grub.cfg中的位置可以不用考慮,例如:GRUB_DEFAULT="Ubuntu, Linux 2.6.31-9-generic"
- GRUB_DEFAULT="saved":(略)
- GRUB_SAVEDEFAULT:如果設置成true,則下次啓動的時候,就會選擇上次啓動選擇的系統作爲默認的啓動項(如果/boot目錄在LVM分區或者RAID上,則這一項不起作用)(LVM:邏輯分區;RAID:磁盤陣列)
- GRUB_HIDDEN_TIMEOUT:這個用於設置一個不出現GRUB2菜單的畫面的顯示時間,在此期間,用戶可以按任意鍵讓菜單顯示出來(後面的部分略)
- GRUB_HIDDEN_TIMEOUT_QUIET:(略)
- GRUB_TIMEOUT=10:設置菜單的顯示時間,設置成-1的話就會一直顯示菜單,除非用戶手動選擇了一個操作系統啓動
- GRUB_DISTRIBUTOR:(略)
- GRUB_CMDLINE_LINUX:(略)
- GRUB_CMDLINE_LINUX_DEFAULT:(略)
- #GRUB_TERMINAL:取消這行註釋,可以禁用圖形終端,回到字符界面
- #GRUB_DISABLE_LINUX_UUID:如果不想在啓動時GRUB傳遞"root=UUID=xxx"的參數給即將引導的Linux內核的話,可以取消這行註釋
- #GRUB_GFXMODE=640x480:設置啓動菜單的分辨率,但設置的分辨率要顯卡支持才行
- 小竅門:把分辨率設置得和操作系統一樣可以減少開機時間
- 用戶可以添加顏色深度,儘管這不是必需的,例如:1280x1024x32
- 用戶可以設置多個分辨率,如果GRUB2不能使用第一個分辨率,它會使用第二個,多個分辨率用逗號隔開,如:1280x1024x16,800x600x24,640x480
- 如果使用了背景圖片,注意分辨率要和背景圖片的尺寸一樣
- 如果調整分辨率後更新grub.cfg時出現了"not found"的消息提示,試着改變或者增加顏色深度
- 在GRUB2的命令行使用vbeinfo命令會顯示可用的分辨率列表,在顯示啓動菜單的時候敲一下"c"鍵就可以進入GRUB2的命令行
- 如果這行被註釋了或者用戶設置的分辨率沒有一個是可用的話,GRUB2就會使用/etc/grub.d/00_header中的默認設置
- GRUB_DISABLE_LINUX_RECOVERY:取消註釋就可以禁掉啓動菜單中的“恢復模式”菜單項
- GRUB_INIT_TUNE="480 440 1":取消註釋就可以在啓動菜單顯示之前發出蜂鳴聲
GRUB_DISABLE_OS_PROBER=true:加了這個後,就不會再檢查其它分區的其它系統,包括windows,Linux,OSX,Hurd。
Boot Display Behavior
GRUB2是在加載任何操作系統之前載入內存的,它是按最低需求載入的模塊化組件。菜單顯示的樣式由/etc/default/grub中的設置決定。
Initial Default
如果沒有檢測到別的操作系統, GRUB2會直接引導進入默認的操作系統,並且也不會顯示啓動菜單;如果檢測到其它操作系統的話,才顯示啓動菜單。Timed Display
啓動菜單將顯示預定的超時時間,如果超過預定的超時時間用戶沒有動作,就會啓動默認的系統。用戶可以通過上下箭頭來手動選擇操作系統,然後按Enter進入,一旦用戶有輸入,設定的超時時間倒計時就會停止。Hidden(略)
Saved(略)
Last Boot Failed or Boot into Recovery Mode
如果上次啓動失敗或者是以恢復模式啓動的,啓動菜單就會一直被顯示直到用戶作了選擇,前面設定的超時時間在這裏不起作用,要改變這個設置的話,需要修改/etc/grub.d/00_header文件裏的內容。用戶自定義菜單項(略)
背景圖片和主題
GRUB2設置背景圖片只需要兩步:選擇一幅圖像,然後選擇字體顏色。注意:設置背景圖片需要GRUB 1.98或者更高的版本,對應的ubuntu版本是10.04或者更高。
GRUB2的背景圖片由GRUB_BACKGROUND變量控制,打開/etc/default/grub文件,把這個變量修改成如下形式:
GRUB_BACKGROUND=/usr/share/images/desktop-base/moreblue-orbit-grub.png
把等號後面的路徑換成你的圖片的位置的正確路徑即可。
注意:tag,png,jpeg(僅限8位)可以使用,圖片顏色只能是RGB模式,索引模式的圖片則不能顯示。
設置好後,運行update-grub來更新grub.cfg,如果添加的圖片沒有問題,終端就會顯示出"Found background image..."的消息,如果沒顯示這條消息,就說明圖片設置不成功。
如果圖片不能正確顯示,試着檢查以下內容:
- /etc/default/grub中的路徑和文件名是否正確
- 圖片的尺寸是否和設置的分辨率相配,格式是否正確(tga,png,8位jpg)
- 圖片顏色模式是RGB模式,而不是索引顏色
- /etc/default/grub中的console模式是否啓用
- 在修改/etc/default/grub後必須要執行update-grub以更新grub.cfg文件
設置菜單字體和高亮顏色
這些設置包含在/etc/grub.d/05_debian_theme文件裏面,具體要修改哪些部分依賴於是否選擇了背景圖片。
如果選擇了背景圖片:
- 定位到和"if test -e ${f}; then"對應的else分支,改變WALLPAPER爲GRUB_BACKGROUND對應的路徑。被選中的菜單項的顏色由COLOR_HIGHLIGHT決定,未被選中的菜單項的顏色由COLOR_NORMAL決定。
如果沒有選擇背景圖片:
- 修改set_mono_theme部分:被選中的菜單項的顏色由menu_color_highlight決定,未被選中的菜單項的顏色由menu_color_normal決定,例如:set menu_color_normal=black/black,第一個顏色是文字顏色,第二個顏色是背景顏色;如果第二個顏色選擇的是black,那麼高亮的行會成爲透明的,並且只有文字會改變顏色。
小提示:black是GRUB2默認的透明顏色,如果使用了背景圖片,請只改變第一個顏色而不要改變第二個(如:xxxxx/black),如果改變了第二個顏色,那麼背景顏色會覆蓋在背景圖片上面。
GRUB2可用的顏色有:black, blue, brown, cyan, dark-gray, green, light-cyan, light-blue, light-green, light-gray, light-magenta, light-red, magenta, red, white, yellow.
小提示:爲了省去重啓電腦來檢查顏色設置的麻煩,用戶可以在啓動時進入GRUB2命令行進行設置,並且可以立即看到這些改變。
- 重啓,在GRUB2的菜單出來的時候,按c鍵進入GRUB2的命令行
- 試驗不同的顏色搭配,採用如下命令
- set color_normal=第一種顏色/black 或者 set color_highlight=第一種顏色/第二種顏色,文字顏色會立即改變
- 如果試驗完成,按ESC回到啓動菜單
- 如果不滿意,再到命令行繼續試驗
- 記住你想要的顏色搭配,進入系統後編輯/etc/grub.d/05_debian_theme,把顏色設置成你剛經過試驗後覺得滿意的顏色
- 保存,執行update-grub更新grub.cfg文件