web-dev-qa-db-ja.com

インストールされているカーネルが多すぎます。/bootにスペースが残っていません。古いカーネルをパージできません。

Linux Mint 18システムにアップデートをインストールしようとすると、容量不足エラーが発生します。/bootは100%いっぱいになっています。

削除する必要のある古いカーネルがたくさんあることに気づきました。 byobuをインストールしてpurge-old-kernelsを発行しましたが、スペース不足エラーが発生し、カーネルが削除されません。

古いカーネルのいずれかを手動でapt-get purgeしようとすると、同じことが起こります。

Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
2 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up initramfs-tools (0.122ubuntu8.16) ...
update-initramfs: deferring update (trigger activated)
Setting up linux-image-4.4.0-169-generic (4.4.0-169.198) ...
Processing triggers for initramfs-tools (0.122ubuntu8.16) ...
update-initramfs: Generating /boot/initrd.img-4.15.0-70-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-4.15.0-70-generic with 1.
dpkg: error processing package initramfs-tools (--configure):
 subprocess installed post-installation script returned error exit status 1
Processing triggers for linux-image-4.4.0-169-generic (4.4.0-169.198) ...
/etc/kernel/postinst.d/dkms:
 * dkms: running auto installation service for kernel 4.4.0-169-generic
Error! echo
Your kernel headers for kernel 4.4.0-169-generic cannot be found at
/lib/modules/4.4.0-169-generic/build or /lib/modules/4.4.0-169-generic/source.
Error! echo
Your kernel headers for kernel 4.4.0-169-generic cannot be found at
/lib/modules/4.4.0-169-generic/build or /lib/modules/4.4.0-169-generic/source.
Error! echo
Your kernel headers for kernel 4.4.0-169-generic cannot be found at
/lib/modules/4.4.0-169-generic/build or /lib/modules/4.4.0-169-generic/source.
Error! echo
Your kernel headers for kernel 4.4.0-169-generic cannot be found at
/lib/modules/4.4.0-169-generic/build or /lib/modules/4.4.0-169-generic/source.
   ...done.
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-4.4.0-169-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-4.4.0-169-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
dpkg: error processing package linux-image-4.4.0-169-generic (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 initramfs-tools
 linux-image-4.4.0-169-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)

システムを破壊せずにrmを使用してブートイメージを削除する安全な方法はありますか?

カーネルヘッダー/画像のリスト: https://Pastebin.com/TYFMv6x7

1
a coder

未使用のカーネルパッケージを削除する最も安全な方法は、Ubuntuの開発者の1人であるDustinKirklandによって作成されたユーティリティpurge-old-kernelsを使用することです。これは、デスクトップおよびサーバーシステム、Ubuntu、したがってLinuxMintで使用できます。

パッケージをインストールして使用するには、次のようにします。

Sudo apt-get install -y bikeshed byobu
Sudo purge-old-kernels

ユーティリティが古いカーネルの検出に失敗した場合、次のメッセージが表示されます。

No kernels are eligible for removal

カーネルが自動的にインストールされた場合、そのようなカーネルは次のコマンドで削除できます。

Sudo apt-get autoremove
Sudo apt-get autoclean

ただし、/bootが100%いっぱいの場合も、これらのコマンドが失敗する可能性があります。

その場合は、1つまたは2つの古いinitrd.img*ファイルを手動で削除してください。まず、コマンドuname -aを使用して、独自のカーネルを削除しようとしていないことを確認します。

apt-getを正常に実行するためのスペースを取り戻したら、上記の2つのコマンドを実行できます。

開始する前にバックアップに注意してください。

2
harrymc

古いカーネルと関連する残骸が保管されている場所は2つか3つあります。これが私が古いがらくたを取り除くために使うステップです。 remove-old-kernelsががらくたを横に置いたままにするときの手順を使用します。

まず、古いカーネルを特定します。彼らは/bootでぶらぶらしています:

$ cd /boot/
$ ls -1
config-5.0.0-36-generic
config-5.0.0-37-generic
efi
grub
initrd.img-5.0.0-36-generic
initrd.img-5.0.0-37-generic
memtest86+.bin
memtest86+.elf
memtest86+_multiboot.bin
System.map-5.0.0-36-generic
System.map-5.0.0-37-generic
vmlinuz-5.0.0-36-generic
vmlinuz-5.0.0-37-generic

次に、apt-get removeapt-get purgeを実行して、パッケージファイルとパッケージをディスクから削除します。

Sudo apt get -y remove '*5.0.0-36*
...
Sudo apt-get -y purge
...

DKMSは、/lib/modulesに多少の問題がある可能性があります。 NvidiaとVirtualBoxが原因で、私はしばしば、取り外されていないがらくたを持っています。 4.15.0-nnカーネルギアが再インストールされ続ける理由がわかりません。私はそれを取り除き続けます、それは戻ってき続けます。

第三に、DKMSの残骸が残っているかどうかを確認します。

# dkms status
nvidia, 430.50, 4.15.0-72-generic, x86_64: installed
nvidia, 430.50, 5.0.0-36-generic, x86_64: installed
nvidia, 430.50, 5.0.0-37-generic, x86_64: installed
virtualbox, 5.2.34, 4.15.0-72-generic, x86_64: installed
virtualbox, 5.2.34, 5.0.0-36-generic, x86_64: installed
virtualbox, 5.2.34, 5.0.0-37-generic, x86_64: installed

第四に、次の方法で残骸を取り除きます。

# dkms remove nvidia/430.50 -k 4.15.0-72-generic
# dkms remove nvidia/430.50 -k 5.0.0-36-generic
# dkms remove virtualbox/5.2.34 -k 4.15.0-72-generic
# dkms remove virtualbox/5.2.34 -k 5.0.0-36-generic

その後:

# find /var/lib -name '*4.15.0-72*'
/var/lib/dpkg/info/linux-headers-4.15.0-72.md5sums
/var/lib/dpkg/info/linux-headers-4.15.0-72.list
/var/lib/dpkg/info/linux-headers-4.15.0-72-generic.list
/var/lib/dpkg/info/linux-headers-4.15.0-72-generic.md5sums
/var/lib/dpkg/info/linux-headers-4.15.0-72-generic.postinst
/var/lib/dkms/nvidia/kernel-4.15.0-72-generic-x86_64
/var/lib/dkms/nvidia/430.26/4.15.0-72-generic
/var/lib/dkms/virtualbox/kernel-4.15.0-72-generic-x86_64
/var/lib/dkms/virtualbox/5.2.34/4.15.0-72-generic

第5に、古いアーティファクトを手動で削除します。

# find /var/lib -name '*4.15.0-72*' -exec rm -rf {} \;

第6に、/lib/modulesに問題がないことを確認します。

$ ls /lib/modules/
4.15.0-72-generic    5.0.0-36-generic    5.0.0-37-generic

そして、古い残骸を取り除きます:

$ Sudo rm -rf /lib/modules/4.15.0-72-generic/
$ Sudo rm -rf /lib/modules/5.0.0-36-generic/

第7に、initramfsを更新し、grubメニューを再生成します。

# /sbin/depmod -a
# /usr/sbin/update-initramfs -u
# /usr/sbin/update-grub2

そして最後に、古いカーネルが実際になくなっていることを確認します。

$ ls -1 /boot/
config-5.0.0-37-generic
efi
grub
initrd.img-5.0.0-37-generic
memtest86+.bin
memtest86+.elf
memtest86+_multiboot.bin
System.map-5.0.0-37-generic
vmlinuz-5.0.0-37-generic
0
jww