Skip to content

UEFI-GRUB磁盘挂载结构

log
/boot/efi# lsblk -f
NAME            FSTYPE      FSVER    LABEL UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1          ext4        1.0            b008c093-d3ed-4a3c-ad45-0bc083b00282    734.1M    13% /boot
├─sda2          vfat        FAT32          DB7D-BF83                               946.2M     1% /boot/efi
├─sda3          swap        1              825bf6d4-a177-4239-b091-0677c8976405                  [SWAP]
└─sda4          ext4        1.0            56e3e3f3-9772-49ab-8a14-d2ea67a67a27     42.7G    40% /

/boot 下是 linux 内核引导程序,/boot/efi 下是 UEFI 引导程序(可从 Linux 安装文件 iso 中获得)。

log
/boot/efi# tree .
.
└── EFI
    ├── debian
    │   ├── BOOTX64.CSV
    │   ├── fbx64.efi
    │   ├── grub.cfg
    │   ├── grubx64.efi
    │   ├── mmx64.efi
    │   └── shimx64.efi
    └── Dell
        └── BootOptionCache
            └── BootOptionCache.dat
5 directories, 7 files

UEFI引导的第一个文件: boot/efi/EFI/debian/grub.cfg 告知加载内核的位置, grub.cfg 文件内容如下:

shell
root@server:/boot/efi/EFI/debian# pwd
/boot/efi/EFI/debian
root@server:/boot/efi/EFI/debian# cat grub.cfg 
search.fs_uuid b008c093-d3ed-4a3c-ad45-0bc083b00282 root hd0,gpt1 
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

重要参数:

  1. search.fs_uuid 后的 id 号是 /boot 分区的 uuid;
  2. set prefix 后的路径是 /boot 分区下的 grub 文件路径;
  3. configfile 后的路径是 /boot 分区下的 grub.cfg 文件路径;
log
/boot# ll
总计 112348
-rw-r--r-- 1 root root   236326  6月 1日 17:24 config-5.10.0-30-amd64
-rw-r--r-- 1 root root   259624 11月 1日 12:23 config-6.1.0-27-amd64
drwx------ 3 root root     4096 1970年 1月 1日 efi
drwxr-xr-x 5 root root     4096 11月14日 10:43 grub
-rw-r--r-- 1 root root 45900337 11月13日 17:21 initrd.img-5.10.0-30-amd64
-rw-r--r-- 1 root root 53357639 11月14日 10:43 initrd.img-6.1.0-27-amd64
drwx------ 2 root root    16384 11月13日 17:13 lost+found
-rw-r--r-- 1 root root       83  6月 1日 17:24 System.map-5.10.0-30-amd64
-rw-r--r-- 1 root root       83 11月 1日 12:23 System.map-6.1.0-27-amd64
-rw-r--r-- 1 root root  7053824  6月 1日 17:24 vmlinuz-5.10.0-30-amd64
-rw-r--r-- 1 root root  8189888 11月 1日 12:23 vmlinuz-6.1.0-27-amd64

GRUB 启动重要的 /boot/grub/grub.cfg 文件:

log
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-56e3e3f3-9772-49ab-8a14-d2ea67a67a27' {
	load_video
	insmod gzio
	if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
	insmod part_gpt
	insmod ext2
	set root='hd1,gpt1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1  b008c093-d3ed-4a3c-ad45-0bc083b00282
	else
	  search --no-floppy --fs-uuid --set=root b008c093-d3ed-4a3c-ad45-0bc083b00282
	fi
	echo	'Loading Linux 6.1.0-27-amd64 ...'
	linux	/vmlinuz-6.1.0-27-amd64 root=UUID=56e3e3f3-9772-49ab-8a14-d2ea67a67a27 ro  quiet
	echo	'Loading initial ramdisk ...'
	initrd	/initrd.img-6.1.0-27-amd64
}

这里的 root 是挂在 linux 根目录(/)的分区 ID。linux 和 initrd 是内核和 initrd 的路径。