自从升级到 Ubuntu 18.04 Bionic kexec 后,我的笔记本电脑就停止工作了。Ubuntu 以 UEFI 模式安装,以 GRUB 作为引导加载程序,双启动 Windows。系统完全加密,包括启动分区。
我已经安装了 kexec-tools 并添加了以下服务:
[Unit]
DefaultDependencies=no
Requires=sysinit.target
After=sysinit.target
[Service]
Type=oneshot
ExecStart=-/bin/true
RemainAfterExit=yes
ExecStop=/usr/local/bin/load-kexec.sh
[Install]
WantedBy=basic.target
此脚本用于执行 kexec 重启:
#!/bin/sh
INITRAMFS="/initrd.img";
KERNEL="/vmlinuz";
if [ "$(cat /sys/kernel/kexec_loaded)" != "1" ]; then
echo "Load kernel ($KERNEL) and initramfs ($INITRAMFS) for kexec";
kexec -l "$KERNEL" --initrd="$INITRAMFS" --reuse-cmdline;
else
echo "Already loaded some kexec, not modifying";
fi;
但是,运行时sudo systemctl kexec
出现以下错误消息:
Failed to open "/boot/efi/loader/loader.conf": Datei oder Verzeichnis nicht gefunden
Failed to read boot config from "/boot/efi/loader/loader.conf": Datei oder Verzeichnis nicht gefunden
Failed to load bootspec config from "/boot/efi/loader": Datei oder Verzeichnis nicht gefunden
事实上,这个配置文件确实不存在,但是在 Ubuntu 16.04 上我不需要创建它,因为 kexec 可以完美运行。
有人可以解释一下升级过程中发生了什么变化以及如何让 kexec 再次工作吗?
答案1
未找到数据或记录
在英语中这意味着:“未找到文件或目录”
看着loader.conf — sd-boot 的配置文件它说:
sd-boot(7) 将读取EFI 系统分区 (ESP)下任何带有“ ”扩展名
/loader/loader.conf
的文件。.conf
/loader/loader.conf.d/
虽然我今晚没有时间测试kexec
,但你应该能够使用以下命令修复错误:
sudo mkdir -p /boot/efi/loader/loader.conf.d/
没有适合作为默认的条目,拒绝猜测
初始错误消息表示没有文件或目录。我希望创建一个目录就可以了。这是默认的loader.conf
文件:
# Example kexec-loader configuration file
# Read the documentation for more information.
#
# Number of seconds to wait before booting the default menu entry.
#
# timeout 5
# Explicitly enable/disable GRUB autodetection. Autodetection will be enabled
# by default, but only if no boot targets are specified in this file.
#
# grub-autodetect on
# grub-autodetect off
# Force GRUB path. Setting this will disable autodetection.
#
# grub-path (hda1)/boot/grub
# Map GRUB disks/partitions
# This overrides any mappings in device.map
#
# grub-map hd0 sda
# grub-map hd1,a hda8
# Example boot target
#
# title Generic Linux System
# root hda1
# kernel /boot/vmlinuz
# cmdline root=/dev/hda1 ro
# initrd /boot/initrd.gz