每当我尝试安装/卸载任何软件时,我都会收到类似的错误,提示“设备上没有剩余空间”。我尝试删除旧内核,但遇到了类似的错误。
gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.19.0-56-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
dpkg: error processing package linux-image-extra-3.19.0-56-generic (--remove):
subprocess installed post-removal script returned error exit status 1
E: Sub-process /usr/bin/dpkg returned an error code (1)
我按照网上的建议尝试过sudo apt-get autoremove --purge
,但没有帮助。我也读过之前关于类似问题的帖子,但它们也没有帮助。
因此,我根本无法安装/卸载任何东西。
sourav@Valkyrie:~$ ls /boot
abi-3.19.0-56-generic initrd.img-4.4.0-34-generic
abi-3.19.0-61-generic initrd.img-4.4.0-34-generic.old-dkms
abi-3.19.0-64-generic lost+found
abi-3.19.0-65-generic memtest86+.bin
abi-4.4.0-34-generic memtest86+.elf
config-3.19.0-56-generic memtest86+_multiboot.bin
config-3.19.0-61-generic System.map-3.19.0-56-generic
config-3.19.0-64-generic System.map-3.19.0-61-generic
config-3.19.0-65-generic System.map-3.19.0-64-generic
config-4.4.0-34-generic System.map-3.19.0-65-generic
grub System.map-4.4.0-34-generic
initrd.img-3.19.0-56-generic vmlinuz-3.19.0-56-generic
initrd.img-3.19.0-56-generic.old-dkms vmlinuz-3.19.0-61-generic
initrd.img-3.19.0-61-generic vmlinuz-3.19.0-64-generic
initrd.img-3.19.0-64-generic vmlinuz-3.19.0-65-generic
initrd.img-3.19.0-65-generic vmlinuz-4.4.0-34-generic
sourav@Valkyrie:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 396M 6.4M 390M 2% /run
/dev/mapper/ubuntu--vg-root 913G 215G 652G 25% /
tmpfs 2.0G 248K 2.0G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 236M 228M 0 100% /boot
cgmfs 100K 0 100K 0% /run/cgmanager/fs
tmpfs 396M 64K 396M 1% /run/user/1000
答案1
我看到你那里有一些旧内核,似乎是来自 Ubuntu 的旧版本。我思考它autoremove
无法对具有不同主版本号的内核采取行动——至少我以前见过类似的情况。
您的分区也非常小/boot
。从长远来看,或者即使现在可以选择,我建议您重新安装,不要创建单独的启动分区,或者如果要创建,请确保分区更大。我的经验是,安装程序默认不会创建一个启动分区;在 UEFI 系统上,会创建一个小型 EFI 系统分区,并安装到该分区上,/boot/efi
不会干扰/boot
存储内核的空间。
短期内,您可以通过自行删除内核来腾出空间。如果 APT 无法删除内核,您可以使用版本字符串手动删除内核的所有痕迹。
首先使用命令检查哪个内核正在运行
uname -r
它将输出版本字符串,例如4.4.0-34-generic
不要删除该内核
选择您在中看到的其他版本之一ls /boot
;从最旧的版本开始3.19.0-56-generic
,查找属于它的所有文件:
locate -b -e 3.19.0-56-generic
现在你可以使用以下方法删除它们xargs
locate -b -e 3.19.0-56-generic | xargs -p sudo rm -r
您将看到要删除的文件列表,系统会要求您确认。如果列表看起来没问题,请键入y,然后文件将被删除。
检查文件是否已被删除:
sudo updatedb && locate -b -e 3.19.0-56-generic
用下一个最旧的内核重复此操作。始终保留一个备用内核是非常明智的,但我认为那些旧内核对你来说没什么用,而且你当前的内核大概是稳定的,因此你可以继续,直到你只有当前正在运行的内核版本(由 表示uname -r
)或只有两个内核版本/boot
,然后运行
sudo update-grub
sudo apt update
sudo apt upgrade
祝你好运,update-initramfs
应该能够正常运行。为了保持这种情况,每次获得新内核时,请运行
sudo apt autoremove
答案2
当 /boot 分区上的空间已满时,卸载旧内核的干净方法是卸载旧的 linux-image 包。
[I] ~ ❯❯❯ dpkg -l | grep linux-image
rc linux-image-4.19.0-6-amd64 4.19.67-2+deb10u1 amd64 Linux 4.19 for 64-bit PCs (signed)
rc linux-image-5.10.0-2-amd64 5.10.9-1 amd64 Linux 5.10 for 64-bit PCs (signed)
rc linux-image-5.10.0-5-amd64 5.10.24-1 amd64 Linux 5.10 for 64-bit PCs (signed)
rc linux-image-5.10.0-6-amd64 5.10.28-1 amd64 Linux 5.10 for 64-bit PCs (signed)
rc linux-image-5.14.0-1-amd64 5.14.6-3 amd64 Linux 5.14 for 64-bit PCs (signed)
rc linux-image-5.14.0-2-amd64 5.14.9-2 amd64 Linux 5.14 for 64-bit PCs (signed)
rc linux-image-5.14.0-3-amd64 5.14.12-1 amd64 Linux 5.14 for 64-bit PCs (signed)
rc linux-image-5.14.0-4-amd64 5.14.16-1 amd64 Linux 5.14 for 64-bit PCs (signed)
ic linux-image-5.15.0-2-amd64 5.15.5-2 amd64 Linux 5.15 for 64-bit PCs (signed)
rc linux-image-5.15.0-3-amd64 5.15.15-2 amd64 Linux 5.15 for 64-bit PCs (signed)
rc linux-image-5.16.0-3-amd64 5.16.11-1 amd64 Linux 5.16 for 64-bit PCs (signed)
rc linux-image-5.17.0-1-amd64 5.17.3-1 amd64 Linux 5.17 for 64-bit PCs (signed)
ii linux-image-5.18.0-4-amd64 5.18.16-1 amd64 Linux 5.18 for 64-bit PCs (signed)
ii linux-image-5.19.0-2-amd64 5.19.11-1 amd64 Linux 5.19 for 64-bit PCs (signed)
rc linux-image-5.2.0-3-amd64 5.2.17-1 amd64 Linux 5.2 for 64-bit PCs (signed)
rc linux-image-5.3.0-2-amd64 5.3.9-3 amd64 Linux 5.3 for 64-bit PCs (signed)
rc linux-image-5.3.0-3-amd64 5.3.15-1 amd64 Linux 5.3 for 64-bit PCs (signed)
rc linux-image-5.4.0-1-amd64 5.4.6-1 amd64 Linux 5.4 for 64-bit PCs (signed)
rc linux-image-5.4.0-2-amd64 5.4.8-1 amd64 Linux 5.4 for 64-bit PCs (signed)
rc linux-image-5.4.0-3-amd64 5.4.13-1 amd64 Linux 5.4 for 64-bit PCs (signed)
rc linux-image-5.4.0-4-amd64 5.4.19-1 amd64 Linux 5.4 for 64-bit PCs (signed)
rc linux-image-5.5.0-2-amd64 5.5.17-1 amd64 Linux 5.5 for 64-bit PCs (signed)
rc linux-image-5.6.0-1-amd64 5.6.7-1 amd64 Linux 5.6 for 64-bit PCs (signed)
rc linux-image-5.6.0-2-amd64 5.6.14-2 amd64 Linux 5.6 for 64-bit PCs (signed)
rc linux-image-5.8.0-1-amd64 5.8.7-1 amd64 Linux 5.8 for 64-bit PCs (signed)
rc linux-image-5.8.0-2-amd64 5.8.10-1 amd64 Linux 5.8 for 64-bit PCs (signed)
rc linux-image-5.8.0-3-amd64 5.8.14-1 amd64 Linux 5.8 for 64-bit PCs (signed)
rc linux-image-5.9.0-1-amd64 5.9.1-1 amd64 Linux 5.9 for 64-bit PCs (signed)
rc linux-image-5.9.0-2-amd64 5.9.6-1 amd64 Linux 5.9 for 64-bit PCs (signed)
rc linux-image-5.9.0-4-amd64 5.9.11-1 amd64 Linux 5.9 for 64-bit PCs (signed)
ii linux-image-amd64 5.19.11-1 amd64 Linux for 64-bit PCs (meta-package)
然后使用以下命令获取当前内核版本
[I] ~ ❯❯❯ uname -r
5.19.0-2-amd64
现在,您需要安装旧内核,只需使用 清除软件包名称即可sudo apt purge <package-name>
。如果要卸载大量软件包,您可以使用一些 bash magic。
sudo apt purge linux-image-5.{2,3,4,5,6,8,9,18}*
请注意,该模式不应与您正在运行的内核的当前版本匹配。
删除旧内核后,您将能够释放大量空间/boot
。