蓝山's Fantasy Space

Just another WordPress.com site

Monthly Archives: 五月 2009

Ubuntu 9.0.4 和Windows 7双系统安装笔记

某人系统太久没装,已经慢得没法用了,于是昨天在我的建议下重装了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谁先装谁后装都无所谓了,用上面的步骤总可以恢复到正确的启动菜单。也算是今天折腾得一大收获吧。