bootloader grub2

转载自:https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/168.html

      在 BIOS 读完信息后,接下来就是会到第一个开机设备的 MBR 去读取 boot loader 了。这个 boot loader 可以具有菜单功能、直接载入核心文件以及控制权移交的功能等, 系统必须要有 loader 才有办法载入该操作系统的核心就是了。但是我们都知道, MBR 是整个硬盘的第一个 sector 内的一个区块,充其量整个大小也才 446 Bytes 而已。即使是 GPT 也没有很大的扇区来储存 loader 的数据。 我们的 loader 功能这么强,光是程序码与设置数据不可能只占这么一点点的容量吧?那如何安装?

为了解决这个问题,所以Linux 将boot loader 的程序码执行与设置值载入分成两个阶段(stage) 来执行:

  • Stage 1:执行boot loader 主程序: 第一阶段为执行boot loader 的主程序,这个主程序必须要被安装在开机区,亦即是MBR 或者是boot sector 。但如前所述,因为MBR 实在太小了,所以,MBR 或boot sector 通常仅安装boot loader 的最小主程序, 并没有安装loader 的相关配置文件;

  • Stage 2:主程序载入配置文件: 第二阶段为通过boot loader 载入所有配置文件与相关的环境参数文件(包括文件系统定义与主要配置文件grub.cfg), 一般来说,配置文件都在/boot 下面。

那么这些配置文件是放在哪里啊?这些与grub2 有关的文件都放置到/boot/grub2 中,那我们就来看看有哪些文件吧!

[root@study ~]# ls -l /boot/grub2
-rw-r--r--.  device.map            <==grub2 的设备对应档(下面会谈到)
drwxr-xr-x.  fonts                 <==开机过程中的画面会使用到的字体数据
-rw-r--r--.  grub.cfg              <==grub2 的主配置文件!相当重要!
-rw-r--r--.  grubenv               <==一些环境区块的符号
drwxr-xr-x.  i386-pc               <==针对一般 x86 PC 所需要的 grub2 的相关模块
drwxr-xr-x.  locale                <==就是语系相关的数据啰
drwxr-xr-x.  themes                <==一些开机主题画面数据

[root@study ~]# ls -l /boot/grub2/i386-pc
-rw-r--r--.  acpi.mod              <==电源管理有关的模块
-rw-r--r--.  ata.mod               <==磁盘有关的模块
-rw-r--r--.  chain.mod             <==进行 loader 控制权移交的相关模块
-rw-r--r--.  command.lst           <==一些指令相关性的列表
-rw-r--r--.  efiemu32.o            <==下面几个则是与 uefi BIOS 相关的模块
-rw-r--r--.  efiemu64.o
-rw-r--r--.  efiemu.mod
-rw-r--r--.  ext2.mod              <==EXT 文件系统家族相关模块
-rw-r--r--.  fat.mod               <==FAT 文件系统模块
-rw-r--r--.  gcry_sha256.mod       <==常见的加密模块
-rw-r--r--.  gcry_sha512.mod
-rw-r--r--.  iso9660.mod           <==光盘文件系统模块
-rw-r--r--.  lvm.mod               <==LVM 文件系统模块
-rw-r--r--.  mdraid09.mod          <==软件磁盘阵列模块
-rw-r--r--.  minix.mod             <==MINIX 相关文件系统模块
-rw-r--r--.  msdospart.mod         <==一般 MBR 分区表
-rw-r--r--.  part_gpt.mod          <==GPT 分区表
-rw-r--r--.  part_msdos.mod        <==MBR 分区表
-rw-r--r--.  scsi.mod              <==SCSI 相关模块
-rw-r--r--.  usb_keyboard.mod      <==下面两个为 USB 相关模块
-rw-r--r--.  usb.mod
-rw-r--r--.  vga.mod               <==VGA 显卡相关模块
-rw-r--r--.  xfs.mod               <==XFS 文件系统模块

从上面的说明你可以知道/boot/grub2/ 目录下最重要的就是配置文件(grub2.cfg) 以及各种文件系统的定义!我们的loader 读取了这种文件系统定义数据后,就能够认识文件系统并读取在该文件系统内的核心文件啰。

所以从上面的文件来看, grub2 认识的文件系统与磁盘分区格式真的非常多喔!正因为如此,所以grub2 才会取代Lilo / grub 这个老牌的boot loader 嘛!好了,接下来就来瞧瞧配置文件内有啥设置值吧!

 

原文地址:https://www.cnblogs.com/cfox/p/8384531.html