抱歉,问的问题可能真的很简单,但我已在 Google 上搜索了一个星期,尝试了很多方法,但都没有成功。
首先,每次启动时都会弹出一个窗口,提示我的 /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)
答案1
通过使用 linux-purge
为此,我创建了一个辅助脚本。它的名称为linux-purge
,其项目页面为这里在 Launchpad.net 中。公告部分有安装说明这里。
在这个特定的情况下,你可以运行
sudo linux-purge --fix
手动方法
另外,您也可以在以下网址找到有关如何手动完成此任务的说明社区 Wiki 帮助我 (以 jarnos 身份) 对此做出了贡献。
无论如何,以下是我的手动说明作为存档:
首先删除以前内核更新留下的所有临时文件。
sudo rm -rv ${TMPDIR:-/var/tmp}/mkinitramfs-*
(可能由于漏洞在 Ubuntu 16.04 及更早版本中。)
使用命令列出已成功安装的内核(不包括已启动的内核):
dpkg-query -W -f='${Status} ${Package}\n' | awk '/^[^ ]+ ok installed linux-image-[0-9]+/{print $4}' | grep -Fv $(uname -r)
删除不需要的内核的 initrd.img 文件(由于漏洞);这里选择的内核版本是 4.2.0-23-generic:
sudo update-initramfs -d -k 4.2.0-23-generic
通过以下方式清除内核
sudo dpkg --purge linux-image-extra-4.2.0-23-generic linux-image-4.2.0-23-generic
释放 /boot 中的部分空间。如果命令失败,则某些已安装的软件包依赖于内核。dpkg 的输出会显示软件包的名称。请先清除它。
您也可以清除相应的标头包
sudo dpkg --purge linux-headers-4.2.0-23-generic
甚至通用头包
sudo dpkg --purge linux-headers-4.2.0-23
如果没有其他包依赖于它;否则命令将失败,但可以安全运行。
然后运行
sudo apt-get install -f
修复损坏的依赖关系。如果由于磁盘空间不足而失败,则必须按照上述方法删除另一个内核。
请注意,您的系统中可能安装了太多的内核,但现在您应该能够通过例如sudo apt-get purge
后跟内核包名称来清除多余的内核。
答案2
删除旧内核的最快捷、最简单的方法是:
sudo apt-get autoremove
这通常会将安装的内核数量减少到两个或三个。每次安装新内核的软件更新后都执行此操作,以防止问题再次发生。
答案3
如果您的 /boot 分区已满,apt-get 功能失败也就不足为奇了。您只需释放 /boot 中的空间,您可以通过图形方式或终端/ssh 进行操作,无论您更喜欢哪种方式。您可以清除(不是删除!)占用空间的不需要的软件包(内核,因为它是您的 /boot 部分),或者您可以扩展 /boot 分区使其更大,然后您可以再次运行 -f 命令。如果这一切对您来说都是不同的语言,我将需要更多信息来为您提供执行此操作所需运行的确切命令。
- 使用以下命令列出已安装的内核:
dpkg -l | grep linux-image-
- 系统分区是如何布局的(
cat /etc/fstab
输出什么)? - 使用以下命令列出您的磁盘空间:
df
命令。
这是一个应该有帮助的链接删除旧内核
答案4
您的启动分区空间不足。这就是 apt-get 失败的原因,它甚至会告诉您
没有写入 apport 报告,因为错误消息表明磁盘已满错误
在(重新)安装之前删除旧内核,保留最新的和先前的一个。
#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
会做剩下的