语境
- Windows 10 家庭版 21H1
- Virtualbox 6.1
- CentOS 8 虚拟机
- BIOS 模式:
问题
该虚拟机正在使用什么启动技术?
我怀疑 BIOS 正在加载第一阶段 MBR 引导加载程序,该加载程序会加载 GRUB2。令人困惑的是分区的布局要现代得多/boot
。
它感觉像是 systemd-boot 准备的混合体/boot
,具有 systemd-boot 样式的配置,但由 BIOS、MBR 和 GRUB2 控制。
分析
我相信 systemd-boot 只能在包含基于 FAT 的文件系统的 GPT 磁盘的 UEFI 系统上使用/boot
。
我的安装程序尚未创建合法的 systemd-boot 扩展引导加载程序分区(XBOOTLDR),因为/dev/sda1
XFS 不是基于 FAT 的。
鉴于我的虚拟机设置为不使用 EFI(因此默认为 BIOS),我相信 CentOS 8 已经创建了正确的目录结构对于 systemd-boot ( /boot/loader/entries/
),但在错误的分区类型(非 ESP/XBOOTLDR 上的 XFS)。由于我使用的是 BIOS,所以这不是问题。
据我所知,GRUB2 由 MBR 引导扇区加载。然后 GRUB2 拾取引导菜单片段/boot/loader/entries/
?
/boot/efi/*
是空目录 - 我通常看到它们填充了 grub 配置文件和 EFI 映像。
/boot/grub2/
包含grub.cfg
、device.map
和i386-pc/*.mod
- GRUB2 安装健康的良好迹象。
有条目表明系统正在使用 systemd-boot 样式配置而不是普通的 GRUB:
[root@c8 ~]# cat /boot/loader/entries/7d05af5fc5db47fbb5e0c5c6d5bdece7-4.18.0-305.10.2.el8_4.x86_64.conf
title CentOS (4.18.0-305.10.2.el8_4.x86_64) 8
version 4.18.0-305.10.2.el8_4.x86_64
linux /vmlinuz-4.18.0-305.10.2.el8_4.x86_64
initrd /initramfs-4.18.0-305.10.2.el8_4.x86_64.img $tuned_initrd
options $kernelopts $tuned_params
id centos-20210720173403-4.18.0-305.10.2.el8_4.x86_64
grub_users $grub_users
grub_arg --unrestricted
grub_class kernel
磁盘检查
MBR磁盘和msdos分区表:
[root@c8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 79G 0 part
├─cl-root 253:0 0 49.8G 0 lvm /
├─cl-swap 253:1 0 5G 0 lvm [SWAP]
└─cl-home 253:2 0 24.3G 0 lvm /home
sr0 11:0 1 1024M 0 rom
[root@c8 ~]# parted -l /dev/sda
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 85.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1075MB 1074MB primary xfs boot
2 1075MB 85.9GB 84.8GB primary lvm
[root@c8 ~]# file -sL /dev/{sda,sda1}
/dev/sda: DOS/MBR boot sector
/dev/sda1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
[root@c8 ~]# df -hTP
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/cl-root xfs 50G 6.1G 44G 13% /
/dev/sda1 xfs 1014M 407M 608M 41% /boot
无法检查固件加载的映像 - 另一个迹象是 BIOS 负责:
[root@c8 ~]# bootctl status
Couldn't find EFI system partition. It is recommended to mount it to /boot or /efi.
Alternatively, use --path= to specify path to mount point.
System:
Not booted with EFI
[root@c8 ~]# efibootmgr -v
EFI variables are not supported on this system.
答案1
从 Fedora 30 开始,该发行版的 GRUB2 软件包带有一个新的“blscfg”模块它读取引导加载程序规范配置文件并生成 GRUB 菜单项。
一般来说,GRUB 配置可以来自许多来源。标准 grub.cfg 是通过可扩展脚本生成的,其中一些脚本由单独的软件包(如 os-prober)安装,并且不仅限于从 /boot 收集内核列表 - 如果您的发行版有 grub-mkconfig 将 /boot/loader/entries 转换为 grub.cfg,那就没有什么特别不寻常的了。