如何在 Ubuntu Bionic 上通过 GRUB-EFI 使用 kexec

如何在 Ubuntu Bionic 上通过 GRUB-EFI 使用 kexec

自从升级到 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 

相关内容