赞
踩
由于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
#加载变量,如果在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 ###
实例:
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
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。