英文文件:Grub2,由版友elmaz翻譯 GRUB 2 是 Ubuntu 9.10 (Karmic Koala) 的預設開機載入和管理程式,並在 10.04 以後於許多作業系統中使用。在電腦開機時 GRUB 2 將顯示選單等待使用者輸入或是自動將控制權轉移到作業系統核心。 在這份指南中,GRUB 2 版本為 1.98 或更新版。傳統 GRUB (0.97 版) 將以 GRUB 稱之。 注意:當系統中同時存在多個 GNU/Linux 發行版,請小心其他的發行版(特別是 OpenSuse 和 Fedora)並不一定會轉移至 Grub 2,而使得 Grub 2 的設定變為複雜。 GRUB vs GRUB 2功能增進GRUB 2 與原本的 GRUB 相比之下主要增進功能包含:
重大改變GRUB 2 的預設選單對 GRUB 使用者而言看起來很熟悉,但是在相似的表面下實則有非常巨大的相異之處。
安裝GRUB 2 會在全新安裝的 Ubuntu 10.04 中預設安裝。若從 Ubuntu 9.04 及之前的版本升級,將保留原本的 GRUB,除非使用者選擇升級至 GRUB 2。 您可以透過 Synaptic 或是從命令列來檢查目前安裝的版本。打開終端機(應用程式 > 附屬應用程式 > 終端機)並輸入以下指令: grub-install -v GRUB 2 應該會顯示版本編號 1.96 或是更新(總之,版本號會大於1)。GRUB 版本為 0.97。 預設安裝GRUB 2 是 Ubuntu 9.10 及後續版本可開機光碟預設安裝的開機載入程式。
如果你已安裝 GRUB 2 ,則可以跳過下一小節,或返回目錄。 升級至 GRUB 2在 Ubuntu 9.10 或更早期的版本將 GRUB 升級至 GRUB 2 是相當容易的。 在安裝 GRUB 2 之前,更新套件庫索引以確保系統有最新的軟體套件列表。 sudo aptitude install grub-pc 1. 在第一個提示中,閱讀這些訊息,按下 tab 移至「OK」並按下 ENTER。 2. 在選擇「OK」後,下一個選項允許使用者在正常的 GRUB 選單中透過新增一個選項來測試 GRUB 2。 3. 下一步將會把來自 GRUB 的 menu.lst 的內容匯入「Linux command line」(如下圖),或許還會匯入至「Linux default command line」。 當安裝在一個全新磁碟上,您可能需要標記所選的分割區為可開機的(bootable)。 4. 當系統已安裝完成 GRUB 2,使用者可重新啟動並看到已更新的 GRUB 選單歡迎畫面。 4a. 在選定選項的時候 Jaunty 使用者可能會碰到一個「無法辨識的裝置字串 (Unrecognized device string)」Error 11。 5. 測試新選項並注意到 Grub 1.9x 版本編號(新增高亮度部份)。 6. 若 GRUB 2 選單功能正常,使用者可執行以下指令以升級至 GRUB 2: sudo upgrade-from-grub-legacy 在安裝期間,使用者可能會需要提供選擇,決定要將 GRUB 2 安裝在哪個裝置(硬碟)上。使用上/下鍵來選擇一個裝置(sda, sdb 等等),然後按下空白鍵來選定該裝置。 rm -f /boot/grub/menu.lst* 執行 rm 指令時請特別慎重。不正確輸入此指令可能導致系統檔案被永久的刪除。 檔案結構GRUB 2 包含一個完全修改過的目錄及檔案階層。GRUB 的 menu.lst 不再繼續使用。 欲找出 GRUB 2 安裝位置,使用者可以執行以下指令:
以下列出 GRUB 2 的主要檔案和目錄 /boot/grub/grub.cfg這是最相似於 GRUB /boot/grub/menu.lst 的檔案。(僅是相似,部份功能不同)
/etc/default/grub
具體的設定選項可以在此小節稍後的設定 GRUB 2 中找到詳細資訊。 /etc/grub.d/(目錄)在此目錄中的檔案將會於執行 update-grub 指令的時候讀取,並將其中的指令合併至 /boot/grub/grub.cfg 中。 在 update-grub 執行過程中,只有可執行檔會輸出至 grub.cfg。 在此目錄中的預設檔案為:
設定 GRUB 2設定變更通常會修改 /etc/default/grub 和 /etc/grub.d 目錄中的自訂檔案。/boot/grub/grub.cfg 檔不應直接編輯,你應該修改前述的檔案。 /etc/default/grub(檔案)主要設定檔。在安裝時,以下內容可由使用者變更:
額外可能包含的指令:
開機顯示行為在進入任何作業系統前 ,GRUB 2 會先執行。它的模組化元件只有在有必要的時候才會戴入 初始化預設值若沒有偵測到其他作業系統,GRUB 2 將會直接啟動預設的作業系統,而不顯示選單。若偵測到其他作業系統,GRUB 2 選單將會顯示。 逾時顯示
隱藏
儲存
上次開機失敗或開機至復原模式若上次開機失敗或開機至復原模式後,選單將會顯示出來直到使用者作出選擇。 自訂選單項目(此小節之後待校稿)GRUB 2 允許使用者建立自訂選單選項,在執行 sudo update-grub 時此選項將會自動加入主選單中。在 /etc/grub.d/ 中有一個空的 40_custom 檔可以使用,或是以其當作建立其他自訂選單的範本。這裡有一些自訂選單需要考量的地方: 檔案的名稱將會決定選項在選單中的排序。數字檔名會在前先執行,跟著是文字檔名。 10_linux 選項會出現在 30_os-prober 選項之前,然後跟著是 40_custom 選項,最後是 my.custom.entries。 使用者欲將自訂選項排在主選單第一位,可以將檔案命名為 06_xxx 如此一來它將會是選單中的第一筆選項。 檔案必須有可執行權限:sudo chmod +x /etc/grub.d/filename。 在 update-grub 指令未執行前,grub.cfg 的內容不會加入新增變更部份。 不像 grub.cfg,自訂檔案可以在任何時間編輯,不是唯讀權限,而且若想要的話可以以使用者為檔案擁有者。 自訂檔案是靜態的。當新的核心加入或移除時其內容將不會被變更(除非內容受使用者加入的命令稿影響)。 若自訂檔案將 menuentry 放在 grub.cfg 的最上方,使用者也許想要在執行 update-grub 後確認 /etc/default/grub 的 DEFAULT= 設定狀態。確保它依然指到想要的選單選項上。在計數時,/etc/default/grub 第一筆「選單選項」為 0。 建立自訂選單使用者可選擇由預設的 /etc/grub.d/40_custom 檔來修改或是建立一個新檔。建立一個新自訂選單最簡單的方法為從 /boot/grub/grub.cfg 複製一份使用中的選項。複製之後,在 40_custom 中的內容可剪裁為使用者想要的樣式。 根據預設的範例自訂檔(/etc/grub.d/40_custom)在 /etc/grub.d 中任何自訂檔的頭兩行應該是:
exec tail -n +3 $0 使用者可從 /boot/grub/grub.cfg 或是從傳統 GRUB 檔中複製已存在的選單選項。若使用者想從傳統 GRUB 的 menu.lst 中複製: 若使用者從 GRUB 升級至 GRUB 2 則也許可找到一份備份檔在 /boot/grub 目錄下。 以下來自 GRUB 選單中的項目必須修改才能作用: title 更改為 menuentry。此行必須由 { 作為結束 root 更改為 set root= kernel 必須改為 linux 任何 partition 命名(sda4, sdb6)必須修改,因為 GRUB 和 GRUB 2 的分割區計數方式不同。GRUB 2 中的第一個分割區為 1,不是 0。裝置依然由 0 開始計數。 仔細檢視任何作用中的 GRUB 2 menulist 條目格式以確保使用正確的格式。 一般 menuentry 建構規則: 第一行一定由 menuentry 開頭,並以 { 結束 大括號之間的區域就是會出現在 GRUB 2 的內容。依照需求編輯。 menuentry 最後一行一定是 } 每行最後面不要留下空白 set root= 行應該指到 GRUB 2 的 /boot 位址(sdXY) 在 linux 行中的 root 應指向系統分割區。 若 GRUB 2 無法找到指定的核心,試試看以裝置名稱來取代 UUID(例如:/dev/sda6)。 一份從 grub.cfg 複製來由使用者修改過的選項範例可能會看起來像這樣: menuentry "My Default Karmic" { set root=(hd0,1) search --no-floppy --fs-uuid --set cb201140-52f8-4449-9a95-749b27b58ce8 linux /boot/vmlinuz-2.6.31-11-generic root=UUID=cb201140-52f8-4449-9a95-749b27b58ce8 ro quiet splash initrd /boot/initrd.img-2.6.31-11-generic } 一份由網站上的指令將系統還原光碟(SystemRescueCD)安裝為硬碟版(在 sda8 上)的選項範例: menuentry "System Rescue CD" { set root=(hd0,8) linux /sysrcd/rescuecd subdir=sysrcd setkmap=us initrd /sysrcd/initram.igz } 一份連鎖載入另一個 GRUB 開機載入程式的選項範例: menuentry "Grub 1 Bootloader" { set root=(hd0.8) chainloader +1 } 備用模式Grub 2 可以被設定為若預設選單項目因某些原因而開機失敗時,退回至先前成功開機的選單項目。這個網頁(德文)可以找到一個範例稿以達成此目的。 命令列&救援模式使用者可以有數種方法來嘗試從失敗的開機中復原。如果選單依然可以使用,選單設定可以由使用者來檢視和修改。此外,若 GRUB 2 偵測到開機時因為 grub.cfg 的錯漏而無法將控制權轉移到所選擇核心的錯誤,它將會回復到救援模式。兩種方式都允許使用者藉由受限的命令列介面來復原為可用的系統。如果只有「Grub」字樣出現在螢幕頂端而沒有提示符號(存取命令列)或選單,參考從開機光碟重新安裝小節。 發現並解決問題: 如果你在閱讀此小節,你的作業系統也許遇到開機上的問題。以下段落將會詳述 GRUB 2 命令列功能的使用及編輯方法,以試圖將系統開機。GRUB 2 的其中一項進步就是從命令列中搜尋分割區內容的能力。若以下段落的指令無法使用,特別是伴隨著「無法找到(not found)」或是「核心必須先載入(the kernel must be loaded first)」的訊息,則使用以下指令來探索分割區。在 Ubuntu 中,/boot 目錄下通常都會包含至少一個「vmlinuz」核心和一個「initrd」 .img 檔案。在 /boot/grub 目錄下應該通常會包含一個「grub.cfg」以及許多「.mod」檔案。X 是磁碟,由 0 開始。Y 是分割區號碼,由 1 開始。在單一磁碟上一個乾淨的 Ubuntu 安裝中,主磁碟/分割區通常是 hd0,1。在單一磁碟包含 Windows 的多重開機環境下,一般通常位於 hd0,5。使用 ls 指令來查閱哪些是 GRUB 2 已知的磁碟/分割區。 欲探索 GRUB 2 的已知裝置,在 GRUB 2 選單中按「c」以進入命令列(如果還沒有進入的話): ls 顯示 GRUB 2 已知的磁碟/分割區。 ls (hdX,Y)/ 顯示指定磁碟/分割區下的 / 目錄內容。 ls (hdX,Y)/boot 顯示 /boot 目錄內容。例如:ls (hd0,5)/boot ls (hdX,Y)/boot/grub 顯示 /boot/grub 目錄內容。例如:ls (hd0,5)/boot/grub 開機時編輯選單若開機過程中選單無法正常顯示,按住 SHIFT 鍵讓電腦試著顯示 GRUB 2 選單。 當選單顯示後,按下任何鍵(ENTER 除外)來停止倒數計時並以上/下鍵選擇想要的項目。 按下「e」鍵進入所選選項的設定。 使用鍵盤來定游標位置。在此例中,游標已經被移動,因此使用者可以修改或刪除數字 9。 對任一行或每一行做單一或多處修改。不要使用 ENTER 來做行列間的移動。 可使用 Tab 鍵自動完成功能,這在輸入核心和 initrd 項目的時候特別好用。 當完成時,決定下一個步驟: CTRL-x - 以修改過後的設定開機(以高亮度強調) CTRL-c - 進入命令列來進行診斷、載入模組、修改設定等等。 ESC - 放棄所有修改並回到主選單 這些選擇也會列在螢幕底部作為提示。 命令列模式從主要 GRUB 2 選單畫面使用者可選擇按下「c」進入命令列模式。 這裡有一些好用的小訣竅和特性來使用 GRUB 2 命令列: 關閉開機影像也許會讓終端機更容易檢視。按下「c」進入命令列然後輸入: set color_normal=white/blue 或是任何你想使用的顏色組合。第二個選項使用「black」會保留選單的透明度,若使用者想使用實色當作背景色的話應該避免此選擇。 為了預防畫面捲動到螢幕最上方以外,首先執行 set pager=1,此設定動作類似終端機的「| more」指令。如此將允許一個全畫面的資料,並在按下「ENTER」鍵時才會繼續往下捲動。 輸入 help 可檢視所有指令的清單。輸入 help x 來檢視所有以「x」字母開頭的指令。Tab 鍵自動完成以及使用向上鍵來重複上一個指令與一般終端機動作相同。 TAB 自動完成功能非常的好用。在任何時間,若元件是獨一的,按下 TAB 鍵可以自動完成一項輸入,否則會顯示所有可用的選項。輸入一些額外的字元後再按下 TAB 可自動完成剩餘的部份。 一些好用的指令包括: 指令 結果 background_image 載入一個現存的背景影像。使用 tab 自動完成來協助輸入檔名! background_image=/usr/share/images/grub/ 然後用 tab 來顯示所有影像的清單。當初始測試開機影像時 很有用的指令。 cat 用來顯示目前檔案內容。 cat /boot/grub/grub.cfg, cat /etc/fstab help 檢視所有可用指令。輸入 help x 來取得一份以字母 x 開頭的指令清單。help xxx 取得關於 xxx 指令的資訊。此指令應該接在「set pager=1」指令之後,會讓螢幕顯示類 似終端機「| more」指令的行為,以預防捲動超過螢幕頂端。 ls 單獨使用,列出 GRUB 2 所知道的所有裝置,例如 (hd0) (hd0,1) 等等。使用 ls 來檢視可用的分割區。使用 ls /boot, ls /boot/grub 來檢視 /boot 和 /grub 目錄內容。 initrd 載入 initrd。 linux 載入 linux 核心。 loopback 把檔案掛載成裝置。loopback loop (hd0,2)/iso/my.iso lsmod 顯示已載入模組 reboot 重新開機 rescue 進入救援模式 set 顯示適當的環境變數。與其他結合,設定變數如 set gfxmode=640x480, set color_normal=cyan/black 在命令列模式中使用後面的指令來測試各種選單字型顏色。 vbeinfo 顯示可用的螢幕解析度。 使用命令列介面開機若使用者有開機上的麻煩但選單可用,最簡單的開機方法就是編輯現存的選單。參考開機時編輯選單。若 GRUB 2 尋找可用 grub.cfg 檔案失敗,它應會回復至 grub-rescue 模式。命令列提示符號會顯示 grub-rescue> 且將不會顯示選單。使用者可由此命令列才來嘗試手動輸入指令來開機至可用的系統。 若命令列提示符號沒有啟動,按下「c」來進入命令列模式。您將會看到 GRUB 2 提示符號: grub> 或 grub rescue> 若您在任何時間想要取消並重來,ESC 將會移除修改部份並讓使用者返回前一個選單。使用以下兩個指令來決定您想要開機的系統所在裝置(磁碟機)和分割區。 set 當輸入 set 且沒有附加項目時,此指令會顯示目前的 GRUB 2 設定。 ls 執行 ls 來查看 GRUB 2 認出的裝置。例如:(hd0) (hd0,1) (hd1,5)在此範例中 sda, sda1, sdb5 已被識別出來。 以最近使用的核心快速開機指令摘要*: set root=(hdX,Y) linux /vmlinuz root=/dev/sdXY ro initrd /initrd.img boot 詳細指令*: 每行完成後按下 ENTER。某些條目可能不會有回應。這是正常的。 如果執行這些指令時有「檔案未找到(file not found)」或類似的錯誤訊息,確認您使用正確的 X,Y 值。ls 指令能協助決定正確的值。一旦確認了 X,Y 值,執行以下指令: set prefix=(hdX,Y)/boot/grub 1*. set root=(hdX,Y) 輸入來自 ls 指令正確的 X,Y 值並按 ENTER。記住 GRUB 2 將第一個裝置算為 0,第一個分割區為 1。例如:若 Ubuntu 系統安裝在 sda5,輸入: set root=(hd0,5)
3. initrd /initrd.img 選擇最新的 initrd 影像。 4. boot 以選定的分割區最新的核心來開機。
set root=(loop0) linux /vmlinuz root=/dev/sdXY loop=/ubuntu/disks/root.disk ro 此變更並非永久性的。在成功的開機進入系統後使用者應執行 sudo update-grub 並觀察 GRUB 2 設定檔(/boot//grub/grub.cfg)。對於啟動主要 linux 核心的問題,確認檔案中在 [### BEGIN /etc/grub.d/10_linux ###] 段落的 search, linux, 和 initrd 行現在正確的指向正確位址。使用者也許需要重新安裝 GRUB 2(sudo grub-install /dev/sdX)。 手動開機到指定的核心若 在開機過程中 GRUB 2 選單無法編輯,在命令列下還是有可能允許開機至某個特定核心下。若 GRUB 2 所使用的目錄位址正確,使用者可能可以在命令列中輸入單一行的指令提供所需的所有訊息。此小節將會提供如何輸入此訊息的逐步指引。指令完成時看起來會類似 如下所示: 指令摘要*: set linux /boot/vmlinuz- 詳細指令*: 只有在完成每一步驟(「1」、「2」、「3」和「4」)之後才按下 ENTER。 第 1 步*:設定根分割區 set root=(hdX,Y) 使用來自 ls 指令查詢到的正確 X, Y 值並 ENTER。記住 GRUB 2 將第一個磁碟算為 0,第一個分割區為 1。舉例,若 Ubuntu 系統位於 sda5,輸入:set root=(hd0,5)
set root=(loop0) 第 2 步*:輸入「linux」行訊息 linux /boot/vmlinuz-<您的版本> root=/dev/sdXY ro
root=/dev/sdXY loop=/ubuntu/disks/root.disk 在輸入 linux /boot/ 之後,使用者可按下 TAB 來顯示可用的核心。在「/」後沒有空白。若沒有可見的核心,那麼在「設定根分割區」步驟中的位址設定可能有誤。輸入正確的核心或是用 tab 自動完成。 至於在 root=/dev/ 部份,請使用正確的裝置名稱,例如「/dev/sda1」、「/dev/sdb5」等等。加上任何選項,例如 ro(唯讀),在每行的行末(一般而言非必要)。 一旦此行的所有資訊都正確,看起來應該會類似以下的範例。 linux /boot/vmlinuz-2.6.31-16-generic root=/dev/sda1 ro 當正確輸入並按下 ENTER 後,若找到 linux 核心,會有一行高亮度類似「Linux-bzImage」的確認訊息出現如下圖。 若出現「檔案未找到(file not found)」或類似的訊息出現,表示要不是裝置/分割區/檔案不存在,不然就是 GRUB 2 並非在正確的磁碟、分割區和/或目錄中搜尋。使用 ls 指令來查明正確的位址接著執行以下指令。重複第 2 步。 set prefix=(hdX,Y)/boot/grub 第 3 步:輸入「initrd」行訊息 initrd /boot/initrd.img-<您的版本> 在輸入了 initrd /boot/ 之後,使用者可按下 TAB 來顯示可用的 initrd 映像檔。不要在「/」之後留空白。若沒有可見的映像檔,表示在「設定根分割區」步驟中的位址設定可能有誤。輸入正確的映像檔位址或是用 tab 自動完成。 一旦此行的所有資訊都正確,看起來應該會類似以下的範例。按下 ENTER。觀察確認訊息。 initrd /initrd-2.6.31-16-generic root=/dev/sda1 ro 當正確輸入並按下 ENTER 後,若找到 initrd 映像,會有一行高亮度類似「Initrd」的確認訊息出現如上圖。 第 4 步:重開機 boot 輸入指令並按下 ENTER。 救援模式 ===救援模式=== 救援模式是 GRUB 2 的主要強化部份。若 GRUB 2 尋找可用的 grub.cfg 失敗並無法轉移控制權至核心,他將會進入 grub-rescue> 提示符號。在此提示符號下使用者可探查問題、進行修改,以及重新嘗試開機。 救援模式所提供的指令比起一般 GRUB 提示符號列少,但也提供額外的指令: 指令 結果 dump 清除記憶體 exit 退出 GRUB 2 normal 若可能的話回到標準的「grub>」模式 以下指令可以在 grub 救援模式中使用: boot cat chainloader dump exit kfreebsd kfreebsd_loadenv kfreebsd_module help initrd insmod linux lsmod multiboot normal rmmod set unset 雖然以下的指令並非全都是開機至 linux 核心所必須,這些指令能讓使用者在執行 boot 指令前確認問題所在,提供較佳的機會以成功開機。 若需要額外的指令,使用者可以試著用 insmod normal 來載入一般的 GRUB 2 模組。若成功, help 和其他額外的指令就可以使用。 指令摘要*: 1. ls 2. set prefix=(hdX,Y)/boot/grub 3*. set root=(hdX,Y) 4. set 5. ls /boot 6. insmod /boot/grub/linux.mod 7*. linux /vmlinuz root=/dev/sdXY ro 8. initrd /initrd.img 9. boot
set root=(loop0) linux /vmlinuz root=/dev/sdXY loop=/ubuntu/disks/root.disk ro 詳細指令: 1. ls 此指令將顯示已知的裝置和分割區。由此資訊,使用者必須決定系統安裝在哪一個裝置和分割區。 2. set prefix=(hdX,Y)/boot/grub 若不正確,稍後將會發生「無此磁碟(no such disk)」或「無法找到(not found)」錯誤訊息。 3. set root=(hdX,Y) 在此指令中,X 為裝置/磁碟,由 0 開始。Y 為分割區,由 1 開始。範例:(hd0,1) 是 sda1。(hd3.5) 是 sdc5。 4. set 檢視「prefix=」列表。這裡應該會與步驟 3 的根目錄位址符合,為以下格式:prefix=(hdX,Y)/boot/grub。 5. ls /boot 檢視內容。使用者應該能看到多個核心、initrd 影像和 grub 目錄。若沒有,使用 ls 指令來檢查裝置並試著找尋檔案和目錄。若有必要,設定另一個裝置 為 root。 6. insmod /boot/grub/_linux.mod 載入(插入模組) linux 模組。此模組未載入,若沒有載入此模組,使用者將會收到一個「Unknown command linux」訊息。 7. linux /vmlinuz root=/dev/sdXY ro 載入 linux 核心,以正確的名稱替換掉「X」和「Y」(例如:sda1)。使用者將會看到核心已被載入的訊息。(參看上一小節圖片)
8. initrd /initrd.img 載入 initrd 影像。當按下 enter 時,使用者可能會或不會看到終端機中的訊息。(參看上圖的高亮度部份) 9. boot 嘗試使用輸入的訊息進行開機。 這些變更並非永久的。在成功開機進入系統後,使用者應該執行 sudo update-grub 並觀察 GRUB 2 設定檔(/boot//grub/grub.cfg)。若開機進入主要 linux 核心有問題,請先確定在 [### BEGIN /etc/grub.d/10_linux ###] 段落中的 search, linux 和 initrd 這三行資訊目前指到正確的位址。使用者也許需要用 sudo grub-install /dev/sdX 指令來重新安裝 GRUB 2。 GRUB ErrorsGRUB 2 並不會回報錯誤碼。若是錯誤訊息有帶著一個錯誤碼,這是由 GRUB 過渡至 GRUB 2 時發生的問題。 解決「Unrecognized Device String (Error 11)」此錯誤訊息通常是肇因於選單選項中不良或異常的內容。最常見的原因為使用者試圖從使用連鎖載入(Chainload)功能的 Jaunty 升級至 GRUB 2 導致。 1. 當啟動 GRUB 2 時顯示以下訊息: 2. 記住 Jaunty 的連鎖載入功能是有問題的,使用者按下任意鍵來回到主選單,然後按「e」直到看見「grub edit>」。編輯高亮度的「Chainload into GRUB 2」選項或任何使用者試圖用來開機的選項。 3. 有敏銳記憶力的使用者應該還記得「root」需要修改為「uuid」。使用方向鍵來移動游標,用「uuid」來取代「root」。當結束編輯時,使用者按下 ENTER 鍵,然後再按「b」來使用修改過的選項來開機。注意這些指令與 GRUB 2 中使用的不同。 若使用者打算保留雙重 GRUB 選項,以 root 身份開啟 /boot/grub/menu.lst 並將「Chainload into Grub 2」選單選項第二行「root」變更為「uuid」以修正錯誤。
File Not Found (Error 15)此錯誤為 GRUB 2 安裝至 /boot 但主開機磁區(MBR)依然為傳統 Grub。此狀況發生在當您執行 sudo update-from-grub-legacy 時未選擇您的磁碟。執行此指令後使用者馬上會被要求選擇一個裝置(sda、sdb 等)。當顯示此畫面時選擇磁碟並按下空白鍵。沒有選擇磁碟將會導致 Error 15 的產生。 欲修復此錯誤,必須要重新安裝 GRUB 2。詳細指令請參考從開機光碟重新安裝小節。 Grub 顯示救援模式提示符號(且未繼續進行開機)您 可能有一個有問題的 BIOS,且您的 /boot/* 檔案沒有位於磁碟的 1024 磁柱之內。在磁碟前端建立一個小型分割區,以 /mnt/b 來掛載,執行 cp -av /boot/* /mnt/b;umount /mnt/b;mount /dev/small_partition /boot; grub-install /dev/<device>。 開機影像和佈景主題GRUB 2 開機影像GRUB 2 較之前版本大大的加強了開機影像功能。設定開機影像需要進行兩個步驟:選擇欲使用的影像以及選擇顯示的文字顏色。 安裝預設的 GRUB 2 影像套件,安裝「grub-splashimages」套件。
不要把它與 grub-splashimages 套件搞錯,否則會與 GRUB 2 不相容。 這些下載影像的預設路徑在 /usr/share/images/grub。這個路徑或檔案所放置的其他路徑必須加進 05_debian_theme 中。(參見下方) 使用者可以建立並使用他們自己的開機影像。 設定開機影像GRUB 2 的開機影像由 /etc/grub.d/05_debian_theme 所控制。以 root 身份開啟此檔案進行編輯。 以下關於設定背景影像的指引說明適用於 Karmic Koala,Ubuntu 9.10 的預設安裝 Grub 2 版本。在之後 Lucid Lynx 10.04 所找到的新版本 Grub 2(1.97 或更新版),此行: ">for i in {/boot/grub,/usr/share/images/desktop-base}..." 已被更簡化的版本取代: WALLPAPER="/usr/share/images/desktop-base/moreblue-orbit-grub.png" 在新的版本裡,僅需找到此行(大約在 /etc/grub.d/05_debian_image 的第 10 行)並將你目前想使用作為 GRUB 2 背景的正確路徑及檔名取代之即可。 找到以下行並編輯粗體部份,以你想要使用的 GRUB 2 開機影像路徑和名稱來取代: for i in {/boot/grub,/user/share/images/desktop-base}/moreblue-orbit-grub.{png,tga} ; do 在此項目中有些地方需要注意: GRUB 2 預設會在 /boot/grub 和 /usr/share/images/desktop-base 中尋找開機影像 grub2-splashimages 套件並非解壓縮至以上的兩個目錄中,而是在 /usr/share/images/grub 使用者必須在以下兩動作中擇一: 修改上面一行的目錄位置並指向正確的位置,或 將開機影像移動到上面所提到的兩個目錄之一。 欲加入 grub 目錄,讓項目看起來像以下這樣,然後改變檔名為在 /usr/share/images/grub 中欲使用的開機影像。 for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/moreblue-orbit-grub.{png,tga} ; do 檔名以句點結束(.)(/moreblue-orbit-grub.) 開機影像選擇: 若相同檔名檔案存在於超過一個目錄中,最早指定的目錄將會被使用。 若檔名相同而副檔名不同(多種副檔名),則最早指定的副檔名檔案將會被選擇。 使用者可以對上述設定行做許多變更以延伸開機影像的彈性: 加入使用者擁有的目錄,讓 GRUB 2 可以搜尋到更多可用的開機影像。 加入使用 JPEG 格式開機影像檔的能力。此時只有 8-bit JPEG 格式影像能被正確顯示。 注意影像必須儲存為 RGB 色彩格式顯示,而不是索引。 以下展示了新增加的使用者擁有的開機影像目錄以及增加 JPEG 支援: for i in {/boot/grub,/usr/share/images/grub,/home/drs/mysplash}/moreblue-orbit-grub.{png,tga,jpg,jpeg} ; do 一旦您輸入路徑和檔名至 05_debian_theme 中,您可執行 sudo upate-grub 來加新增資訊加入 grub.cfg。若開機影像加入成功,使用者將會在終端機執行指令時看到「Found Debian image...」。若沒有看到此段訊息,則影像資訊有可能未輸入。 設定選單字型&高亮度色彩此行包含在 /etc/grub.d/05_debian_theme 中。這些指令不會在靠近檔案上方的主題設定設為「mono」的狀態下生效。 未選取的選單選項色彩如以下範例行來設定。第一個色彩是文字色彩;第二個是背景色彩。 set color_normal=black/black 以下的代碼設定被選取選項的色彩。第一個色彩是高亮度文字色彩;第二個是被選定行的背景色彩。若 /black 為第二個選項,則高亮度行將會是透明的,且只有文字色彩會改變。 set color_highlight=magenta/black 當作為第二個色彩時 /black 是 GRUB 2 的預設透明色。若使用開機影像時,只要改變第一個色彩(例如 xxxxx/black)。若第二個色彩更改為黑色以外的顏色,開機影像將會被藏在實色背景之後。 在下圖中,其 color_normal 設定為 white/black。高亮度色彩設定為 cyan/blue 在 GRUB 2 中可使用這些色彩。第二選項設為「black」則會被認定為「透明」(transparent)。 black blue brown cyan dark-gray green light-cyan light-blue light-green light-gray light-magenta light-red magenta red white yellow 若有做任何變動,存檔後更新 GRUB 2:sudo update-grub 測試字型和開機影像與其重新開機來測試色彩組合,使用者可透過在開機過程使用 GRUB 2 命令列來檢閱改變。 依照上方說明來選擇開機影像和初始字型色彩,以 sudo update-grub 來更新 GRUB 2 的檔案後重新開機。 當 GRUB 2 開機影像/選單出現時,按下任何鍵以停止逾時倒數。 按 c 進入GRUB 2 命令列。 用各種不同的組合來實驗。輸入以下指令來進行變更: set color_normal=first-color/black 和/或 set color_highlight=first-color/second-color 在指令輸入後立即可以看到文字的色彩。您可以使用「向上」鍵來呼叫最後執行的指令然後編輯就能快速測試不同的色彩組合。 一旦您想結束,按下 ESC 鍵回到選單。 隨意重複上述步驟。 記下想使用的色彩組合,正常開機然後編輯 /etc/grub.d/05_debian_theme 並讓變更永久儲存。 存檔,更新 GRUB 2:sudo update-grub 變更解析度及開機影像若使用者想在使用開機影像時變更 GRUB 2 螢幕解析度,依以下步驟: 1. 在 /etc/default/grub 中設定欲使用的解析度 變更 GRUB_GFXMODE= 之值(例如:GRUB_GFXMODE=800x600) 若無法確認 GRUB 2 可以使用何解析度,可以在 GRUB 2 命令列下輸入 vbeinfo 來顯示。命令列可以在當 GRUB 2 主選單顯示的時候按下「c」來存取。選擇一個同樣大小的影像並在 /etc/grub.d/05_debian_theme 中修改。 2. 選擇一個同樣大小的影像並在 /etc/grub.d/05_debian_theme 中修改。 影像名稱位置在以「for i in {/boot」為開頭的那一行裡 若沒有使用正確大小的影像,選單的位置將不會是正確的。 使用您選擇的影像編輯程式來建立/修改正確尺寸的影像。 使用者也許可以透過檔案瀏覽器的屬性來檢視影像的尺寸(在 Nautilus 中檢查屬性影像標籤)。 3. 以 root 權限執行 update-grub 將新增的設定加入 /boot/grub/grub.cfg 建立使用者開機影像GRUB 2 的開機影像管理讓使用各式各樣的開機影像變得容易。 解析度設定在 grub2-splashimages 套件中的開機影像主要為 640x480 的影像。 GRUB 2 會在 /etc/default/grub 中尋找解析度設定。若取消註解,則解析度由此行決定: GRUB_GFXMODE=640x480 若在 /etc/default/grub 中沒有找到解析度設定,GRUB 2 會使用設定在 /etc/grub.d/00_header 中 640x480 這個設定值。 影像建立和設定在 Ubuntu 中,參考系統,偏好設定,顯示以取得可用的螢幕解析度,或是在 GRUB 2 命令列下執行 vbeinfo 來顯示可用的解析度。 1. 決定您想在 GRUB 2 開機影像中使用的解析度。 2. 建立或修改任何影像至合適的尺寸。 GRUB 2 目前支援 .png, .tga, 以及 8-bit .jpg/.jpeg 影像。 若使用 GIMP,將檔案以適合的副檔名命名可存檔為該格式。 3. 在 GRUB 2 設定檔中作合適的修改: /etc/default/grub:取消 GRUB_GFXMODE=640x480 行的註解,若解析度不是 640x480 則修正其值。 /etc/grub.d/05_debian_theme:在以下行中輸入正確的路徑及檔名。更多如何修改此行的資訊請參考前一小節。 for i in {/boot/grub,/usr/share/images/desktop-base}/moreblue-orbit-grub.{png,tga} ; do 4. 執行 sudo update-grub 將變更合併至 GRUB 2 佈景主題GRUB 2 佈景主題還在開發中,與 gfxmenu 整合。佈景主題元素包含了色彩、字型、進度指示列、選單和標籤。這些都有遠大的承諾但尚未在 Ubuntu 9.10 發行時準備好。檢視此頁最底下的連結小節以找到參考資料。 重新安裝 GRUB 2有時使用者可能需要移動或是重新安裝 GRUB 2。當使用者遇到空白螢幕上只有 GRUB 字樣,沒有提示符號,也沒有辦法輸入指令的時候,就需要重新安裝 GRUB 2。這通常發生在開機裝置的 MBR 區被修改的時候,例如在安裝 Ubuntu 之後才安裝 Windows。此外,若使用者完全無法開機進入作業系統,甚至無法使用救援模式,那麼也許必須要重新完整安裝 GRUB 2。 由 LiveCD 重新安裝若您無法從 GRUB 2 開機,請參考開機問題及救援模式小節。若需要重新安裝,則依照這些程序進行。這裡有提出兩個方案;兩者皆需要從 LiveCD 開機(Ubuntu 9.10, Karmic Koala 或更新版本)。若第一個方案沒有作用,就進行第二方案,這會比較複雜且包含更多選項及指令。 最簡易方案 - 從 LiveCD 複製 GRUB 2 檔案這是一個從故障的 GRUB 2 系統復原的快速及簡單方法。會使用終端機來輸入指令,而使用者必須知道被安裝之系統上的裝置名稱/分割區(sda1, sdb5 等等)。有問題的分割區將會從 LiveCD 來定位及掛載。相關檔案接下來會由 LiveCD 來複製到合適的地點及 MBR 中。跟之後的方法比起來,這樣需要最少的步驟和較少的指令輸入。 1. 開機進入 LiveCD 桌面(Ubuntu 9.10 或更新版)。 2. 從選單中選擇應用程式,附屬應用程式,終端機來啟動終端機。 3. 確認 Ubuntu 安裝之分割區。fdisk 的選項「-l」是一個小寫的「L」。 sudo fdisk -l 若使用者無法確定分割區,可以找一個擁有合適的大小或是格式的。 執行 sudo blkid 也許能提供更多的資訊來協助找到適合的分割區,特別是若分割區有名稱標記。裝置/磁碟是由 sdX 來指定,X 即為指定的裝置。sda 是第一個裝置,sdb 是第二個,依此類推。絕大多數的使用者之 MBR 會被安裝在 sda,系統中的第一個磁碟。分割區是由 Y 指定。第一個分割區是 1 ,第二個是 2。注意到裝置和分割區的計算法是不同的。 4. 掛載包含 Ubuntu 安裝的分割區。 sudo mount /dev/sdXY /mnt 範例:sudo mount /dev/sda1 注意:若使用者有單獨的 /boot 分割區,必須要掛載到 /mnt/boot 注意:若使用者有單獨的 /home 分割區,必須掛載到 /mnt/home。加密的 home 分割區應能正常作業。 5. 執行下面所列出的 grub-install 指令。這樣將會在掛載的分割區上的適當位置重新安裝 GRUB 2 檔案,以及指定裝置上的 MBR。 sudo grub-install --root-directory=/mnt/ /dev/sdX 範例:sudo grub-install --root-directory=/mnt/ /dev/sda 6. 重新啟動 7. 用 sudo update-grub 指令更新 GRUB 2 選單 8. 若使用者想知道為何系統會失敗,參考底下的回復後指令小節。 方案 2 - 從已安裝的分割區複製 GRUB 2 檔案這是一個快速且簡單的方法來回復系統損壞的 GRUB 2 檔案。有問題的分割區將會從 LiveCD 來定位及掛載。相關檔案接下來會由受損系統的 /boot/grub 目錄複製到適當的位置以及 MBR 中。這樣需要較少的步驟及較少的指令輸入,跟之後的 CHROOT 方案比較起來。擁有分散系統分割區的使用者,例如單獨的 /boot 分割區,或其他特殊情況,使用 CHROOT 方案應該會有比較好的結果。 1. 開機進入 LiveCD 桌面(Ubuntu 9.10 或更新版)。 2. 掛載您 Ubuntu 安裝所在的分割區。 a. 從「位置」選單,點選您的 Ubuntu 安裝之分割區來掛載。Ubuntu 9.10 or later b. 若未辨識出分割區,找找看有合適的大小或名稱的。 c. 一旦掛載後,使用者應該會看到 Ubuntu 系統目錄例如 /boot。 3. 從選單中的「應用程式」,「附屬應用程式」,「終端機」來啟動終端機。
4. 執行如底下說明的 grub-setup -d 指令。這樣會重新安裝 GRUB 2 檔案到掛載分割區的適當位置以及指定裝置的 MBR 中。 a. 參考「位置」中的位置列來決定掛載點。將指令中的 XXXX 以 UUID 取代,若分割區並不是掛載在 /media 之下,則用正確的位置取代 /media/XXXX。選定的位置可能是一個 UUID,或是一個名稱標籤,若使用者有自行建立的話(參考注意事項)。
c. 以滑鼠選取 UUID/位置來複製內容。在終端機中按下滑鼠中鍵來貼上。若使用鍵盤的話,按 CTRL-C 來複製位置並使用 CTRL-SHIFT-V 來貼上至終端機中。 sudo grub-setup -d /media/XXXX/boot/grub /dev/sda 範例: sudo grub-setup -d /media/XXXXX/boot/grub -m /media/XXXXX/boot/grub/device.map /dev/sda 範例:
sudo grub-setup -d /media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub -m /media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub/device.map /dev/sda 方案 3 - CHROOT此方案安裝會使用 chroot 指令來存取受損系統的檔案。 復原後指令一旦使用者可以開機至正常作業的系統,可試著查明為何系統之前開機失敗。以下指令也許對找到及/或修復問題有所幫助。 重新整理 /boot/grub/grub.cfg 中可用的裝置和設定 sudo update-grub 查詢開機載入程式位置。 grub-probe -t device /boot/grub 安裝 GRUB 2 至 sdX 分割區的 MBR 中(sda, sdb 等等。) sudo grub-install /dev/sdX 重新驗證安裝。(sda, sdb 等等。) sudo grub-install --recheck /dev/sdX 更改或移動 GRUB 2更改 GRUB 2 安裝裝置或開機檔案的指令的方式是以 root 身份執行 grub-install。此指令允許使用者藉由設定根(ROOT)目錄、預載模組、執行特定設定檔案或其他方式來修改安裝。當執行時,grub-install 可能會執行一或多個其他指令,例如 grub-probe、grub-mkimage 和 grub-setup。這裡是當執行 grub-install 時一些需要考量的: 在一般情況下應該使用 grub-install 指令而不是 grub-setup。當需要的時候 grub-install 會呼叫 grub-setup。 此指令應指定一裝置,當執行時將會安裝 GRUB 需要的檔案至指定的裝置上。(例如:sudo grub-install /dev/sda) 若使用者試圖在執行此指令時指定一個分割區,(例如:sudo grub-install /dev/sda6)會發出一個警告訊息。指定一個分割區是不被建議採用的而被列在阻擋清單(blocklists)中,阻擋清單是開發者認為不可靠的部份。然而還是有複寫此建議的選項,若使用者依然想要如此做的話。 grub-install 可用選項清單可在終端機中執行 grub-install --help 來顯示。 grub-install 之線上說明文件(man page)目前尚不會顯示所有可用的選項。 移除 GRUB 2回復至傳統 GRUB若使用者選擇回復至傳統 GRUB(0.97),以下步驟將移除 GRUB 2 並安裝 GRUB。 命令列模式提供較清楚乾淨的移除和重新安裝。然而 Synaptic 也可以做到新增和移除套件,某些步驟依然要進入終端機來達成。
1. 開啟終端機:應用程式(Applications),附屬應用程式(Accessories),終端機(Terminal)。 常見問題與錯誤外接磁碟安裝及「grub-pc」更新Launchpad Bug 496435 安裝 Ubuntu 在外接磁碟上可能會導致問題產生,因為 grub-install 某些狀況下會使用裝置名稱(例如 sda, sdb)而不是 UUID。若在連接到其他機器的時候進行 grub-pc 更新,那麼可能會將更新寫入至錯誤的裝置並使得電腦無法開機。 有一個暫時解決方案在上面的錯誤回報連結中有提供。 外接磁碟安裝及 MBR 選擇Launchpad Bug 414996 當安裝 Ubuntu 至 USB 磁碟中時,GRUB 2 有可能會寫入至硬碟的 MBR 中,或是分開至硬碟及 USB 磁碟中(而不是全部在 USB 磁碟中)。這樣可能會使得主要磁碟無法開機。 暫時解決方案:在安裝過程的最後一個步驟,有一個「進階(Advanced)」按鈕,可以允許使用者選擇安裝的位置。更多細節請參考錯誤回報。 開機分割區在於邏輯卷冊開機分割區所在的邏輯卷冊(Logical Volume)位於包含一份系統快照(snapshot)的卷冊群組內(Volume Group) Launchpad Bug 563895 當您的開機分割區(放置 /boot)是 LV,請確認不要有任何的 LVM 快照在包含的 VG 中。在重新啟動時會讓您的系統無法開機,進入「grub rescue>」環境中並顯示以下訊息:「error: no such disk.」 grub-rescue 介面在這裡無法幫助您,因為所有的模組(特別是 lvm)皆無法存取。您必須從其他安裝媒體中開機並手動移除與 boot 分割區在同一個 VG 裡所有的快照。 若您的伺服器在遠端資料中心,這個問題會超級麻煩,因為問題的原因無法簡單的查到,且修復系統可能會很困難。 雖然此問題會在即將到來的 Maverick Meerkat 10.10 版本中修復,然而目前的 Lucid Lynx LTS 10.04 卻是有受到影響的。 一個暫時解決方法是將 Ubuntu 的 /boot 安裝在一個分開的非 LVM 分割區中,如果您常常使用 LVM 的快照功能的話。 諷刺的是如果您是個細心的人,會在更新前(或是可能的重新啟動前)製作一份 LVM 快照,反而會引發這個 bug。 其他由序列式主控台(Serial Console)開機若您想要 GRUB 透過序列式連線作業,您需要去掉在 /etc/default/grub 檔案中 GRUB_TERMINAL 的註解,並設定為 serial(取代預設的 console)。預設的序列式主控台設定將會作業在第一個序列埠(ttyS0),以 9600 bit/s 傳輸速率及 8 data bits,1 stop bit,無同位元檢查。 若您想使用其他序列埠,或是您的主控台使用不同的設定,您必須加入一行 GRUB_SERIAL_COMMAND 來為 serial 指令指定額外的參數。GRUB 2 使用的 serial 指令與傳統 GRUB 對應的部份語法相同(文件在這裡)。例如,一個 4800 bit/s 序列連線使用 7 data bits,1 stop bit 和偶數校驗: GRUB_SERIAL_COMMAND="serial --unit=0 --speed=4800 --word=7 --parity=even --stop=1" 連結以下皆為英文參考文件連結。 外部連結 |
|
来自: Hongrongqi > 《ubuntu》