GRUB的的存在有两种类型:第一种是Stage1和Stage2(Stage1.5)分离的,第二种就是两个阶段合体。

第一种是很多Linux发行版使用的方式。这种方式将Stage1安装到分区的0扇区(比如MBR上),然后将Stage2(Stage1.5)安装到其他地方(比如磁盘上的其他分区或者其他位置)。

第二种在Grub4DOS等方式中比较常见。类似的还有Ubuntu的Wubi、深度等还原系统使用的BOOT方式。特点就是两个阶段的镜像合二为一。

第二种方式主要是用于在Windows中使用。优点就是不必调整分区、不必修改MBR等分区数据。只需要把grub的引导文件复制到某个分区中,然后通过boot.ini指定这个文件的路径即可实现Grub的引导。缺点就是要求MBR中有Windows的NTLDR程序。由于NTLDR本身的缺陷,这种方式无法在非硬盘介质上使用,比如U盘。

第一种方式稍微复杂一点。需要修改分区的MBR。但有点就是对介质的支持比较广泛,也是完整的GRUB方案。本文主要讲解的就是这种方式。

假设本地电脑上有一块硬盘,一块U盘。并且U盘上有两个分区。第一个分区是FAT32格式的,用作普通的U盘使用。第二个分区为EXT2(其他GRUB支持的也可,比如笔者比较偏爱XFS,就使用的XFS),用于保存GRUB启动文件(亦即Stage2(Stage1.5))。

操作大致分为两个步骤:

第一步,安装Grub的Stage2到U盘的第二个分区。之所以先执行这一步,是因为第二步会依赖这里安装的文件。方法很简单:

1、挂载U盘上的启动分区:mount /dev/sdb2 /mnt

2、安装Stage2阶段的grub:grub-install /dev/sdb –root-directory=/mnt

这里就搞定了Stage2阶段的安装,也就完成了第一步。

第二步非常重要,也是最容易被人忽略掉的。就是要安装Grub的Stage1到MBR中。方法如下:

3、进入grub:grub

4、在GRUB命令提示符中,将grub的当前根分区切换到保存有Stage2阶段文件所在的第二个分区:root (hd1,1)

5、在GRUB命令提示符中,安装GRUB的Stage1到MBR上:setup (hd1)

6、最后退出GRUB命令提示符即可:quit

这样就完成了第二阶段的安装了。这个时候重新启动电脑,设置为U盘启动,就可以进入GRUB了。不过这里只是进入的GRUB,还不能自动启动硬盘上的OS。因为GRUB的启动项配置menu.lst文件我们还没有修改呢。

修改这个文件就很简单了,直接将硬盘上已有的这个文件复制到U盘的启动分区,然后一定要修改磁盘的编号,也就是(hdm,n)中的m。为什么呢?

因为从U盘启动后,GRUB会将U盘认定为(hd0),将随后的硬盘从(hd1)开始编号。这和我们从硬盘启动相反。硬盘启动的时候会将GRUB所在的硬盘作为(hd0),其他硬盘依次编号,最后是U盘。

所以这里需要修改一下menu.lst,将对应的磁盘编号改成新的顺序。或者直接用下面的命令交换两个磁盘编号:

map (hd0) (hd1)

map (hd1) (hd0)