目錄 php
4、腳本修改ubuntu
1、grub2新特性 api
1、grub2和grub有不少不一樣的地方:
a)圖形接口
b)使用了模塊機制,經過動態加載須要的模塊來擴展功能
c)支持腳本語言,例如條件判斷,循環、變量和函數
d)支持rescue模式,可用於系統沒法引導的狀況
e)國際化語言。包括支持非ASCII的字符集和相似gettext的消息分類,字體,圖形控制檯等等
f)有一個靈活的命令行接口。若是沒有配置文件存在,GRUB會自動進入命令模式
g)針對文件系統、文件、設備、驅動、終端、命令、分區表、os loder的模塊化、層次化、基於對象的框架
h)支持多種文件系統格式
i)可訪問已經安裝的設備上的數據
j)支持自動解壓
2、設備的命名
grub2一樣以fd表示軟盤,hd表示硬盤(包含IDE和SCSI硬盤)。設備是從0開始編號,分區則是從1開始,主分區從1-4,邏輯分區從5開始,而grub分區編號是從0開始的。下面給出幾個例子 :
(fd0):表示整個軟盤
(hd0,1):表示BIOS中的第一個硬盤的第1個分區
(hd0,5)/boot/vmlinuz:表示BIOS中的第一個硬盤的第一個邏輯分區下的boot目錄下的vmlinuz文件
app
1、安裝ubuntu9.10時,grub默認安裝在第一硬盤(hd0)的mbr,其實就是把引導文件boot.img寫入硬盤的mbr,固然,用戶也能夠選擇不寫入硬盤mbr而是寫入linux分區的引導扇區。啓動時根據mbr所提供信息找到啓動分區後,加載分區內的grub核心文件core.img和配置文件grub.cfg,進入選擇菜單畫面,在菜單畫面,按上下箭號選擇須要系統菜單項,按Enter進入選項。 ide
按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的啓動器
14) grub2掛載軟盤鏡像
menuentry "Boot from DOS IMG" {
linux16 /memdisk
initrd16 /win98.img
}
對非標準的1.4M和2.8M的其餘鏡像掛載方法,須要指定 CHS參數:
menuentry "Boot from IMG" {
linux16 /memdisk c=* h=* s=* floppy
initrd16 /xxx.img
}
3、grub2配置文件詳解
grub2改用grub.cfg爲配置文件,配置文件包含如下基本內容:(紅色爲解釋部分)
### BEGIN /etc/grub.d/00_header ###
load_env
#加載變量,若是在grubenv保存變量,則啓動時裝載
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 ###
定製個性化的配置文件,能夠加入背景圖片,使用中文字符,讓啓動畫面獨具特點,而不是單調的黑、白、藍三色。下面是一張經美化啓動畫面:
4、腳本修改
系統安裝完成後,用戶就會發現/boot/grub/grub.cfg文件只有root權限可讀,若是要直接修改grub.cfg文件,要先修改其權限。好不容易把grub.cfg修改好了,系統內核或grub升級時,會自動執行update-grub,grub.cfg文件就會被打回原形,如何保證修改後的配置文件能一直保留下來呢?
其實不用修改grub.cfg,只要把個性化配置寫入/etc/default/目錄下的grub和/etc/gurb.d目錄下的腳本文件,之後無論升級內核或者是升級grub所執行的update-grub,都會按要求建立個性化的grub.cfg。
1、首先看下 /etc/default/grub,先從應用程序-附件裏打開終端,輸入
sudo gedit /etc/default/grub
用戶密碼
看看打開的文件可做什麼修改:
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
GRUB_DEFAULT=0 ->設置默認啓動項,按menuentry順序。好比要默認從第四個菜單項啓動,數字改成3,若改成 saved,則默認爲上次啓動項。
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true ->隱藏菜單,grub2再也不使用,無論
GRUB_TIMEOUT="3" ->設置進入默認啓動項的等候時間,默認值10秒,按本身須要修改
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" ->添加內核啓動參數,這個爲默認
GRUB_CMDLINE_LINUX="noresume" ->手動添加內核啓動參數,好比 acpi=off noapic等可在這裏添加
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console ->設置是否使用圖形介面。去除前面#,僅使用控制檯終端,不使用圖形介面
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480 設定圖形介面分辨率,如不使用默認,把前面#去掉,把分辨率改成800x600或1024x768
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true ->設置grub命令是否使用UUID,去掉#,使用root=/dev/sdax而不用root=UUDI=xxx
# Uncomment to disable generation of recovery mode menu entrys
#GRUB_DISABLE_LINUX_RECOVERY="true" ->設定是否建立修復模式菜單項
二、再看下/etc/grub.d目錄下的腳本文件:
00_header,05_debian_theme,10_linux,20_memtest86+,30_os- prober,40_custom這五個腳本對應grub.cfg上的各個部分,有的版本的grub可能把30_os-prober分出另外一部分爲 30_os-others,這並不影響。怎樣修改這些腳本文件才能保證不會破壞update-grub的運行,又能讓生成的grub.cfg合乎意願呢? 其實很簡單,只要在腳本文件中找到
cat << EOF
********
********
********
EOF
這類語句,EOF中間的文本會直接寫入grub.cfg中相應位置,因此個性化的語句添加在這地方就能夠了。
其餘使用變量的語句不要隨變作修改,除非你清楚修改後會有什麼結果。
1)看看00_header,同樣在終端中打開sudo gedit /etc/grub.d/00_header,找到這部分
再看看最後這一段
2)05_debian_theme修改字體及背景顏色
先打開文件 sudo gedit /etc/grub.d/05_debian_theme
看這裏
3)10_linux這部分是自動搜索當前系統,創建當前系統的啓動菜單,包括系統頭,內核等信息,不要隨便修改,要使用個性菜單名,好比中文菜單,可適當添加:
先打開文件 sudo gedit /etc/grub.d/10_linux,找到
個性化菜單項也可在這裏修改,即上面的menuenrty "$1"不變,修改下面的數值:
linux_entry "${OS}, Linux ${version}" \ ->可改成 linux_entry "啓動 Ubuntu, Linux ${version}"\
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}" \
quiet
if [ "x${GRUB_DISABLE_LINUX_RECOVERY}" != "xtrue" ]; then
linux_entry "${OS}, Linux ${version} (recovery mode)" \ ->可改成 linux_entry "啓動 Ubuntu, Linux ${version} (修復模式)"\
"single ${GRUB_CMDLINE_LINUX}"
fi
注意只修改引號內的字符,前面的menuentry,linux_entry和後面的\不要作修改。
4)20_memtest86+自動添加內存測試啓動項
打開文件 sudo gedit /etc/grub.d/20_memtest86+,找到
cat << EOF
menuentry "Memory test (memtest86+)" { ->雙引號內可添加個性字符如menuentry "啓動 內存測試"
linux16 $MEMTESTPATH
}
menuentry "Memory test (memtest86+, serial console 115200)" {
linux16 $MEMTESTPATH console=ttyS0,115200n8
}
EOF
上面有兩內存測試項,可刪除其中一個。
5)30_os-prober查找其餘分區中存在的系統並創建菜單項,依次爲windows,linux,macos。
對於單系統,默認會隱藏菜單,可在這裏去掉隱藏
先打開文件 sudo gedit /etc/grub.d/30_os-prober
單ubuntu系統會自動隱藏菜單,要取消隱藏菜單,可把這部份的三個timeout=0改成和/etc/default/grub中的timeout一致,好比timeout=10。
cat <<EOF
if [ \${timeout} != -1 ]; then
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
fi
EOF
else
cat << EOF
if [ \${timeout} != -1 ]; then
if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
set timeout=0
fi
fi
EOF
下面這段自動查找並添加windows、linux和macos啓動項,可在menuentry內修改個性字符
windows啓動項
for OS in ${OSPROBED} ; do
......
if [ -z "${LONGNAME}" ] ; then
LONGNAME="${LABEL}"
fi
......
cat << EOF
menuentry "${LONGNAME} (on ${DEVICE})" { ->好比改成menuentry "啓動 Windows XP" {
EOF
linux啓動項
linux)
LINUXPROBED="`linux-boot-prober ${DEVICE} 2> /dev/null | tr ' ' '^' | paste -s -d ' '`"
......
if [ -z "${LLABEL}" ] ; then
LLABEL="${LONGNAME}"
fi
cat << EOF
menuentry "${LLABEL} (on ${DEVICE})" { ->好比改成menuentry "啓動 Mandriva" {
EOF
macos啓動項
macosx)
OSXUUID="`grub-probe --target=fs_uuid --device ${DEVICE} 2> /dev/null`"
cat << EOF
menuentry "${LONGNAME} (on ${DEVICE})" { ->好比改成menuentry "啓動 MacOS" {
EOF
6)40_custom 自定義啓動項,按菜單標準格式在後面添加便可,如
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "啓動 Veket" {
set root=(hd0,8)
linux /veket/vmlinuz root=/dev/ram0 PMEDIA=hd
initrd /veket/initrd.gz
}
menuentry "啓動 CDLinux" {
set root=(hd0,8)
linux /CDlinux/bzImage root=/dev/ram0 vga=791 CDL_LANG=zh_CN.UTF-8
initrd /CDlinux/initrd
}
三、把各項腳本修改保存後,在終端執行
sudo update-grub
再執行
sudo gedit /boot/grub/grub.cfg
看看配置文件是否是和你想要的同樣了。
若是有不夠滿意的地方,從新修改下腳本文件,再執行sudo update-grub
四、ubuntu和windows雙系統,怎樣讓系統默認爲從windows啓動
在 /etc/grub.d目錄中的腳本文件的文件名都是以數字開頭,這肯定了在執行update-grub時各文件內容被執行的順序,咱們只要把 30_os-prober這個文件名的數字30改成05到10之間的數字便可(沒多少可選0六、0七、0八、09),好比改成08_os-prober, 這樣建立出來的grub.cfg內的菜單項,windows的排序就會自動在ubuntu以前。
5、使用grub2常見錯誤及修復方法
1、雙系統,重裝windows引發沒有ubuntu啓動項
使用安裝版的windows重裝windows時會改寫mbr,形成grub丟失,能夠用grub4dos引導進入ubuntu後修復grub或用livecd啓動後修復grub。
1)用grub4dos修復ubuntu
先下載最新版的grub4dos,下載地址http://nufans.net/grub4dos/ ,若是是xp系統,把grub4dos壓縮包內的grldr複製到C盤根目錄下,修改boot.ini,在最後加上一行 c:\grldr="grub4dos",
對 於vista/win7系統,把壓縮包內的grldr.mbr和grldr複製到C盤根目錄下,在C盤本身創建一個boot.ini文件,如有boot隱 藏分區的,先給boot分區分配盤符,再把grldr,grldr.mbr和boot.ini放在boot分區下,boot.ini內容以下:
Win7使用軟改激活的請不要使用此方法,不然會形成win7不能啓動。
而後在根目錄新建一個menu.lst,內容爲
timeout 0
default 0
title grub2
find --set-root /boot/grub/core.img
kernel /boot/grub/core.img
boot
(有/boot分區的改成
find –set-root /grub/core.img
kernel /grub/core.img)
重啓後選擇Grub4Dos會自動轉入grub2,從grub2菜單項選擇ubuntu啓動後,在終端執行
sudo grub-install /dev/sda
將grub裝入第一硬盤的mbr,如要裝入第二硬盤的mbr把sda改成sdb,第三硬盤爲sdc,類推。
至於要把grub裝到sda或sdb或sdc的mbr上,需根據本身狀況肯定,看看要設置哪一塊硬盤爲啓動盤,就把grub裝到那塊硬盤的mbr上。
2)用livecd修復grub
用ubuntu9.10的livecd啓動後,打開終端
假如你的ubuntu的 / 分區是sda7,又假如 /boot分區是 sda6,用livecd啓動,在終端下輸入
sudo -i
mount /dev/sda7 /mnt
mount /dev/sda6 /mnt/boot (若是沒 /boot 單獨分區這步跳過)
grub-install --root-directory=/mnt /dev/sda
和前面同樣,要裝入第二硬盤的把sda改成sdb。
若是grub.cfg己丟失,或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
exit
3)用帶grub啓動的光盤或U盤修復
若是手上有grub啓動的工具盤,用工具盤啓動,在grub菜單上按c進入命令行狀態,
在grub>提示符下輸入
grub>find /boot/grub/core.img (有/boot分區的用find /grub/core.img)
(hdx,y) (顯示查找到的分區號)
grub>root (hdx,y)
grub>kernel /boot/grub/core.img (/boot分區的用 kernel /grub/core.img)
grub>boot
執行boot後能轉入grub2菜單,啓動ubuntu後,再在ubuntu終端下執行
sudo grub-install /dev/sda (或sdb,sdc等)修復grub。
若是ubuntu的啓動分區使用ext4格式,要有支持ext4格式的grub才能修復。
4)沒安裝引導器的 grub4dos引導ubuntu的方法
按第一步的方法使用 boot.ini 創建grub4dos引導項,本身編寫 menu.lst,內容以下
timeout 3
default 0
title Ubuntu 9.10
root (hdx,y) --------> (hd0x,y) 爲 /boot分區的分區號
kernel /vmlinuz-xxx-generic root=/dev/sdxy ------->/dev/sdxy 爲 / 分區的分區號
initrd /initrd.img-xxx-generic
沒 /boot 分區的用
timeout 3
default 0
title Ubuntu 9.10
root (hdx,y)
kernel /boot/vmlinuz-xxx-generic root=/dev/sdxy
initrd /boot/initrd.img-xxx-generic
二、安裝時grub沒裝在mbr上而選擇裝在linux分區的pbr上,怎麼引導ubuntu
1)按前面的方法一,以grub4dos引導轉入grub2。
2)把ubuntu分區/boot/grub目錄下的boot.img提取出來,放到C盤根目錄下,而後修改boot.ini,在最後添加一行 C:\boot.img="grub2"
對vista/7可在C盤新建一個boot.ini,內容爲
[boot loader]
timeout=0
default=c:\boot.img
[operating systems]
c:\boot.img="grub2"
重啓後選擇grub2就可進入grub2菜單。
此法兼容性較差,成功率低,僅供測試。
三、因爲分區調整引發分區號或分區UUID改變形成的grub2不能正常啓動
己安裝好系統,對硬盤再次進行分區調整時可能會改變現有分區的分區號發生變化,或者某種緣由改變啓動分區的UUID,都會形成grub2不能正常啓動,而啓動進入修復模式(grub rescue),這時就要對grub進行修復。
1)用ubuntu9.10的livecd光盤啓動,進入試用桌面系統後,再修復grub,操做方法如第一種狀況的第二種方法—
2)在rescue模式下啓動並修復
因爲分區問題,啓動時會自動進入rescue模式,只要grub核心文件還在分區內,就能由rescue模式轉到normal模式,進而經過命令進入系統。下面這個就是rescue介面:
因爲在rescue模式下,只有少許的基本命令可用,必須經過必定的操做才能加載正常模塊,而後進入正常模式。
rescue模式下可以使用的命令有:set,ls,insmod,root,prefix(設置啓動路徑)
先假設grub2的核心文件在(hd0,8)分區,再來看看怎樣從rescue模式進入從(hd0,8)啓動的正常模式(normal)。
在rescue模式下search命令不能用,對不清楚grub2文件處於哪一個分區的,能夠用ls命令查看,好比
ls (hd0,8)/ 查看(hd0,8)分區根目錄,看看有沒有boot文件夾
ls (hd0,8)/boot/ 查看(hd0,8)分區的/boot目錄下文件
ls (hd0,8)/boot/grub/ 查看(hd0,8)分區/boot/grub目錄下文件
經過文件查看,能夠肯定grub2核心文件處於哪一個分區,接下來就能夠進行從rescue到normal的轉變更做:
1)分區號(hd0,8)在單獨使用時能夠不加小括弧,在使用路徑是必須加小括弧,如第2和第3步。
2)因爲grub2版本的的不一致,有的可能在第9步insmod normal.mod加載正常模塊後直接進入normal模式,即出現了normal grub>的提示符,這種狀況就不能執行第10步,便可以跳過normal命令的輸入。
3)雖然輸入normal命令會出現菜單,但因爲缺乏加載內核的Linux命令,直接從菜單不能進入系統,須要按c在命令行繼續操做。
4)使用/boot單獨分區的,要正確修改路徑,如
prefix=(hd0,8)/grub
insmod /grub/normal.mod
另外root=/dev/sda8也要修改根分區的分區號。
5)按boot啓動系統後,再在系統下打開終端,執行命令修復grub
重建配置文件grub.cfg
sudo update-grub
重建grub到第一硬盤mbr
sudo grub-install /dev/sda
4、雙硬盤雙系統 Grub Loading時間過長的解決方案
七、如何從grub2回到grub (wubi使用者勿試)
參考論壇資料: http://bbs.znpc.net/forumdisplay.php?fid=57&page=1