首页 > 代码库 > ubuntu14.04修复启动项

ubuntu14.04修复启动项

自从安装了ubuntu14.04系统后(win7+ubuntu双系统),一直使用grub来引导win7和ubuntu,很长一段时间都使用的很好。突然前两天win7进不去了,无奈之下就用pe修复了win7的启动项,开机后由原来的grub启动变为了windows的bootloader来启动(笔者猜想,pe在修复win的启动项时,一定修改了mbr的内容,以前mbr中存放的是grub的一部分,修复之后变成了win的bootloader了,猜想不一定正确)。无论怎样,windows总算能进去了。接着,笔者又在win7下用EasyBCD添加了ubuntu的启动项,如下图:

类型选择了第一项GRUB(legacy),驱动器选择了ubuntu被安装所在的分区。添加成功后,重启发现进不去ubuntu了,一直是黑屏,左上角有个光标不停闪烁。在此,笔者又猜想可能是当初在装ubuntu14.04时,grub程序的一部分仅仅被写入了整个磁盘的mbr中,而没有写入pbr(分区引导记录),因此一旦mbr中的grub被修改,就很难进入ubuntu了。而笔者曾经在一篇博文中貌似看到过,ubuntu在安装时会把grub的部分程序在mbr和pbr中各拷贝一份,这样的话,通过mbr和pbr均能引导成功ubuntu。不知此猜想是否正确。然后笔者用U盘制作了ubuntu14.04的启动盘,在livecd模式中进行修复,步骤如下:

1.开机u盘启动,进入ubuntu安装程序,图形界面出来后,选择try ubuntu,不要选择install ubuntu。

2.之后便进入了ubuntu的体验环境。

3.打开一个Terminal

执行:sudo -i   (切换成root用户)

        fdisk -l    (查看磁盘的分区情况,笔者的/boot目录是单独的分区,大小200M,因此一眼就看出了,分区设备为/dev/sda8)

        mkdir /mnt/root    (目录创建在哪里不重要,目的是为了挂载/dev/sda8设备)

    mount /dev/sda8 /mnt/root

        gurb-install --boot-directoty=/mnt/root /dev/sda     (安装grub,将其安装在/mnt/root/grub目录下,/dev/sda指示了/mnt/root所在的设备)

        至此,会提示no error reported,安装成功。重启电脑后又恢复成了grub来引导。(笔者猜想,在进行grub安装时,又将mbr内容修改为grub的部分程序,才能在开机时出现grub的引导界面)

在grub的引导界面中,有多个启动项可供选择,其中第一个启动项是ubuntu,最后一个是win7启动项。笔者选择ubuntu,可以正常进入ubuntu中;选择win7时,又会出现win7的启动项选择界面(grub加载了win7所在分区的引导程序pbr),该界面由两个启动项,win7和ubuntu(该ubuntu启动项是以前用easyBCD设置的),此时再选择ubuntu的话,依然是黑屏,左上角光标闪烁,进不去系统。因此,笔者分析,上边的第二个猜想是错的,应该不是ubuntu所在分区的pbr没有被写入的原因,因为grub已经被修复了,依然进不去ubuntu系统。笔者大胆猜想,ubuntu14.04作为最新版的系统,会不会是grub版本的问题,于是在easyBCD中,重新制作ubuntu启动项,类型选择为第二项GRUB 2,结果重启后果然能进入ubuntu了,如下图:

在此,笔者大胆总结下,在安装win+ubuntu双系统时,其实无所谓安装顺序,大不了后安装的系统的引导程序覆盖掉了mbr,将启动界面变为了后安装系统的启动项。我们只要加以修复即可。如果后安装win的话,win的loadboot覆盖掉了mbr,没关系,我们进入win后,在easyBCD中设置一下ubuntu的启动项,驱动器选择ubuntu被安装的分区,类型选择时要小心,根据ubuntu的版本高低,选择第一项GRUB(legacy)或者第二项GRUB 2,高版本的话选第二项(此处如果选择不合适的话,照样无法启动ubuntu系统,会出现黑屏并且左上角光标闪烁的现象);如果后安装ubuntu的话,grub将覆盖掉mbr,这样更好,grub的启动界面上最后一项已经帮我们把win7的启动项自动添加上了,直接选择即可。

ubuntu14.04修复启动项