修复grub2
关于grub2
由于做windows把mbr覆盖了,所以在修复时学习一下grub2的知识
一、设备的命名
grub2同样是以fd表示软盘,hd表示硬盘(包含IDE和SCSI硬盘)。设备从0开始编号的,分区则是从1开始编号的,主分区是1-4,逻辑分区从5开始。
(fd0):表示整个软件盘
(hd0,1):表示biso中第一个硬盘的第一个分区。
(hd0,5)/boot/vmlinuz:表示bios中第一个硬盘的第一个逻辑分区的boot目录下的vmlinuz文件。
二、grub2的安装与启动
安装ubuntu9.10时,grub默认安装在第一个硬盘(hdo)的mbr上,其实就是把引导文件boot.img写入硬盘的mbr。当然也可以选择不写入mbr,而写入linux分区的引导扇区中。
启动时根据mbr所提供的信息找到启动分区,加载分区的grub核心文件core.img和配置文件grub.cfg,进入选择菜单。
启动出现菜单时,按e键进入编辑状态,按c键进入命令行模式。control+x以编辑的内容启动,control+c进入命令状态,按esc返回菜单项。
按c键进入命令行模式后,可以按tab查看命令,根据需要进行加载或移除相应的模块。
实验(1)
第一个硬盘第一个分区上有windowsxp系统,我们可以这样引导。
grub>setroot=(hd0,1)
grub>chainloader+1
grub>boot
//我的第一个分区装的是msdos系统,测试成功。
ls命令:
ls//显示出磁盘设备
ls-l//能显示出分区及文件类型,uuid等信息
ls///列出当前设置的root分区下的文件
ls(hd0,1)///列出(hd0,1)分区下的文件
实验(2)
1、第一个分区是msdos系统,看看里面有什么文件
ls(hd0,1)/
显示出:io.sysmsdos.syscommand.combootlog.prvbootlog.txt
我们在用到磁盘里的某个文件或目录时,可以按tab键进行列出,和linux命令的tab相似
2、显示linux分区里的文件
我的linux分区是(hd0,3)//dev/sda3
ls(hd0,3)/[按tab显示当前文件,他还有补全的功能]
引导linux
我们首先知道内核文件vmlinuz-xxxx...和initrd.img-xxxx(bootloader初始化内存盘)在boot目录里,而我的linux系统在(hd0,3)分区中
#指定用于启动的分区
grub>setroot=(hd0,3)
#指定内核文件,linux的意思是用linux取代grub中的kernel命令
grub>linux/boot/vmlinuz-xxx-xxxroot=/dev/sda3[里面的文件名可以按tab查看]
#指定initrd文件
grub>initrd/boot/initrd.img-xxx-xxx[文件名可以按tab查看]
#引导
grub>boot
我试着把这两个文件复制到dos分区,也可以出现一个linux界面,里面有也linux常用的目录结构(我对这东西不了解,就想像成一个最简单的linux吧)
常用的功能:
set:
设置变量
如:
setdefault=0
settimeout=5
setroot=(hd0,3)
等等
default:
默认引导的操作系统,0表示第一个,1表示第二个...
timeout:
定义在指定时间内没有按键盘上的某个键,自动引导default指定的操作系统
root:
指定用于启动的分区
insmod和rmmod:
加载和移除模块
如:
insmodjpeg
insmodpng
insmodntfs
rmmodpng
等
drivemap
他是兼容grub的map,主要用于只能从第一硬盘(hd0)引导启动的系统,如win2000,xp,2003等。如:要添加第二硬盘第一分区上的xp系统
menuentry"windowsxp"{
setroot=(hd1,1)
drivemap-s(hd0)${root}//访问变量"${变量名}"
chainloader+1//此处'+1'是指示GRUB读入分区的第一个扇区的引导记录。即调用另一个启动器,如:chainloader(hd0,1)+1
}
实验(3):修复grub:livecd
1、先把/boot/grub/grub.cfg删除sudorm/boot/grub/grub.cfg
2、从dos启动计算机把mbr清空,fdisk/mbr,我用的是sfdisk也可以的
3、用livecd引导计算机
ctrl+alt+1//进入到控制台
sudo-i//进入超级用户
fdisk-l//查看分区情况
发现
/dev/sda330526101852294583Linux
这个是我的硬盘linux所在的分区
挂载这个分区
mkdir/mnt/mylinux
mount/dev/sda3/mnt/mylinux
安装grub
grub-install--root-directory=/mnt/mylinux/dev/sda
///dev/sda指定要安装到哪个设备上
//--root-directory是挂载的原先系统的/
生成grub.cfg
我按教程做的,没有成功,我也不知道为什么。但我直接运行
update-grub就自动建立菜单了,但默认的没有我的msdos分区的引导
menuentry"runmsdos..."{
setroot=(hd0,1)
chainloader+1
}
把timeout设置>0这样就能看到启动菜单多一项了,选择进入成功。