이후 후속 질문입니다.

이후 후속 질문입니다.

이후 후속 질문입니다.

전체 디스크 암호화를 사용하여 BIOS/UEFI 플래시 드라이브를 만드는 방법

나는 이 질문에 대한 답변을 따르고 BIOS 또는 UEFI 구성 컴퓨터에서 부팅된 USB 플래시 드라이브에 Ubuntu 20.04의 암호화된 전체 설치를 만들었습니다.

시간이 지남에 따라 저는 BIOS 전용 컴퓨터에 Ubuntu를 설치한 이 USB 플래시 드라이브를 사용하고 보안 및 기타 업데이트로 업데이트된 상태를 유지했습니다. 이제 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 플래시 드라이브 설치에는 grub.cfg두 위치에 별도의 두 개가 있습니다. 하나는 BIOS 전용 컴퓨터를 부팅하는 데 사용되고 다른 하나는 UEFI 컴퓨터를 부팅하는 데 사용됩니다. 새 커널이 설치되고 이전 커널이 제거되면 설치 프로세스는 현재 부팅에 사용된 grub.cfg 파일만 업데이트합니다. 결과적으로 두 grub.cfg파일이 동기화되지 않습니다.

BIOS 부팅에 필요한 파일은 다음 위치에 있습니다.

/boot/grub/grub.cfg

UEFI 부팅에 필요한 파일은 다음 위치에 있습니다.

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

이는 암호화된 설치이므로 부팅 파티션에 마운트 지점이 있고 /bootESP 파티션에 마운트 지점이 있습니다 /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을 사용하여 부팅할 때마다 실행할 수 있습니다.

도움이 되었기를 바랍니다

관련 정보