关于win7和ubuntu双系统引导的讨论(续)

来源:互联网 发布:金融大数据大会 编辑:程序博客网 时间:2024/06/06 07:48

    继上次搞定win7和ubuntu13.10 的双系统启动问题之后,总感觉那时候的处理不是太好,于是这段时间我又用闲暇时间看了些关于grub2的资料,然后对与ubuntu下的grub重新做了些修改,个人认为做了这些修改之后虽然结果跟没修改之前的差不多,但是现在呢已经可以执行update-grub等操作了。下面我简单的做些说明。

    首先,ubuntu13.10用的grub 2,与原来使用的grub有不少区别,这里不加解释了,可以上网搜索。我只介绍我的修改过程。

    上次谈到在我手动修改了grub 2之后不能执行update-grub等操作,那是因为在grub 2下 grub引导由系统根据硬件配置自动设置,所以每次执行update-grub之后我们手动修改的grub部分都会被重新根据硬件配置进行设置,当然了,我这里的讨论都是在一个前提下进行的,就是由自动生成的grub配置不能完成win7启动,这种情况下,我们可以按照下面的进行操作。

    在自动生成grub中有如下一段代码:

### BEGIN /etc/grub.d/30_os-prober ###  menuentry 'Windows 7 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-000290E40008E8A1' {      insmod ldm      insmod ntfs      set root='ldm/96052316-3faa-11e3-a105-b71f8290edda/Volume1'      if [ x$feature_platform_search_hint = xy ]; then        search --no-floppy --fs-uuid --set=root --hint-bios=hd0 --hint-efi=hd0 --hint-baremetal=ahci0 --hint='ldm/96052316-3faa-11e3-a105-b71f8290edda/Volume1'  000290E40008E8A1      else        search --no-floppy --fs-uuid --set=root 000290E40008E8A1      fi      chainloader +1  }  
我们细细的看第一行,
### BEGIN /etc/grub.d/30_os-prober ###  
可以大概知道这段代码是由 /etc/grub.d/30_os-prober 执行后生成的,这也就是我们不能执行update-grub的关键,由于该文件有点复杂,目前还没有时间解读,所以还不能从修改这里面的代码来实现对上面这一大段代码的修改(以后有机会会试试的),我们这里的操作就是把这个文件删掉,因为他是专门负责自动生成windows启动项的文件,不删除的话只要已更新在grub中就会出现这段win7的启动项,虽然这个启动项是没用的。

sudo rm /etc/grub.d/30_os-prober
删掉这个文件之后执行update-grub之后你会发现上面那段关于win7引导的代码没了,接下来有人会问那我的win7怎么引导呢,这个时候就要用到同一个文件夹里的40_custom文件了,这个文件是用于给我们手动添加其他操作系统的引导的,我们当然可以用它来写grub,添加如下代码:

menuentry "windows7" {      insmod part_msdos      insmod ntfs      insmod ntldr      search --file --set --no-floppy /bootmgr      ntldr ($root)/bootmgr    }  
有人会问,这段代码跟我们以前添加的代码不一样啊,其是他们的效果是一样的。将代码保存一下退出,然后

sudo update-grub
之后在/boot/grub/grub.cfg 中出现这样一段代码:
### BEGIN /etc/grub.d/40_custom #### This file provides an easy way to add custom menu entries.  Simply type the# menu entries you want to add after this comment.  Be careful not to change# the 'exec tail' line above.menuentry "windows7" {      insmod part_msdos      insmod ntfs      insmod ntldr      search --file --set --no-floppy /bootmgr      ntldr ($root)/bootmgr    }  ### END /etc/grub.d/40_custom ###
这就是对于win7的引导项了,好了,接下来重启,一定可以看到关于win7的引导,选择win7之后可能会提示你修复启动项,不用理他,直接选择正常启动即可。

这样修改以后不管是ubuntu更新还是你手动更新grub文件,都不会担心win7 的启动项没了又要重新设置了。