很多时候,我们会装windows和Linux双系统,一般都是先装windows后装linux,这时就是由linux来管理系统的引导和启动。当
重装windows系统后,就只能看到windows的引导信息,而无法进入linux。此时就需要修复Grub,来恢复linux的引导。
加电开机,引导系统的过程:BIOS-->MBR-->GRUB-->KERNEL-->INIT
GNU GRUB(GRand Unified Bootloader)是一个由GNU项目提供的多重操作系统启动管理器,用来引导不同的系统。按照版本
来区分,GRUB可分成Grub Legacy和GRUB2。版本号是0.9x以及之前的版本都称为Grub Legacy,从1.x开始的就称为GRUB2。
Grub Legacy的修复:
1. sudo grub // grub>
2. find /boot/grub/stage1
3. root(hdx,y) // IDE硬盘用hd表示,SCSI硬盘用sda表示
4. setup(hdx)
5. quit
GRUB2的修复:
1.find /boot/grub/core.img // 查找可引导分区 (若boot单独分区则:find /grub/core.img)
2.kernel (sda0,1)/boot/grub/core.img // 使用该分区引导(boot单独分区则:kernel /grub/core.img)
3.boot // 寻找BIOS,并改写4.sudo grub-install /dev/sda // 安装grub到/dev/sda
5.upgrade-from-grub-legacy // 更新
重装windows后,丢失GRUB引导。使用LiveCD修复GRUB:
1. 挂载Ubuntu分区(/dev/sdaX /media/dir1)
2. 执行grub-install命令(grub-install --root-directory=/media/dir1 /dev/sda)
3. 若GRUB没有损坏,则重启后可正常使用;若GRUB已损坏,重启后在grub rescue> 提示符下进行修复
开机出现grub rescue> 修复方法:
1. 先用ls命令,找到Ubuntu的引导分区:grub rescue>ls
此时罗列出所有的磁盘分区信息:(hd0),(hd0,msdos3),(hd0,msdos2),(hd0,msdos1)
2. grub rescue>ls (hd0,msdos3)/boot/grub // 假如引导分区是第三分区,使用该命令尝试
3. 逐个分区尝试,若找到(hd0,msdos3)时,显示目录下的文件,说明Linux安装在该分区4. grub rescue>set root=(hd0,msdos3)
grub rescue>set prefix=(hd0,msdos3)/boot/grub
grub rescue>insmod /boot/grub/normal.mod // 也可尝试insmod (hd0,msdos3)/boot/grub/normal.mod
5. grub rescue>normal // 此时,引导进入linux6. 进入linux之后,终端执行: sudo update-grub sudo grub-install /dev/sda
7. 重启后,检查是否恢复GRUB启动菜单 // vi /boot/grub/grub.cfg查看GRUB2的引导配置
// /boot/grub/menu.list文件是Grub Legacy的引导配置文件,在GRUB2中已不存在
参考文档:
GRUB启动分析:http://blog.chinaunix.net/uid-24774106-id-3497929.html
注:
参考Ubuntu 12.04系统