chroot에서 커널 재설치

chroot에서 커널 재설치

vmlinuz실수로 내 /boot디렉토리 의 파일 중 하나를 지웠습니다 . 하지만 확실하게 하기 위해 /boot내부 를 백업해 두었습니다 ./tmp

결과적으로 누락된 vmlinuz 파일 오류가 발생하여 부팅할 수 없습니다. 그래서 라이브 USB를 사용하여 부팅했지만 하드 드라이브(sda5)의 디렉토리에 들어가면 /boot완전히 비어 있습니다. /tmp/boot해당 디렉터리 에서 파일을 복사해도 /boot여전히 부팅할 수 없습니다.

해당 파일을 적절한 디렉터리에 복원하려면 어떻게 해야 합니까?

답변1

vmlinuzLinux 커널 이미지 자체입니다(z는 압축되었음을 나타냄).

현재 참조되는 커널 패키지 재설치리눅스 이미지 일반(또는 당신의HWE 커널) 그리고 아마도리눅스 노래 이미지 일반UEFI 보안 부팅 환경에서는 문제가 해결되어야 합니다.

chroot에서 커널 재설치

동일한 버전의 라이브 미디어를 부팅하고 설치 파티션(노틸러스를 사용하여 수행할 수 있습니다. 그때와 유사함 /media/ubuntu/…) 또는 /boot파티션(조금 더 복잡함)을 마운트하는 것이 좋습니다. 이에 대한 내용은 ${my_installation}다음 지침에 나와 있습니다 .

설치된 특정 커널 버전에 대한 /lib/modules/설치( )를 살펴보고 찾을 수 있는 최신 버전 번호를 선택하십시오. 이는 다음 지침에서 참조되며 내 테스트 VM에서는 3.16.0-46이었습니다.${my_installation}/lib/modules/${kernel_ver}

이전에 댓글에서 언급했듯이 절차는 chroot에 Grub을 다시 설치하는 것과 매우 유사하므로 인용하겠습니다.이 답변약간의 수정을 거쳐:

  1. 다른 필요한 것들을 바인드 마운트하십시오:

     for i in /sys /proc /run /dev; do sudo mount --bind "$i" "${my_installation}$i"; done
    
  2. chrootUbuntu 설치에:

     sudo chroot ${my_installation}
    
  3. 이 시점에서는 라이브 세션이 아닌 설치 단계에 있으며 루트로 실행 중입니다. …

이제 커널을 다시 설치하십시오(signed패키지는 UEFI 보안 부팅용입니다):

apt-get install --reinstall linux-image-${kernel_ver}-generic linux-signed-image-${kernel_ver}-generic

이 커널에 대한 가 여전히 누락되어 /boot있으면 디렉토리를 확인하십시오 . initrd수동으로 생성하려면 다음을 실행하세요.

mkinitramfs -o /boot/initrd.img-${kernel_ver}-generic ${kernel_ver}-generic

내 예:

mkinitramfs -o /boot/initrd.img-3.16.0-46-generic 3.16.0-46-generic

update-grub그런 다음 "새" 커널과 initrd가 포함되어 있는지 확인할 수 있도록 인용된 답변과 같이 실행하십시오 .

Grub도 다시 설치해야 하는 경우 나머지 단계를 수행할 수 있습니다. 이 지침은 MBR용으로 작성되었습니다. UEFI(다른 OS의 부트로더가 서로 덮어쓰면 안 됨)가 있는 경우 grub-efi-amd64-binGrub을 다시 설치하기 전에 설치되어 있는지 확인해야 합니다 .


관련 정보