他人经验一:
一直在使用Windows与Ubuntu双系统(估计很多的linuxer都是这种情况)。前一段时间重装了Win7,然后启动后便会不选择系统而直接进入Windows。原因其实蛮好想的,就是因为Windows的引导程序覆盖了MBR,启动时不再使用grub引导。至于修复方法,下面是一些总结。
这个问题具体的解决方案很多,但总体的思路其实就两步:第一步、想尽一切办法进入linux;第二步、在linux环境下用grub重新覆盖MBR。
对于第一步,我采取的方法是使用grub4dos。
首先下载grub4dos,这个随便一搜就有,估计很多人最初安装linux是就用到过。
解压后把grub.exe,grldr复制到C盘的根目录。注意,win7的C盘中原有一个grldr,是一个隐藏着的系统文件。在复制时一定要将它备份好,以后还会用得到。网上的解决方案说还要复制menu.lst,其实这个不是必须的,没有它也可以解决问题。
然后重启系统。因为使用了grub4dos的grldr,所以会由grub.exe来引导启动。引导时它会自动搜索menu.lst,找不到就会进入命令行模式。然后就要在grub4dos的命令行中启动linux。这个就比较容易了
grub>root (hd0,x) (x表示/boot分区的编号)
grub>kernel /vmlinuz-x.xx.xx-xx-generic root=/dev/sdaY (xx表示kernel的版本,可以用ls命令看一下/boot下面这个文件的名字是什么;而最后面的Y是/分区的编号。需要注意的是,采用(hdo,x)的表示方法时,编号是从0开始的;采取/dev/sdaY表示方法时,编号是从1开始的)
grub>initrd /initrd-x.xx.xx-xx-generic (xx和上一条命令里的一样,都是kernel版本)
grub>boot
这时候应该就可以进入linux了。
第二步要用grub覆盖MBR
这一步就更简单了。首先更新一下grub,使它可以识别win7
sudo update-grub
更新之后,输入命令覆盖MBR。具体的命令因grub版本而异。我用的系统为ubuntu10.10,使用grub2。它需要的命令只有一句话
sudo grub-install /dev/sda
如果提示安装成功,那就大功告成了。重启计算机,就又看到熟悉的grub选择界面了。
对于grub1(ubuntu9.10之前的版本使用),需要先将/挂载到/mnt。如果有/boot分区,再将/boot挂载到 /mnt/boot。然后执行命令
sudo grub-install --root-directory=/mnt / /dev/sda
grub1的方法我没有实际尝试过,仅仅列在这里而已。
他人经验二:
如果你目前系统是双系统win7+ubuntu,当你重装了WIN7后,开机启动界面的ubuntu引导将丢失,需要用下面的方法进行修复引导:
1、制作一块ubuntu.iso镜像文件到U盘启动盘;
2、将U盘插入计算机,然后在bios设置硬盘启动方式,选择优先以U盘启动;
3、U盘启动进入ubuntu试用系统后,按ctrl+alt+t组合键打开终端;
4、在终端输入如下命令:
sudo -i回车 //获取root管理员权限
fdisk -l回车 //l是L的小写字母,查看盘符列表,会显示如下信息:
Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x70f7ab9c
Device Boot Start End Blocks Id System
/dev/sda1 1 1627 13060096 27 Unknown
Partition 1 does not end on cylinder boundary.
/dev/sda2 * 1627 1639102400 7 HPFS/NTFS
Partition 2 does not end on cylinder boundary.
/dev/sda3 1639 8166 52429859 7 HPFS/NTFS
/dev/sda4 8167 38913 246975277+ 5 Extended
/dev/sda5 8167 32385 194539082+ 7 HPFS/NTFS
/dev/sda6 32386 38788 51432066 83 Linux
/dev/sda7 38789 38913 1004031 82 Linux swap / Solaris
然后找到有Linux字样的盘符,上面是sda6,表示ubuntu是安装到了sda6分区;
5、在终端继续输入:
cd /mnt回车
mkdir tmp回车
mount /dev/sda* /mnt/tmp回车
(*代表ubuntu系统所在的分区,即上一步显示结果中ID为83的分区号,如上面显示的是在sda6这个分区,
所以输入的是mount /dev/sda6 /mnt/tmp
注意:mount后面有一个空格,sda6后面也有一个空格,这两个空格千万不要漏掉,否则会报错)
6、继续终端输入:
grub-install –root-directory=/mnt/tmp/ /dev/sda回车
等待一会儿,若出现Installationfinished,No Error Reported则表示成功了;
(注意:grub-install之间没有空格,–root前面有一个空格,–root前面是两个’-’,/mnt/tmp后面有一个空格)
7、ubuntu引导基本恢复,重启电脑后,就可以看到熟悉的ubuntu引导界面了,进入ubuntu系统,打开终端输入:
sudo update-grub回车
等待片刻显示以下信息:
Generating grub.cfg …
Found linux image: /boot/vmlinuz-2.6.31-20-generic
Found initrd image: /boot/initrd.img-2.6.31-20-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows Vista (loader) on /dev/sda1
Found Windows 7 (loader) on /dev/sda2
done
ubuntu引导恢复工作便全部完成了。
8、重启计算机。
自己摸索的办法:
因为是ubuntu 14.04, 亲试之后证明mount挂载的办法不再好用,按“他人经验二”的办法执行后,Ubuntu可是显示并进入,但重启进入win7后会报错“error: no such device: 000207CF000EBD30. Setting partition type to 0x7 Press any key to continue ....”
将以上两种办法结合用,解决了问题:
1、制作一块ubuntu.iso镜像文件到U盘启动盘;
2、将U盘插入计算机,然后在bios设置硬盘启动方式,选择优先以U盘启动;
3、U盘启动进入ubuntu试用系统后,按ctrl+alt+t组合键打开终端;
4、在终端输入如下命令:
sudo update-grub
更新之后,输入命令覆盖MBR。具体的命令因grub版本而异。我用的系统为ubuntu14.04,使用grub2。它需要的命令只有一句话
sudo grub-install /dev/sda
如果提示安装成功,那就大功告成了。重启计算机,就又看到熟悉的grub选择界面了。