제거 된 커널의 오래된 initrd 파일이 / boot 파티션을 채우는 이유는 무엇입니까?


13

여러 우분투 컴퓨터에서 나는 항상 모든 오래된 커널을 제거하지만 전체 부팅 파티션의 문제에 끊임없이 직면하고 있습니다. initrd관련 커널이 실제로 설치되어 있지 않더라도 부트 파티션에 많은 파일이 있기 때문에 문제가 발생하는 것 같습니다 . 예를 들어 :

root@Jacobi:/boot# ls -lah
insgesamt 202M
drwxr-xr-x  3 root root 3,0K Jan 30 10:03 .
drwxr-xr-x 25 root root 4,0K Jan 30 10:03 ..
-rw-r--r--  1 root root 1,2M Dez 11 15:36 abi-4.4.0-104-generic
-rw-r--r--  1 root root 1,2M Jan  9 22:28 abi-4.4.0-109-generic
-rw-r--r--  1 root root 1,2M Jan 19 14:06 abi-4.4.0-112-generic
-rw-r--r--  1 root root 187K Dez 11 15:36 config-4.4.0-104-generic
-rw-r--r--  1 root root 187K Jan  9 22:28 config-4.4.0-109-generic
-rw-r--r--  1 root root 187K Jan 19 14:06 config-4.4.0-112-generic
drwxr-xr-x  5 root root 1,0K Jan 30 10:03 grub
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-3.13.0-39-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-101-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-103-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-104-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-109-generic
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-4.4.0-38-generic
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-4.4.0-45-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-59-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-77-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-78-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-81-generic
-rw-r--r--  1 root root 179K Jan 28  2016 memtest86+.bin
-rw-r--r--  1 root root 181K Jan 28  2016 memtest86+.elf
-rw-r--r--  1 root root 181K Jan 28  2016 memtest86+_multiboot.bin
-rw-------  1 root root 3,8M Dez 11 15:36 System.map-4.4.0-104-generic
-rw-------  1 root root 3,8M Jan  9 22:28 System.map-4.4.0-109-generic
-rw-------  1 root root 3,8M Jan 19 14:06 System.map-4.4.0-112-generic
-rw-------  1 root root 6,8M Dez 11 15:36 vmlinuz-4.4.0-104-generic
-rw-------  1 root root 6,8M Jan  9 22:28 vmlinuz-4.4.0-109-generic
-rw-------  1 root root 6,8M Jan 19 14:06 vmlinuz-4.4.0-112-generic

그러나 linux-image-4.4.0-104-generic 및 linux-image-4.4.0-109-generic 만 설치됩니다.

root@Jacobi:/boot# dpkg -l linux-image-\* | grep ^ii
ii  linux-image-4.4.0-104-generic       4.4.0-104.127 amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-109-generic       4.4.0-109.132 amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-104-generic 4.4.0-104.127 amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-109-generic 4.4.0-109.132 amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP

불필요한 initrd 파일을 수동으로 삭제하면 업그레이드를 시도하자마자 다시 생성됩니다.

이 문제의 원인은 무엇이며 어떻게 해당 파일을 영구적으로 제거 할 수 있습니까?


1
이 버전에 해당하는 패키지를 어떻게 제거 했습니까?
muru

1
@muru 나는 ​​그것을 제거하는 것보다 다른 방법으로 수행 한 것을 기억할 수 없습니다 apt-get autoremove.
user5950

답변:


12

부분적으로 제거 된 커널을 확인해야합니다.

dpkg -l linux-image-\* | grep ^rc

예를 들어 제거하십시오 sudo apt-get purge linux-image-4.4.0-101-generic.

삭제하면에서 initramfs 생성 규칙이 제거됩니다 /var/lib/initramfs-tools/.

도움이되지 않으면 initramfs 목록에서 수동으로 제거 할 수 있습니다.

sudo rm /var/lib/initramfs-tools/3.13.0-39-generic
sudo rm /var/lib/initramfs-tools/4.4.0-101-generic
sudo rm /var/lib/initramfs-tools/4.4.0-103-generic
sudo rm /var/lib/initramfs-tools/4.4.0-38-generic
sudo rm /var/lib/initramfs-tools/4.4.0-45-generic
sudo rm /var/lib/initramfs-tools/4.4.0-59-generic
sudo rm /var/lib/initramfs-tools/4.4.0-77-generic
sudo rm /var/lib/initramfs-tools/4.4.0-78-generic
sudo rm /var/lib/initramfs-tools/4.4.0-81-generic

보통 나는 실행할 purge-old-kernels다음 sudo apt-get autoremove만이 최근의 커널을 가지고.

설치된 커널을 초기화하여 다시 설치할 수 있습니다 :

sudo apt-get install --reinstall \
$(dpkg -l linux-image-\* | grep ^ii | awk '{print $2}')

1
이것은 꽤 잘 작동하는 것 같습니다. 요약하자면, 일부만 제거 된 커널이 많았던 방법도 있습니다. 위에서 설명한대로 발견하고 제거했습니다. 그런 다음 불필요한 initrd공간 을 제거하기 위해 수동으로 다시 부팅 할 때 불필요한 파일 을 제거해야했습니다 . 감사!
user5950

내가 읽은 것처럼 커널이나 헤더와 rm관련된 것이 initrd거나 사용하는 것은 좋지 않습니다 . 부분적으로 제거 된 kernels / headers / initrd.img 파일의 제거를 처리 할 수있는 몇 가지 명령이 있습니다. 참조하십시오 update-initramfs. 자세한 내용은 아래 답변을 참조하십시오.
Daniel

2

이미 dpkg커널 / 헤더를 제거하는 데 사용 하고 이미 확인한 dpkg -l후에도 여전히 커널 / 헤더가 설치되어 있지 않은 경우에도 파일 형식으로 이러한 이전 커널대한 참조가 표시됩니다. 이러한 참조 및 파일을 제거하는 것은 명령을 사용하는 것입니다./bootinitrd-imgupdate-initramfs

예를 들어, 4.4.0-109설치 만 되었지만 여전히 다음에 표시되는 경우 /boot:

-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-103-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-104-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-109-generic

당신은 안전하게 제거 할 수 있습니다 4.4.0-1044.4.0-103에서 /boot다음 명령을 :

$ sudo update-initramfs -d -k 4.4.0-103-generic
$ sudo update-initramfs -d -k 4.4.0-104-generic
$ sudo update-initramfs -c -k all

처음 두 명령 initramfs은에있는 파일뿐만 아니라 생성 규칙 에서 해당 커널에 대한 참조를 삭제합니다 /boot. 마지막 명령은 initramfs에게 initrd.img업데이트 된 규칙에 따라 파일 을 재생성하도록 지시 합니다.

이론적으로도 사용할 수 있습니다

$ sudo update-initramfs -d -k 4.4.0-{103,104}-generic

여러 커널을 한 번에 삭제하지만 어떤 이유로 든 작동하지 않습니다.


+1-이것은 고아 initrd에 대한 올바른 방법입니다.
bshea

감사합니다. 과도한 initrd.img 파일을 제거했습니다. 희망이 돌아 오지 않을 것입니다
null
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.