제가 실수로 커널을 업데이트했지만 부팅 파티션은 업데이트하지 않아서 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
이 문제에 대한 해결책은 다음과 같습니다.
EFI 파티션(제 경우에는 EFI 스텁 유형 부팅을 위한 VFAT 파티션)을 편리한 디렉터리에 마운트합니다.
# /dev/nvme0n1p1/efi 마운트
제 경우에는 장치 이름이 "M2 드라이브이기 때문에"와 같았 nvme0n1
지만 SATA 드라이브를 사용하는 경우 장치 이름은 "sda1"과 같을 수 있습니다.
이전 파일과 새 파일을 구별할 수 있도록 부팅 이미지 파일의 크기를 기록해 두십시오.
업데이트된 부팅 파일을 ext4 파티션에서 EFI 파티션으로 복사합니다(이렇게 하면 이전 부팅 이미지를 덮어씁니다).
# cp /boot/* /efi
파일 크기를 확인하여 /efi 디렉터리(VFAT 파티션)에 새 파일이 포함되어 있는지 확인하세요.
일반(ext4) 파일 트리에서 /boot 디렉터리와 해당 디렉터리를 구별할 수 있도록 EFI 파티션에 빈 파일을 추가합니다.
# cd /efi
# EFI 부팅 디렉토리 터치VFAT 파티션을 /boot 디렉토리에 마운트하려면 fstab 파일에 행을 추가하십시오. 이렇게 하면 기본 Arch 루트 디렉터리의 /boot 디렉터리가 숨겨집니다. 이렇게 하면 ext4 드라이브의 /boot 디렉토리 버전을 덮어쓰지는 않지만 액세스할 수 없게 됩니다. fstab의 일반적인 줄은 다음과 같습니다.
UUID=4AF7-CA4B /boot vfat 기본값 0 0
드라이브의 UUID를 찾으려면 다음 lsblk -f
명령을 사용하십시오.
시스템을 다시 시작하여 제대로 작동하는지 확인한 다음 시작 디렉터리를 확인하세요.
$ls/시작
태그 파일("EFI-boot-directory" 또는 선택한 이름)이 표시되어야 합니다. 디렉터리에 이 파일이 없으면 EFI 파티션이 마운트되지 않았음을 의미하므로 fstab 파일을 다시 확인해야 합니다.
EFI 파티션이 /boot에 자동으로 마운트되면 시스템 업데이트를 수행할 때마다 올바르게 업데이트되어야 하며 부팅 이미지는 설치한 모듈과 동기화되어야 합니다.
답변2
여기에 답변하기에는 질문이 너무 많지만 댓글로는 적합하지 않으므로 질문이 제거될 때까지 여기에 게시하겠습니다.
/boot
업그레이드 중에 설치하지 않았으므로 실행 중인 커널이 필요한 모듈에 액세스할 수 없습니다 .efibootmgr은 아직 설치하지 않았기 때문에 "명령을 찾을 수 없습니다"라고 말합니다.
업그레이드가
/boot
시스템에 설치되지 않았기 때문에 설치되지 않았습니다(또는 설치된 경우 올바르지 않습니다)./boot
/etc/fstab