GRUB识别分区

GRUB识别分区

Question #

GRUB的分区模块是如何识别分区的?Linux命令下查看到的分区号如何转换成 GRUB能够识别的分区号?

Answer #

下面来看看我们 Hello OS 的启动项:

menuentry 'HelloOS' {
     insmod part_msdos #GRUB加载分区模块识别分区
     insmod ext2 #GRUB加载ext文件系统模块识别ext文件系统
     set root='hd0,msdos4' #注意boot目录挂载的分区,这是我机器上的情况
     multiboot2 /boot/HelloOS.bin #GRUB以multiboot2协议加载HelloOS.bin
     boot #GRUB启动HelloOS.bin
}

如果你不知道你的 boot 目录挂载的分区,可以在 Linux 系统的终端下输入命令:df /boot/,就会得到如下结果:

文件系统          1K-块    已用     可用      已用% 挂载点
/dev/sda4      48752308 8087584 38158536   18%    /

其中的“sda4”就是硬盘的第四个分区(硬件分区选择 MBR),但是 GRUB 的 menuentry 中不能写 sda4,而是要写“hd0,msdos4”,这是 GRUB 的命名方式, hd0 表示第一块硬盘,结合起来就是第一块硬盘的第四个分区。

From #

02 | 几行汇编几行C:实现一个最简单的内核