(1)boot.img 在BIOS平台下,boot.img是grub启动的第一个img文件,它被写入到MBR中或分区的boot sector中,因为boot sector的大小是512字节,所以该img文件的大小也是512字节。 boot.img唯一的作用是读取属于core.img的第一个扇区并跳转到它身上,将控制权交给该扇区的img。由于体积大小的限制,boot.img无法理解文件系统的结构,因此grub2-install将会把core.img的位置硬编码到boot.img中,这样就一定能找到core.img的位置。 (2)core.img core.img根据diskboot.img、kernel.img和一系列的模块被grub2-mkimage程序动态创建。core.img中嵌入了足够多的功能模块以保证grub能访问/boot/grub,并且可以加载相关的模块实现相关的功能,例如加载启动菜单、加载目标操作系统的信息等,由于grub2大量使用了动态功能模块,使得core.img体积变得足够小。 core.img中包含了多个img文件的内容,包括diskboot.img/kernel.img等。 core.img的安装位置随MBR磁盘和GPT磁盘而不同,这在上文中已经说明过了。 (3)diskboot.img 如果启动设备是硬盘,即从硬盘启动时,core.img中的第一个扇区的内容就是diskboot.img。diskboo.img的作用是读取core.img中剩余的部分到内存中,并将控制权交给kernel.img,由于此时还不识别文件系统,所以将core.img的全部位置以block列表的方式编码,使得diskboot.img能够找到剩余的内容。 该img文件因为占用一个扇区,所以体积为512字节。 (4)cdboot.img 如果启动设备是光驱(cd-rom),即从光驱启动时,core.img中的第一个扇区的的内容就是cdboo.img。它的作用和diskboot.img是一样的。 (5)pexboot.img 如果是从网络的PXE环境启动,core.img中的第一个扇区的内容就是pxeboot.img。 (6)kernel.img kernel.img文件包含了grub的基本运行时环境:设备框架、文件句柄、环境变量、救援模式下的命令行解析器等等。很少直接使用它,因为它们已经整个嵌入到了core.img中了。注意,kernel.img是grub的kernel,和操作系统的内核无关。 如果细心的话,会发现kernel.img本身就占用28KB空间,但嵌入到了core.img中后,core.img文件才只有26KB大小。这是因为core.img中的kernel.img是被压缩过的。 (7)lnxboot.img 该img文件放在core.img的最前部位,使得grub像是linux的内核一样,这样core.img就可以被LILO的"image="识别。当然,这是配合LILO来使用的,但现在谁还适用LILO呢? (8)*.mod 各种功能模块,部分模块已经嵌入到core.img中,或者会被grub自动加载,但有时也需要使用insmod命令手动加载。
(经测试用grub-mkimage.exe生成的core.img,前512字节就是diskboot.img,如果用作iso启动文件,需要把cdboot.img合并到core.img前边,这样就成了cdboot.img+diskboot.img+kernel.img+moudles&other了,貌似不管怎么样都含有diskboot.img。我用dd命令复制出w大的grubfm的iso启动文件fmldr的第2048字节后的内容为core.img,用比较工具发现就是这个core.img前边的512字节就是diskboot.img。当然只有两个字节不同,据说时表示除这个扇区外core.img还剩多少扇区的数据。)
|