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
重要参数:
- search.fs_uuid 后的 id 号是
/boot
分区的 uuid; - set prefix 后的路径是
/boot
分区下的 grub 文件路径; - 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 的路径。