- 论坛徽章:
- 0
|
GRUB有几个重要的文件,STAGE1、STAGE1.5、STAGE2
STAGE1:它只有512字节,通常放在MBR中,它的作用很简单,就是在系统启动时用于装载STAGE2并将控制权交给它。
STAGE2:GRUB的核心,所有的功能都是由它实现。
STAGE1.5:介于STAGE1和STAGE2之间,是它们的桥梁,因为STAGE2较大,通常都是放在一个文件系统当中的,但是STAGE1并不能识别文件系统格式,所以才需要STAGE1.5来引导位于某个文件系统当中的STAGE2。根据文件系统格式的不同,STAGE1.5也需要相应的文件,如:e2fs_stage1_5,fat_stage1_5,分别用于识别ext和fat的文件系统格式。引导顺序如下:STAGE1->;STAGE1.5->;STAGE2,由于STAGE1不能识别文件系统格式,所以STAGE1只能通过如:(HD0,0)1+22的格式来读取STAGE1.5。
例:在GRUB中执行:root (hd0,0);setup (hd0)。其实setup就是调用了install命令来安装GRUB到硬盘上的。详细命令如:embed /boot/grub/e2fs_stage1_5 (hd0)
install /boot/grub/stage1 (hd0) (hd0)1+22 p (hd0,0)/boot/grub/stage2 /boot/grub/grub.conf
由上面的命令看出,stage1写进了(hd0)的MBR中,stage1.5写进了(hd0)MBR以后的22个扇区中(将stage1.5写进MBR以后的扇区中,会不会影响正常的文件系统?不会,因为stage1.5较小,只占22个扇区,硬盘上第一个文件系统的开始扇区最小也只能从0柱面,1磁头,1扇区开始。就是说MBR所在磁头就只用到了1个扇区而已,按照现在硬盘的规格来说,一般一个磁头都有60+个扇区,所以这些扇区可以用来放STAGE1.5,但是放STAGE2就不够了,所以只能将STAGE2放进文件系统中了),为了证明这一点,执行dd if=/boot/grub/stage1 of=/dev/hda bs=512 count=1 seek=1,将stage1写进原本是stage1.5的位置上。结果系统引导时屏幕上不停的出现GRUB,一直这样这样循环,看来这是对的。
硬盘搞清楚了后,就来弄软盘,以前见过有人说制作引导软盘的格式如下:dd if=/boot/grub/stage1 of=/dev/fd0
dd if=/boot/grub/stage2 of=/dev/fd0 seek=1
自己试了一下,不能进行引导,猜一下可能是直接将STAGE1写进/dev/fd0的开始扇区不行,需要配置,于是我又加了一步,就是在GRUB环境中执行:install /boot/grub/stage1 (fd0) (fd0)1+255,这一步会重写fd0并进行正确的配置,指示STAGE1读(fd0)1+255以后的扇区进行引导,255是写入STAGE2需要的扇区数。用这张软盘启动,成功。在这里没有用到STAGE1.5,因为STAGE2直接写进扇区,没有放在文件系统中。这样的引导软盘有个缺点,就是不能将它格式成任何文件系统,从而导致不能将kernel放进软盘中。
后来将软盘格式化成ext2格式,安装后发现不能正确从软盘引导,放在软盘上的STAGE2文件根本不能被识别。难道GRUB不支持软盘为ext2格式?请高手赐教。
然后又将软盘格式化成vfat格式,将stage2拷贝到根目录下,在GRUB环境中执行:install /boot/grub/stage1 (fd0) (fd0)/stage2,这样可以进行引导,这里将STAGE2放在了文件系统中,但是并没有用到STAGE1.5,为什么也可以引导STAGE2呢?难道STAGE1支持vfat的文件格式?。
现在又回到硬盘上吧,刚才我将stage1写进(hd,0)1+1中,也就是本应该放stage1.5的地方,启动时不停的循环出现GRUB,不能正常引导,后来用软盘引导进入后,在GRUB环境中执行:install (hd0,0)/boot/grub/stage1 (hd0) (hd0,0)/boot/grub/stage2,这里没有用到STAGE1.5,重新用硬盘引导,成功。why?为什么STAGE1可以读取ext2文件系统中的文件?
以上是我本人在使用GRUB时遇到的一些问题,希望高手给予解答。也希望大家都来更深入的了解GRUB。 |
|