引导分区已满,无法删除旧内核。破损的包裹

Doo*_*eve 7 apt partitioning boot kernel

很抱歉询问什么可能真的很简单,但我已经用谷歌搜索了一个星期,我已经尝试了很多没有成功的东西。

首先,每次启动时都会弹出一个窗口,说我的 /boot 分区已满,并且 Synaptic Manager 说 linux-image-generic 已损坏,但无法重新安装其中任何一个(linux-image-extra- 3.13.0-54-generic 和 linux-image-generic)。

我的终端告诉我尝试使用 install -f 来修复问题,所以我已经尝试过了,这就是它返回的内容。可悲的是,我还在学习,我还没有能够破解代码,我需要一些帮助

aksel@aksels-PC:~$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
 linux-image-3.13.0-54-generic
Suggested packages:
 fdutils linux-doc-3.13.0 linux-source-3.13.0 linux-tools
The following NEW packages will be installed:
 linux-image-3.13.0-54-generic
0 upgraded, 1 newly installed, 0 to remove and 344 not upgraded.
5 not fully installed or removed.
Need to get 0 B/14,7 MB of archives.
After this operation, 32,8 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
(Reading database ... 431129 files and directories currently installed.)
Preparing to unpack .../linux-image-3.13.0-54-generic_3.13.0-54.91_i386.deb ...
Done.
Unpacking linux-image-3.13.0-54-generic (3.13.0-54.91) ...
dpkg: error processing archive /var/cache/apt/archives/linux-image-3.13.0-54-generic_3.13.0-54.91_i386.deb (--unpack):
 cannot copy extracted data for './boot/vmlinuz-3.13.0-54-generic' to '/boot/vmlinuz-3.13.0-54-generic.dpkg-new': failed to write (No space left on device)
No apport report written because the error message indicates a disk full error

dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.13.0-54-generic /boot/vmlinuz-3.13.0-54-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.13.0-54-generic /boot/vmlinuz-3.13.0-54-generic
Errors were encountered while processing:
 /var/cache/apt/archives/linux-image-3.13.0-54-generic_3.13.0-54.91_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Run Code Online (Sandbox Code Playgroud)

jar*_*rno 8

通过使用 linux-purge

为此,我创建了一个帮助脚本。这就是所谓linux-purge及其项目页面是这里的Launchpad.net。在公告节还有安装说明这里

在这种特定情况下,您将运行

sudo linux-purge --fix
Run Code Online (Sandbox Code Playgroud)

手动方式

作为替代方案,我在Communiy Wiki 帮助中提供了有关如何手动完成任务的说明(作为 jarnos)。

无论如何,这是我作为存档的手动说明:

首先从以前的内核更新中删除任何剩余的临时文件。

sudo rm -rv ${TMPDIR:-/var/tmp}/mkinitramfs-*
Run Code Online (Sandbox Code Playgroud)

(可能有一些是由于Ubuntu 16.04 及更早版本中的错误。)

通过命令列出成功安装的内核,不包括启动的内核:

dpkg-query -W -f='${Status} ${Package}\n' | awk '/^[^ ]+ ok installed linux-image-[0-9]+/{print $4}' | grep -Fv $(uname -r)
Run Code Online (Sandbox Code Playgroud)

删除不需要的内核的initrd.img文件(由于bug);这里选择的内核版本是 4.2.0-23-generic:

sudo update-initramfs -d -k 4.2.0-23-generic
Run Code Online (Sandbox Code Playgroud)

清除内核

sudo dpkg --purge linux-image-extra-4.2.0-23-generic linux-image-4.2.0-23-generic
Run Code Online (Sandbox Code Playgroud)

释放 /boot 中的一些空间。如果命令失败,则某些已安装的软件包依赖于内核。dpkg 的输出告诉了包的名称。先把它擦干净。

您还可以清除相应的标头包

sudo dpkg --purge linux-headers-4.2.0-23-generic
Run Code Online (Sandbox Code Playgroud)

甚至是通用的头包

sudo dpkg --purge linux-headers-4.2.0-23
Run Code Online (Sandbox Code Playgroud)

如果没有其他包依赖它;否则命令将失败,但可以安全运行。

然后运行

sudo apt-get install -f
Run Code Online (Sandbox Code Playgroud)

修复损坏的依赖项。如果由于磁盘空间不足而失败,则必须按照上述方式删除另一个内核。

请注意,您的系统中可能仍然安装了太多内核,但现在您应该能够清除多余的sudo apt-get purge内核,例如,后跟内核包名称。


小智 -1

如果您的 /boot 分区已满,那么 apt-get 功能失败也就不足为奇了。您只需释放 /boot 中的空间,您可以以图形方式或通过终端/ssh 执行此操作,无论您更喜欢什么。您可以清除(而不是删除!)占用空间的不需要的软件包(内核,因为它是您的 /boot 部分),或者您可以扩展您的 /boot 分区,使其更大,然后您可以再次运行 -f 命令。如果这对您来说都是不同的语言,我将需要更多信息来为您提供执行此操作所需运行的确切命令。

  1. 列出已安装的内核:dpkg -l | grep linux-image-
  2. 系统分区是如何布局的(cat /etc/fstab输出什么)?
  3. 使用以下命令列出您的磁盘空间:df 命令。

这是一个应该有助于删除旧内核的链接


cza*_*ols -1

您的启动分区空间不足。这就是 apt-get 失败的原因,它甚至告诉你

未写入批准报告,因为错误消息指示磁盘已满错误

在(重新)安装之前删除旧内核,保留最新的内核和上一个内核。

#dpkg -l | grep linux-image-

将列出所有已安装的内核

sudo apt-get autoremove linux-image-##fill-in-with-result-from-previous-command##

将删除它们

$apt-get install --reinstall linux-image-generic

剩下的会做

关于删除旧内核的 Ubuntu 官方页面