对于Linux与Windows共存的机器,如果在安装的时候先安装了Linux,而后进行Windows的安装。这时候Windows会将mbr中的grub loader覆盖掉,这样安装后Linux将无法启动。
在XP之前的时代,Windows系统是通过boot.ini配置文件来进行启动项的配置的。 这时候,可以使用Grub4Dos,并且通过在boot.ini的最后追加一条C:/grldr=GRUB来启动Grub4Dos,进而进入Linux系统。
而Vista/Win7的系统,boot.ini这个文件已经取消。取而代之的是叫做BCD的启动配置文件。该文件需要通过BCDEdit程序来配置。
通过BCDEdit程序添加对Grub4Dos的动作如下:
1. 将grldr.mbr, grldr, menu.lst放在Vista/Win7系统根目录
2. 在Vista/Win7系统上,以管理员身份运行cmd.exe
3. 添加新的启动项, 添加成功后会返回一串{id}值
bcdedit /create /d "Grub4Dos" /application bootsector[1]
4. 设置启动项设备分区为grldr.mbr, grldr, menu.lst所存在的目录,即系统根目录。
bcdedit /set {id} device partition=系统根目录[2]
5. 设置启动项所要运行的文件
bcdedit /set {id} path /grldr.mbr
6. 将该启动项激活
bcdedit /displayorder {id} /addlast[3]
通过以上设置,在Vista/Win7的启动界面上将出现Grub4Dos的启动项,选择后就可以进入Grub了。
[1] 注意,这里是通过grldr.mbr文件(即grldr的前几个字节)启动Grub4Dos的,所以要application要指定为bootsector。 直接通过grldr文件,指定application为osloader的时候,无法启动Grub4Dos。这点我还没有弄明白。
[2] 直接指定boot做为device也是可以的。
[3] 创建出来的启动项并不直接处于激活状态,必须通过/displayorder选项或者/bootsequence选项添加到激活的启动项列表中。
通过bcedit /enum命令只能看到激活的启动项。