我读到 GRUB 可以读取 ext2 文件系统,并且有用于执行此操作的模块。该 mod 在 Redhat 系统上的位置是什么?如果 /boot 分区是 ext3/ext4 或其他文件系统类型又如何?
答案1
grub ext2 模块还可以识别 ext3 和 ext4,因为差异很小。该模块本身内置于 grubcore.img
文件中(当您使用 ext[234] 作为 /boot 时),该文件通常在任何分区启动之前复制到主引导记录后面的扇区中,并且主引导记录中的代码只是加载那些后续扇区。
答案2
为了回答主题行中的问题部分,其可执行代码保存在 initrd 映像中。 initrd 镜像可以在启动时直接加载到内核中,这样就解决了先有鸡还是先有蛋的问题,无需读取分区即可获取读取 ext 分区的代码。
关于 /boot 的文件系统选择。
- Ext3 向后兼容 ext2,并且主要引入了日志功能。
- Ext4是对ext文件系统的重大修订,带来了许多新功能,并且在不恢复数据和重建文件系统的情况下是不可逆的。
我真的认为没有必要担心在 /boot 上使用 ext3/4。我通常甚至不需要在虚拟机上使用单独的 /boot,它作为我的 ext4 分区的一部分工作得很好。我也不担心在 /boot 上不记录日志的情况下使用 ext2,因为在断电期间您不太可能在 /boot 文件系统中进行未完成的写入操作,除非您正在升级内核。
模块保存在通常的位置:/lib/modules//kernel/fs/。它们被编译到 initrd 映像中,供内核在启动时使用。
更新:尚未找到 RedHat 官方声明,但 Michael Jang 的书中指出,RHEL 6 不再使用 ext2 作为 /boot,因为 ext4 已经足够了,现在是 /boot 的默认文件系统。 Jang 书中还指出,除了日志记录之外,ext2 与 ext3 之间实际上没有任何区别。
答案3
Grub ( 0.9x
) 支持 ext2 和 ext3 但不支持 ext4 (除非向后不兼容的功能被关闭)。
而 Grub2(自 1.97 起)通过相同的模块 [ ext2.mod
] 支持 ext2、ext3 和 ext4,该模块位于 Fedora 17 中的 /boot/grub2/i386-pc/ ( 32-bit
)