某人系统太久没装,已经慢得没法用了,于是昨天在我的建议下重装了windows7 RC,反正可以用到2010年4月,到那时估计这个系统也该被折腾得差不多了。今天说是工作需要,又要装Linux,之前用的是Suse,这次想换换口 味,就选择了ubuntu 9.0.4。之后就开始了长达一天的折腾,连我也折腾进去,甚至放弃了我宝贵的街霸4的时间。
(以下为本人折腾得一点心得和笔记,如有错误麻烦指出)
基 本上,鉴于windows和linux分别采用BCD和grub两种方式进行boot,故而双系统启动可以表现为BCD内包含grub的windows boot manager占主导地位的启动方式,也可以是Grub主导然后启动windows boot manager的方式。我这里的问题可以描述为,先安装windows 7,然后安装Ubuntu,启动菜单里看不见windows,无法双系统启动。
然后就开始折腾,走了不少弯路。
1、首先用Windows 7安装盘进入修复控制台,恢复了启动选项。restart后之能看见Windows启动选项了。
2、使用easyBCD工具添加了linux grub启动entry。重启后增加了grub启动选项,但是点击grub选项之后进入的仍然是之前硬盘安装linux放在C盘的的menu.lst菜单,仍然无法启动linux。
3、使用Ubuntu live cd启动ubuntu,根据参考文献[https://help.ubuntu.com/community/RecoveringUbuntuAfterInstallingWindows]使用命令修复grub,
1: sudo grub
2: //或者也可以sudo -i,直接获得root权限,不过下面的操作要格外小心
3: grub>
4: //Type the following and press enter: find /boot/grub/stage1,If you get "Error 15: File not found",
5: // try the following:
6: grub>find /grub/stage1
7: //Using this information, set the root device (fill in X,Y with whatever the find command returned):
8: grub> root (hdX,Y)
9: //Install Grub:
10: grub> setup (hd0)
11: //(In case you want to install GRUB to another drive (like hdX) use the above command as 'setup (hdX)' and //then continue)
12: //Exit Grub:
13: grub> quit
与此同时,修改/boot/grub/menu.lst,添加windows启动项:
1: title Windows XP/Vista # You can use any title you wish, this will appear on your grub boot menu
2: rootnoverify (hd0,0) #(hd0,0) will be most common, you may need to adjust accordingly
3: makeactive
4: chainloader +1
修复完毕,重新启动,发现还是老样子,grub根本没有启动,所以还是无法进入linux。
4、遂决定采用上述参考文献的第二招,‘Overwriting the Windows bootloader’,进入live ubuntu,开启终端,敲入下列命令:
1: fdisk -l
2: mkdir /mnt/root
3: mkdir /mnt/root/boot
4: mount -t ext3 /dev/sda2 /mnt/root
5: mount -t ext3 /dev/sda1 /mnt/root/boot
6: sudo grub-install --root-directory=/mnt/root /dev/sda
重启后发现还是不能奏效,崩溃。这次更加彻底,干脆进不了任何引导界面了,开机直接跳入命令提示符形式的‘grub>’。上网查了些文献,一般认为是grub无法定位到menu.lst导致,在这种情况下敲入下列命令应该还可以进入系统:
启动windows
grub>root (hd0,0)
grub>rootnoverify (hd0,0)
grub>chainloader +1
启动linux
grub>root (hd0,0) //需要根据实际安装的分区情况更改盘符
grub>kernel /boot/vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet //版本号也需要根据实际情况修改
grub>initrd /boot/initrd-2.6.18-53.el5.img
grub>boot (hd0,7) /需要根据实际安装的分区情况更改盘符
可以看出,这种情况实际相当于手动敲入了menu.lst的内容。因为手动敲入grub命令可以顺利进入系统,因而顺理成章的怀疑到是否menu.lst放置的位置不对。抑或是有另一个grub文件夹? (!?)
5、 再次live cd启动进入Ubuntu,直奔/boot分区,发现果然存在/boot/grub和/boot/boot/grub两个目录,而后者目录中并无 menu.lst文件。估计是grub-install的时候,新建立的grub文件夹放在/boot/boot下了,而先前的menu.lst文件还在 老文件夹内。为了验证这一想法。将上述两个grub文件夹改名grub1,再次执行grub-install,发现果然多了一个/boot/boot /grub文件夹,而且其中并没有menu.lst文件。至此,基本问题已经定位清楚,将menu.lst文件cp至新grub文件夹中。然后满心欢喜的 敲入reboot命令。不出所料,成功地看到了grub菜单,windows和linux都赫然在列。
总结一下全过程,其实绕了不少弯路,正确的做法应当是:
装Wdinwos7–> Ubuntu –> live cd启动(修复grub,更改menu.lst)-> 拷贝menu.lst到正确位置->重启。
不过,有了上面的经历,以后是windows,ubuntu谁先装谁后装都无所谓了,用上面的步骤总可以恢复到正确的启动菜单。也算是今天折腾得一大收获吧。