先运行ls /boot/grub/grub.cfg和bootctl --version:存在grub.cfg且bootctl可执行,则需结合efibootmgr -v与dmesg | grep -i bootloader判断实际生效的引导器;grub2通用bios/uefi,systemd-boot仅限uefi且通过bootctl管理。

怎么确认当前用的是 GRUB2 还是 systemd-boot
Linux 发行版默认用的引导加载器不是统一的,得先搞清自己系统在用哪个,否则后续命令会失效。GRUB2 是传统 BIOS/UEFI 通用方案,而 systemd-boot(也叫 bootctl)只用于 UEFI 系统且不依赖 GRUB 配置文件。
运行以下命令判断:
-
ls /boot/grub2/grub.cfg或ls /boot/grub/grub.cfg—— 存在则大概率是 GRUB2 -
ls /boot/efi/EFI/*/grubx64.efi—— 找到匹配项说明 GRUB2 在 UEFI 下运行 -
bootctl --version—— 能执行且输出版本号,说明用了systemd-boot -
cat /proc/cmdline | grep -q "systemd.unified_cgroup_hierarchy=1" && echo "likely systemd-boot"—— 不严谨但可辅助判断
注意:grub-install --version 只反映工具版本,不代表当前生效的引导器;efibootmgr -v 显示的是 EFI 固件里注册的启动项,不是实际加载器本身。
查看 GRUB2 的实际配置和启动项
grub2-mkconfig 生成的配置文件才是 GRUB2 真正读取的内容,但这个文件通常不直接编辑,而是由脚本动态生成。所以别只看 /etc/default/grub,它只是模板。
实操建议:
- 用
grep menuentry /boot/grub2/grub.cfg | head -n 5快速看前几条启动项名称(含内核版本) - 用
grep "linux16\|linuxefi" /boot/grub2/grub.cfg | head -n 3查看实际传递给内核的参数行 - 运行
grub2-editenv list查看 GRUB 环境变量(比如saved_entry决定默认启动项) -
/boot/grub2/grub.cfg是只读的,修改/etc/default/grub后必须手动运行grub2-mkconfig -o /boot/grub2/grub.cfg
常见坑:改完 /etc/default/grub 忘了重生成配置,重启后毫无变化;或者在 LVM/LUKS 加密环境下,grub2-mkconfig 没正确识别 root 分区,导致生成的 root= 参数错误。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
用 dmesg 和 journalctl 看引导加载器行为
内核启动时会记录引导加载器传参和早期初始化动作,这部分信息比配置文件更“真实”——毕竟它反映的是上次实际发生了什么。
关键命令:
-
dmesg | grep -i "grub\|efi\|bootloader"—— 找到类似[ 0.000000] EFI v2.70 by American Megatrends或[ 0.000000] Command line: ...的行 -
journalctl -b -1 | grep -i "grub\|boot"—— 查看上一次启动中 GRUB 相关服务日志(如grub2-mkconfig是否被 systemd 触发) -
journalctl --dmesg | head -20—— 快速定位内核启动头 20 行,含 EFI/BIOS 模式、ACPI 初始化等上下文
注意:dmesg 缓冲区可能被刷掉旧内容,如果系统跑了一周才查,journalctl -b 更可靠;但 journalctl 默认不存早于上次启动的日志,除非启用了持久日志(Storage=persistent 在 /etc/systemd/journald.conf 中)。
UEFI 环境下怎么看 bootctl 和 ESP 分区信息
如果你确认用了 systemd-boot,bootctl 是唯一权威接口,grub2-* 命令全无效。
操作要点:
-
bootctl status—— 显示当前 EFI 启动管理器状态、默认启动项、ESP 分区挂载点 -
bootctl list—— 列出所有已识别的启动加载器(含 Windows Boot Manager) -
ls /boot/efi/EFI/—— 看目录结构,ubuntu/、fedora/、BOOT/等子目录对应不同启动项 -
cat /boot/efi/EFI/ubuntu/loader/loader.conf—— 查默认 timeout 和 default entry(路径依发行版而异)
容易忽略的一点:bootctl 不读取内核参数文件(如 /etc/kernel/cmdline),它靠每个启动项目录下的 linux 和 initrd 文件 + options 行拼接命令行,改错一个空格就导致无法启动。










