Grub2啟動項的修改和相關操作命令
他們給出的步驟是先修改 /etc/default/grub; sudo gedit grub
這個檔案比較直觀。
切回去/boot/grub/目錄。
修改/boot/grub/grub.cfg的屬性: sudo chmod 777 grub.cfg
用grub-mkconfig生成新的grub.cfg: sudo grub-mkconfig>grub.cfg
把grub.cfg屬性改回只讀; sudo chmod 444 grub.cfg 每次升級核心就把你修改的設定改回來 你還的修改grub.cfg
上述方法麻煩但有效
grub.cfg是根據/etc/grub.d下的檔案和/etc/default/grub自動生成
主要修改/etc/grub.d下的檔案和/etc/default/grub
由於ubuntu9.10使用了grub2,因此再用grub系統不能修復系統載入程式,而且系統引導檔案由原來的 menu.lst變成了grub.cfg(放在/boot/grub目錄下),這個目錄及其中的檔案都是隻讀的,在修改前必須首先修改其使用者許可權,具體修 複方法如下:
1、用ubuntu9.10的Live CD光碟啟動系統;
2、開啟終端,輸入終端命令: sudo fdisk -l此時可以看到顯示出來的整個硬碟上所有分割槽的列表,請記錄下來根分割槽 / 和/boot分割槽安裝的位置(筆者的根分割槽位於/dev/sda7,/boot沒有單獨分割槽),下面就以筆者的分割槽舉例說明,請大家根據自己的磁碟分割槽情 況進行修改;
3、在終端輸入命令: sudo -i (取得root特權)
mount /dev/sda7 /mnt
mount /dev/sda6 /mnt/boot (如果/boot沒有單獨分割槽則不要執行這個命令)
grub-install --root-directory=/mnt/ /dev/sda (注意此命令中root前面是兩個減號橫槓)
4、執行完以上步驟和命令,重新啟動系統,這時您會看到熟悉的、久違了的原來的雙系統啟動選單,呵呵,是不是很高興?但是不要高興的太早,否則您選擇windows的啟動選單試試,是不是出錯而啟動不起來?OK,繼續跟我做進一步的修復。
5、回到我們的啟動選單,既然不能引導windows,那麼我們就引導Ubuntu系統;
6、輸入終端命令: sudo –i
chmod +w /boot/grub/grub.cfg (修改grub.cfg檔案的操作許可權)
gedit /boot/grub/grub.cfg (編輯grub.cfg檔案)
將其中的windows引導相關的部分進行修改:
(綠色字型部分為原內容)
menuentry “Microsoft Windows XP Professional” {
set root=(hd0,1)
search –no-floppy –fs-uuid –set 4a807ca0807c93e3
drivemap -s (hd0) $root
chainloader +1 }
修改成:
menuentry “Microsoft Windows XP Professional” { set root=(hd0,1) chainloader +1 }
7、修改好以後,存檔,關閉終端視窗,重新啟動系統,修復成功!
grub2基礎教程(節選)
1、安裝ubuntu9.10時,grub預設安裝在第一硬碟(hd0)的mbr,其實就是把引導檔案boot.img寫入硬碟的mbr,當然,使用者也可 以選擇不寫入硬碟mbr而是寫入linux分割槽的引導扇區。啟動時根據mbr所提供資訊找到啟動分割槽後,載入分割槽內的grub核心檔案core.img和 配置檔案grub.cfg,進入選擇選單畫面,在選單畫面,按上下箭號選擇需要系統選單項,按Enter進入選項。
按e進入己選擇選單的編輯狀態,在編輯狀態下,由上下左右箭號來移動游標,enter鍵換行,ctrl+x以編輯的內容啟動,ctrl+c進命令列狀態,按Esc退出,回到選單項。
在需要使用額外的核心引數啟動時,比如要加上acpi=off時,把游標移動到linux這一行最後,在splash後加上一空格再輸入acpi=off,然後按ctrl+x啟動。
按c進入命令列狀態,按Tab鍵可檢視所有可用的命令。
在命令列狀態,可以根據需要載入或移除相應模組,也可用來啟動在選單沒有顯現的的系統。
比如,在第一硬碟的第一分割槽上裝有windows xp系統,但在選單上沒顯示出來,我們可以命令列狀態下輸入命令啟動:
grub>set root=(hd0,1)
grub>chainloader +1
grub>boot
又比如啟動第二硬碟第一邏輯分割槽上的ubuntu系統:
grub>set root=(hd1,5)
grub>linux /boot/vmlinuz-xxx-xxx root=/dev/sdb5
grub>initrd /boot/initrd.img-xxx-xxx
grub>boot
其中核心vmlinuz和initrd.img的版本號可用按Tab鍵自動檢視。
2、下面介紹下在grub2中一些常用的命令
1)help
檢視命令用法,如
help search:檢視search命令詳細用法
2)set
設定變數值,如
set default=0
set timeout=5
set root=(hd0,3)等等
需要呼叫變數AA的值時,使用${AA},如set root=(hd1,1),則${root}=(hd1,1)
3)default
定義預設引導的作業系統。0 表示第一個作業系統,1表示第2個,依此類推
4)timeout
定義在時間內使用者沒有按下鍵盤上的某個按鍵,自動引導default指定的作業系統。
5)root
指定用於啟動系統的分割槽。
6)insmod和rmmod
載入或移除某模組,如
insmod jpeg
insmod png
insmod ntfs
rmmod png
等
7)drivemap
drivemap相容grub的map,主要用於只能從第一硬碟(hd0)引導啟動的系統如 win2000 xp 2003,比如要新增第二硬碟第一分割槽上的xp系統:
menuentry "Windows XP" {
set root=(hd1,1)
drivemap -s (hd0) ${root}
chainloader +1
}
8)ls
列出當前的所有裝置。如(hd0),(hd0,1),(hd0,5),(hd1),(hd1,1),(hd1,2)等
ls -l
詳細列出當前的所有裝置。對於分割槽,會顯示其label及uuid。
ls /
列出當前設為root的分割槽下的檔案
ls (hd1,1)/
列出(hd1,1)分割槽根目錄的檔案
9)search
search -f /ntldr
列出根目錄裡包含ntldr檔案的分割槽,返回為分割槽號
search -l LINUX
搜尋label是LINUX的分割槽。
search --set -f /ntldr
搜尋根目錄包含ntldr檔案的分割槽並設為root,注意如果多個分割槽含有ntldr檔案,
set失去作用。
10)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
11)pager
分頁顯示。
set pager=1
顯示滿一頁時暫停,按space繼續
set pager=0
取消分頁顯示
12)linux
用linux命令取代grub中的kernel命令
13)chainloader
呼叫另一個啟動器,如
chainloader (hd0,1)+1
呼叫第一硬碟第一分割槽引導扇區內的啟動器,可以是windows或linux的啟動器
三、grub2配置檔案詳解
grub2改用grub.cfg為配置檔案,配置檔案包含以下基本內容:(紅色為解釋部分)
### BEGIN /etc/grub.d/00_header ###
load_env
#
set default="0"
#設定預設引導項,預設值為0
insmod ext2
#插入檔案系統支援的模組,除了用作啟動的分割槽外,其他分割槽格式可在menuentry底下再新增
set root=(hd0,8)
# 指定系統root分割槽,也就是 / 分割槽
search --no-floppy --fs-uuid --set 2d61e5f9-1d2a-4167-a6f1-b991ba00878b
#指定uuid=2d61e5f9-1d2a-4167-a6f1-b991ba00878b的分割槽為root分割槽,如果前面的分割槽號(hd0,8)的#uuid與這裡的uuid一致,這兩句作用一樣,如果不一致,則指定uuid的起作用。
if loadfont /usr/share/grub/unicode.pf2 ; then
#設定終端字型,unicode.pf2支援中文字元顯示
set gfxmode=640x480
#設定顯示解析度,預設為640x480,可用800x600,1024x768,建議跟你想設定的圖片大小一致
insmod gfxterm
#插入終端模組gfxterm,支援中文字元顯示和支援24點陣圖像
insmod vbe
#插入vbe模組,GRUB2引入模組化機制,要使用它,需要在這裡加入
if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don't
# understand terminal_output
terminal gfxterm
#設定grub2終端為gfxterm
fi
fi
set timeout=10
#設定預設啟動前等待時間,預設為10秒
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###set menu_color_normal=white/black
#設定選單字型及背景顏色
set menu_color_highlight=black/blue
#設定選擇項字型及背景顏色
#如果使用預設,背景將完全被藍色擋住了,需要修改blue為black,背景圖片才能顯示
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
#10_linux為系統自動新增的當前root分割槽linux引導項
#每個選單項要包括menuentry雙引號" "和大括號{ }才完整,否則不顯示選單
menuentry "Ubuntu, Linux 2.6.31-10-generic" {
set quiet=1
insmod ext2
set root=(hd0,8)
search --no-floppy --fs-uuid --set 2d61e5f9-1d2a-4167-a6f1-b991ba00878b
#這句與set root=(hd0,8)效果一樣,可刪除其一,二者不一致以這句為準
linux /boot/vmlinuz-2.6.31-10-generic root=UUID=2d61e5f9-1d2a-4167-a6f1-b991ba00878b ro quiet splash
#不喜歡看到一長串的, roo=UUID=***可用root=/dev/sda8(/分割槽的分割槽號)代替
initrd /boot/initrd.img-2.6.31-10-generic
}
…
### END /etc/grub.d/10_linux ###
#20_memtest86+為系統自動新增的記憶體測試選單項
### BEGIN /etc/grub.d/20_memtest86+ ###menuentry "Memory test (memtest86+)" {linux16 /boot/memtest86+.bin}menuentry "Memory test (memtest86+, serial console 115200)" {linux16 /boot/memtest86+.bin console=ttyS0,115200n8}### END /etc/grub.d/20_memtest86+ ###
#30_os-prober或30_others為系統自動查詢並新增其他系統選單項,按windows,linux,macos順序
#查詢並新增,支援windows 7識別
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/30_otheros ###
# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/sda1
menuentry "Microsoft Windows XP Professional" {
set root=(hd0,1)
search --no-floppy --fs-uuid --set e852-230b
drivemap -s (hd0) $root
#對以ntldr引導的系統如win2000,xp,win2003,因其引導機制只能從第一硬碟啟動,系統會自動新增#對映命令,對vista和win7就沒有這句命令
chainloader +1}### END /etc/grub.d/30_otheros ###
#40_custom為自定義的啟動項,如啟動cdlinux
### 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 ###
例項:
menuentry "CentOS-base, (2.6.18-164.el5)" {
insmod ext2
set root=(hd0,3)
linux /boot/vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.18-164.el5.img
}
menuentry "Ubuntu, Linux 2.6.31-14-generic-pae" {
recordfail=1
if [ -n ${have_grubenv} ]; then save_env recordfail; fi
set quiet=1
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set 91d7cb26-bd24-4bbf-9423-c81bb9be0a06
linux /boot/vmlinuz-2.6.31-14-generic-pae root=UUID=91d7cb26-bd24-4bbf-9423-c81bb9be0a06 ro quiet splash
initrd /boot/initrd.img-2.6.31-14-generic-pae
}