これは、

これは、

これは、

フルディスク暗号化を備えた BIOS/UEFI フラッシュドライブを作成する方法

私はこの質問の回答に従って、BIOS または UEFI 構成のコンピューターから起動する USB フラッシュ ドライブに、Ubuntu 20.04 の暗号化された完全インストールを作成しました。

私はこのUSBフラッシュドライブを使ってBIOSのみのコンピュータにUbuntuをインストールし、セキュリティやその他のアップデートを常に更新してきました。しかし、UEFIコンピュータはこのUSBドライブから起動しません。ウブントゥGRUB から次のエラーが表示されます:

error file '/vmlinuz-5.8.0-48-generic' not found.
you need to load the kernel first. 

この特定のカーネルは、セキュリティやその他の更新中に新しいカーネルに置き換えられたため、インストールされていません。

この USB ベースの Ubuntu インストールの UEFI ブート機能を回復するにはどうすればよいですか?

答え1

二人の物語grub.cfg

この USB フラッシュ ドライブのインストールは、2 つの場所に分かれていますgrub.cfg。1 つは BIOS のみのコンピューターの起動に使用され、もう 1 つは UEFI コンピューターの起動に使用されます。新しいカーネルがインストールされ、古いカーネルが削除されると、インストール プロセスは現在の起動に使用された grub.cfg ファイルのみを更新します。その結果、2 つのgrub.cfgファイルは同期されなくなります。

BIOS ブートに必要なファイルは次の場所にあります。

/boot/grub/grub.cfg

UEFI ブートに必要なファイルは次の場所にあります。

/boot/efi/boot/grub/grub.cfg

これは暗号化されたインストールであるため、ブート パーティションにはマウント ポイントがあり/boot、ESP パーティションにはマウント ポイントがあることに注意してください/boot/efi

解決

古い grub.cfg を新しいバージョンに置き換えます。私の場合は、BIOS のものの方が新しいものでした。そこで、次のコマンドを使用しました。

sudo cp /boot/grub/grub.cfg /boot/efi/boot/grub/grub.cfg

これで今のところ問題は解決しました。

スクリプト

USB がどのモード (BIOS または UEFI) から起動したかに基づいて異なる場合、grubsync.sh古いものを新しいものにコピーして置き換えるという小さなスクリプトを作成しました。grub.cfg

#!/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 を使用して起動するたびに実行できるようになるかもしれません。

お役に立てれば

関連情報