修复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)
第一个硬盘第一个分区上有windows xp系统,我们可以这样引导。
grub>set root=(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.sys  msdos.sys  command.com  bootlog.prv bootlog.txt
我们在用到磁盘里的某个文件或目录时,可以按tab键进行列出,和linux命令的tab相似

2、显示linux分区里的文件
我的linux分区是(hd0,3) //dev/sda3

ls (hd0,3)/    [按tab显示当前文件,他还有补全的功能]


引导linux
我们首先知道内核文件vmlinuz-xxxx... 和initrd.img-xxxx(boot loader初始化内存盘)在boot目录里,而我的linux系统在(hd0,3)分区中

#指定用于启动的分区
grub> set root=(hd0,3)
#指定内核文件,linux的意思是用linux取代grub中的kernel命令
grub> linux  /boot/vmlinuz-xxx-xxx root=/dev/sda3  [里面的文件名可以按tab查看]
#指定initrd文件
grub> initrd /boot/initrd.img-xxx-xxx [文件名可以按tab查看]
#引导
grub> boot

我试着把这两个文件复制到dos分区,也可以出现一个 linux界面,里面有也linux常用的目录结构(我对这东西不了解,就想像成一个最简单的linux吧)

常用的功能:

set:
设置变量
如:
 set default=0
set timeout=5
set root=(hd0,3)

等等

default :

默认引导的操作系统,0表示第一个,1表示第二个...

timeout:
定义在指定时间内没有按键盘上的某个键 ,自动引导default指定的操作系统

root:
指定用于启动的分区

insmod和rmmod:
加载和移除模块
如:
insmod   jpeg
insmod   png
insmod   ntfs
rmmod    png



drivemap
他是兼容grub的map,主要用于只能从第一硬盘(hd0)引导启动的系统,如win2000,xp,2003等 。如:要添加第二硬盘第一分区上的xp系统

menuentry "windows xp"{
set root=(hd1,1)
drivemap -s (hd0)  ${root}   
  //访问变量"${变量名}"
chainloader +1  //此处'+1'是指示GRUB读入分区的第一个扇区的引导记录。即调用另一个启动器,如:chainloader(hd0,1) +1
}



实验(3):修复grub :livecd

1、先把 /boot/grub/grub.cfg删除 sudo rm /boot/grub/grub.cfg
2、从dos启动计算机把mbr清空,fdisk/mbr,我用的是sfdisk也可以的
3、用livecd引导计算机
ctrl+alt+1  //进入到控制台
sudo -i //进入超级用户
fdisk -l  //查看分区情况
发现
/dev/sda3   305  2610  18522945  83 Linux
这个是我的硬盘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 "run msdos ..."{
set root=(hd0,1)
chainloader +1
}

把timeout设置>0这样就能看到启动菜单多一项了,选择进入成功。

你可能感兴趣的:(c,windows,linux,XP,dos)