부팅 파티션과 커널 파티션이 동기화되지 않는 것을 방지하는 방법은 무엇입니까?

부팅 파티션과 커널 파티션이 동기화되지 않는 것을 방지하는 방법은 무엇입니까?

제가 실수로 커널을 업데이트했지만 부팅 파티션은 업데이트하지 않아서 Arch Linux 시스템이 망가진 것 같습니다. 예를 들면 다음과 같습니다.

pacman -Q linux  -> results in 4.20.arch1-1
uname -a -> results in 4.19.4-arch1-1-ARCH 

무슨 일이 일어나고 있는지 잘 모르겠습니다. /boot 디렉토리를 보면 initramfs-linux-fallback.img, initramfs-linux.img 및 vmlinuz-linux 세 개의 파일이 포함되어 있으며 처음 두 파일은 가장 최근에 업데이트되었으며 마지막 파일은 시스템을 설치할 때 날짜가 지정되었습니다. 몇 주 전 데이트. 그렇다면 정확히 동기화되지 않은 것은 무엇입니까? 내 vmlinuz-linux가 루트 파티션의 커널과 동기화되지 않았습니까?

그 결과 어떤 이유로든 커널이 더 이상 내 네트워크 장치를 찾지 못합니다. 어떻게 이런 일이 발생했는지 잘 모르겠습니다. 제가 실행한 유일한 관련 명령은 다음과 같습니다.

sudo pacman -Syu

내 생각에 이 명령은 커널을 변경하는 것이 아니라 패키지 데이터베이스만 업데이트하는 것으로 생각됩니다.

어쨌든 이제 내 질문은 부팅 파티션을 다시 동기화하여 커널과 일치하게 하거나 적어도 네트워크 장치 모듈을 찾아 로드하도록 하는 방법입니다. 분명히 더 이상 그렇지 않습니다.

내 시스템은 마더보드에서 직접 부팅하도록 설정되어 있습니다(중간 부트 로더 없음). 그러나 이 명령을 실행하면 다음과 같습니다.

# efibootmgr --verbose

내가 얻은 결과는 "명령을 찾을 수 없습니다"입니다. 이 명령을 사용하려면 라이브 부팅 환경에 있어야 합니까? 이 문제를 해결하고 시스템을 다시 동기화하려면 어떻게 해야 합니까? 또한 앞으로 이런 일이 발생하지 않도록 하려면 어떻게 해야 합니까? 즉, 많은 패키지를 추가할 계획인데 새 패키지를 추가할 때마다 시스템이 커널을 업데이트하고 시스템을 엉망으로 만들면 문제가 될 것입니다.

답변1

이 문제에 대한 해결책은 다음과 같습니다.

  1. EFI 파티션(제 경우에는 EFI 스텁 유형 부팅을 위한 VFAT 파티션)을 편리한 디렉터리에 마운트합니다.

    # /dev/nvme0n1p1/efi 마운트

제 경우에는 장치 이름이 "M2 드라이브이기 때문에"와 같았 nvme0n1지만 SATA 드라이브를 사용하는 경우 장치 이름은 "sda1"과 같을 수 있습니다.

  1. 이전 파일과 새 파일을 구별할 수 있도록 부팅 이미지 파일의 크기를 기록해 두십시오.

  2. 업데이트된 부팅 파일을 ext4 파티션에서 EFI 파티션으로 복사합니다(이렇게 하면 이전 부팅 이미지를 덮어씁니다).

    # cp /boot/* /efi

  3. 파일 크기를 확인하여 /efi 디렉터리(VFAT 파티션)에 새 파일이 포함되어 있는지 확인하세요.

  4. 일반(ext4) 파일 트리에서 /boot 디렉터리와 해당 디렉터리를 구별할 수 있도록 EFI 파티션에 빈 파일을 추가합니다.

    # cd /efi
    # EFI 부팅 디렉토리 터치

  5. VFAT 파티션을 /boot 디렉토리에 마운트하려면 fstab 파일에 행을 추가하십시오. 이렇게 하면 기본 Arch 루트 디렉터리의 /boot 디렉터리가 숨겨집니다. 이렇게 하면 ext4 드라이브의 /boot 디렉토리 버전을 덮어쓰지는 않지만 액세스할 수 없게 됩니다. fstab의 일반적인 줄은 다음과 같습니다.

    UUID=4AF7-CA4B /boot vfat 기본값 0 0

드라이브의 UUID를 찾으려면 다음 lsblk -f명령을 사용하십시오.

  1. 시스템을 다시 시작하여 제대로 작동하는지 확인한 다음 시작 디렉터리를 확인하세요.

    $ls/시작

태그 파일("EFI-boot-directory" 또는 선택한 이름)이 표시되어야 합니다. 디렉터리에 이 파일이 없으면 EFI 파티션이 마운트되지 않았음을 의미하므로 fstab 파일을 다시 확인해야 합니다.

EFI 파티션이 /boot에 자동으로 마운트되면 시스템 업데이트를 수행할 때마다 올바르게 업데이트되어야 하며 부팅 이미지는 설치한 모듈과 동기화되어야 합니다.

답변2

여기에 답변하기에는 질문이 너무 많지만 댓글로는 적합하지 않으므로 질문이 제거될 때까지 여기에 게시하겠습니다.

  1. /boot업그레이드 중에 설치하지 않았으므로 실행 중인 커널이 필요한 모듈에 액세스할 수 없습니다 .

  2. efibootmgr은 아직 설치하지 않았기 때문에 "명령을 찾을 수 없습니다"라고 말합니다.

  3. 업그레이드가 /boot시스템에 설치되지 않았기 때문에 설치되지 않았습니다(또는 설치된 경우 올바르지 않습니다)./boot/etc/fstab

관련 정보