首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用全磁盘加密维护BIOS/UEFI闪存驱动器

如何使用全磁盘加密维护BIOS/UEFI闪存驱动器
EN

Ask Ubuntu用户
提问于 2022-06-18 19:26:38
回答 1查看 325关注 0票数 3

这是继

之后的后续问题

如何用全磁盘加密技术制作BIOS/UEFI闪存驱动器

我遵循了这个问题的答案,并在一个USB闪存驱动器中创建了Ubuntu20.04的加密全安装,该驱动器可以从BIOS或UEFI配置的计算机启动。

随着时间的推移,我已经使用这个USB闪存驱动器安装Ubuntu在一个BIOS唯一的计算机,并保持它的更新与安全和其他更新。现在UEFI计算机不会从这个USB驱动器启动。当我从GRUB中选择Ubuntu时,它将显示错误:

代码语言:javascript
运行
复制
error file '/vmlinuz-5.8.0-48-generic' not found.
you need to load the kernel first. 

这个特定的内核没有安装,因为它在安全和其他更新期间被较新的内核所取代。

这个基于How的Ubuntu安装是否恢复了UEFI的启动功能?

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2022-06-18 19:26:38

The Tale of Two grub.cfg

此USB闪存驱动器安装在两个位置上有两个独立的grub.cfg。一种只用于引导BIOS计算机,另一种用于引导UEFI计算机。安装新内核和删除旧内核时,安装过程只更新用于当前引导的grub.cfg文件。结果,这两个grub.cfg文件不同步。

BIOS启动所需的文件位于:

代码语言:javascript
运行
复制
/boot/grub/grub.cfg

UEFI启动所需的文件位于:

代码语言:javascript
运行
复制
/boot/efi/boot/grub/grub.cfg

注意,由于这是一个加密的安装,所以引导分区有挂载点/boot,ESP分区有挂载点/boot/efi

溶液

用更新的版本替换旧的grub.cfg。在我的例子中,BIOS one是更新的。所以我使用了命令:

代码语言:javascript
运行
复制
sudo cp /boot/grub/grub.cfg /boot/efi/boot/grub/grub.cfg

这暂时解决了这个问题。

A脚本

我编写了一个名为grubsync.sh的小脚本,将旧的grub.cfg复制并替换为更新的D15,如果它们是基于引导的哪种模式(BIOS或UEFI)而不同的话。

代码语言:javascript
运行
复制
#!/bin/bash
# Date: Jun 18, 2022
# Purpose: USB123 copy grub.cfg from boot partition grub.cfg to ESP partition
#      or vice versa if grub.cfg is newer
 
# Only run if the computer is USB123
if [[ ! $HOSTNAME == USB123 ]]; then    # Not on right computer
    echo "This is $HOSTNAME, expected USB123, exiting..."
    exit 1
fi

if [[ "$EUID" -ne 0 ]]
    then echo "This script must run with sudo, exiting..."
    exit 1
fi

BOOTgrubCFG="/boot/grub/grub.cfg"
ESPgrubCFG="/boot/efi/boot/grub/grub.cfg"

if cmp --silent -- "$BOOTgrubCFG" "$ESPgrubCFG"; then
    echo "files contents are identical, exiting..."
    exit 1
fi

if ls /sys/firmware/efi; then   # If TRUE then UEFI Boot
    if [[ "$BOOTgrubCFG" -ot "$ESPgrubCFG" ]]; then    # '-ot` means older than
        cp -f "$BOOTgrubCFG" "$BOOTgrubCFG".old 
        cp -f "$ESPgrubCFG" "$BOOTgrubCFG"
        echo "$BOOTgrubCFG" was old, kept with .old ext
        echo "$BOOTgrubCFG" was replaced with "$ESPgrubCFG". 
    fi
else 
    if [[ "$ESPgrubCFG" -ot "$BOOTgrubCFG" ]]; then
        cp -f "$ESPgrubCFG" "$ESPgrubCFG".old 
        cp -f "$BOOTgrubCFG" "$ESPgrubCFG"
        echo "$ESPgrubCFG" is old, kept with .old ext
        echo "$ESPgrubCFG" was replaced with "$BOOTgrubCFG".        
    fi
fi

我的USB完全安装的主机名是USB123。在运行脚本之前更改它。您需要使用sudo前缀运行此脚本。

到目前为止,每次内核更新时,我都必须运行这个脚本。只要稍加调整,我就可以在每次引导时使用crontab运行它。

希望这能有所帮助

票数 3
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1414664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档