![これは、](https://rvso.com/image/1072191/%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81.png)
これは、
フルディスク暗号化を備えた 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 を使用して起動するたびに実行できるようになるかもしれません。
お役に立てれば