这里有一位 Ubuntu 14.04 LTS 用户。
基本上我在跑步时遇到了问题
sudo apt-get update
sudo apt-get upgrade
dpkg 返回错误代码,因为 Linux 内核包 3.13.0.57 被标记为“未完全安装”:
Errors were encountered while processing:
linux-image-3.13.0.57-generic
linux-image-extra-3.13.0-57-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
我输入uname -r为了查看我的系统内核的当前版本,令人惊讶的是3.13.0.57之后我重启系统并进入 grub 列出所有已安装的 linux 内核,发现3.8.0-35-通用因此我启动它来尝试重新安装 3.13.0.57 版本。我不知道为什么在 3.8.0-35 可用的情况下 Ubuntu 14.04 默认使用 3.13.0.57 启动。
在我成功启动后3.8.0我再次使用 dpkg 列出了我拥有的所有内核,以确保3.13.0-57存在。
sudo dpkg --list | grep linux-image
sudo apt-get purge linux-image-3.13.0.57-generic
sudo apt-get purge linux-image-extra-3.13.0-57-generic
但额外的镜像包无法删除,而纯Linux镜像可以:
Errors were encountered while processing:
linux-image-extra-3.13.0-57-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
有什么办法可以解决这个问题吗?我搜索了一下,发现启动分区上可能没有足够的空间会导致此类问题,但我认为我的情况不同。我设法手动清除了 4-5 个旧内核,以确保我在启动分区上释放了足够的空间。
编辑1:我看到 Ubuntu 14.04.2 附带 Linux 内核 3.16.x,但我没有。我拥有的最新版本是 3.8.0-35,然后是 3.13.0-57。
编辑2:运行sudo apt-get autoremove
或sudo apt-get dist-upgrade
没有帮助。似乎我无法运行任何升级。以下是日志sudo apt-get autoremove
:
$ sudo apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
linux-image-extra-3.13.0-57-generic
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 152 MB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 747752 files and directories currently installed.)
Removing linux-image-extra-3.13.0-57-generic (3.13.0-57.95) ...
depmod: FATAL: could not load /boot/System.map-3.13.0-57-generic: No such file or directory
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
run-parts: executing /etc/kernel/postinst.d/dkms 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-57-generic
grep: /boot/config-3.13.0-57-generic: No such file or directory
run-parts: executing /etc/kernel/postinst.d/pm-utils 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
run-parts: executing /etc/kernel/postinst.d/zz-runlilo 3.13.0-57-generic /boot/vmlinuz-3.13.0-57-generic
Fatal: open /boot/vmlinuz-3.13.0-46-generic.efi.signed: No such file or directory
run-parts: /etc/kernel/postinst.d/zz-runlilo exited with return code 1
dpkg: error processing package linux-image-extra-3.13.0-57-generic (--remove):
subprocess installed post-removal script returned error exit status 1
Errors were encountered while processing:
linux-image-extra-3.13.0-57-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
我不知道这Fatal: open /boot/vmlinuz-3.13.0-46-generic.efi.signed: No such file or directory
与删除 3.13.0-57 有什么关系。
答案1
我设法找到了解决问题的方法。不过,我决定将其发布为答案,以防有人遇到同样的问题。
问题原因:
我检查了软件包的 dpkg 状态:
dpkg --status linux-image-3.13.0.57-generic
dpkg --status linux-image-extra-3.13.0-57-generic
输出清楚地表明软件包状态不好。正如我在上面的问题中所写,它们“未完全安装”。
解决方案:
必须从状态文件中删除这些包的条目dpkg
才能apt-get
正常运行。步骤如下:
如果出现问题,请务必备份状态文件。
sudo cp /var/lib/dpkg/status /var/lib/dpkg/status.backup
使用您喜欢的文本编辑器打开
/var/lib/dpkg/status
并搜索并删除仅有的破损包裹的参考信息。您不得删除任何其他内容!运行
sudo apt-get upgrade
以确保一切都已修复。
答案2
wajig remove linux-headers-3.13.0-57-generic
对我有用。
我重新启动并进入3.13.0-57-generic
内核。
但要小心!备份你的数据。
答案3
如果你想升级到新内核版本,你可以通过“linux-image-lts...”包或通过“apt-get dist-upgrade”手动安装它
这些故障经常发生在完整的 luks 加密卷中,因为这些设置中的 /boot 太小。
也许“apt-get autoremove”也有帮助......