アンインストールされたカーネルの古いinitrdファイルが/ bootパーティションを埋めるのはなぜですか?


12

いくつかのUbuntuマシンでは、常にすべての古いカーネルを削除しますが、完全なブートパーティションの問題に常に直面しています。問題は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
これらのバージョンに対応するパッケージをどのように削除しましたか?
ムル

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のみ2最近のカーネルを持っています。

インストールされたカーネルをinitramfsesで再インストールできます。

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。詳細については、以下の回答を参照してください。
ダニエル

1

あなたはすでに使用している場合はdpkgカーネル/ヘッダをパージすると、あなたはすでに確認されている場合はdpkg -l、まだカーネル/ヘッダがインストールされ表示されていないが、あなたはまだこれらの古いカーネルへの参照を参照/bootの形式でinitrd-imgファイルを、その後、適切な方法これらの参照とファイルを削除するには、update-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-104、および4.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

最初の2つのコマンドは、initramfs生成ルールのこれらのカーネルへの参照とのファイルを削除し/bootます。最後のコマンドはinitrd.img、更新されたルールに基づいてファイルを再生成するようにinitramfsに指示します。

理論的にはあなたも使うことができます

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

一度に複数のカーネルを削除しますが、何らかの理由でこれはうまくいきませんでした。


+1-これは、孤立したinitrdの正しい方法(および回答)です。
bshea
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.