用 Win7 引导 grub4dos,以及用 grub 引导 Win7

以前在 Windows XP 中用 grub4dos 引导 linux 很容易,直接改 boot.ini 就行了。现在换了 Win7 ,结果反而更麻烦了。

 

基本步骤是:

  1. 下载 grub4dos:https://gna.org/projects/grub4dos/
  2. 把 grldr.mbr 和 grldr 拷到 C:/
  3. 用 bcdedit 添加一个 bootsector 类型的 BCD 启动项,运行 grldr.mbr
  4. 启动的时候,grldr.mbr 会在各个分区下搜索 grldr,并装载之

详见:
http://bbs.znpc.net/viewthread.php?tid=2300&extra=&page=1
http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos安装和启动

 

但我遇到的问题更麻烦:我的 Win7 是用 grldr 模拟 BIOS 激活的!

 

也就是说 MBR 里的内容已经是 grldr.mbr,而且 C:/ 本来就有一个 grldr ,但那个 grldr 是定制过的,包含着 BIOS 信息,还自带了 menu.lst,我不能覆盖,也不能修改。

 

经过各种尝试,终于找到了一种解决方案:用 16 进制编辑器修改 grldr.mbr ,将里面的 grldr 全部替换成 gdldr 。再把 grub4dos 原版的那个 grldr 改名为 gdldr 放在 C:/ 下。这样 Win7 启动的时候,选择 grldr.mbr 的菜单,会查找 gdldr 并装载。如此一来就完美地解决了用 grldr 激活的的 Win7 无法再使用 grldr 引导 linux 的问题。

 

大家可以参考下面两幅图:

 

1. 如果不修改 grldr.mbr,只用常规方法的话,会陷入死循环:

用 Win7 引导 grub4dos,以及用 grub 引导 Win7_第1张图片

 

2. 修改 grldr.mbr ,成功跳出死循环:

用 Win7 引导 grub4dos,以及用 grub 引导 Win7_第2张图片

 

还有就是 menu.lst 的写法。因为我希望在 Windows 的引导菜单能够进入 grub,而在 grub 的菜单中也能回到 Windows。在 grub 中引导 Windows XP 我们只需要这样写:

title Windows XP rootnoverify (hd0,0) chainloader +1

但自从 Vista 之后,Windows 的引导管理器就由 ntldr 变成了 bootmgr ,menu.lst 的写法也要这样:

title Windows 7 acpi fallback 1 root (hd0,0) chainloader /bootmgr

 

你可能感兴趣的:(用 Win7 引导 grub4dos,以及用 grub 引导 Win7)