Apt 无法删除部分安装的内核并且无法安装任何其他软件包

Dav*_*vid 7 updates apt grub2

在看似部分内核升级后,Apt 无法升级或安装新软件包。我试过apt-get purge -f linux-image-extra-3.19.0-22-generic失败并显示非常相似的错误消息。机器在启动到最新内核版本时也会崩溃(grub 中的默认版本),但以前的版本工作正常。

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be REMOVED:
  linux-image-3.19.0-22-generic linux-image-extra-3.19.0-22-generic
The following packages will be upgraded:
  linux-cloud-tools-common
1 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
2 not fully installed or removed.
Need to get 0 B/24.3 kB of archives.
After this operation, 208 MB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 453815 files and directories currently installed.)
Removing linux-image-extra-3.19.0-22-generic (3.19.0-22.22) ...
depmod: FATAL: could not load /boot/System.map-3.19.0-22-generic: No such file or directory
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
run-parts: executing /etc/kernel/postinst.d/dkms 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
update-initramfs: Generating /boot/initrd.img-3.19.0-22-generic
grep: /boot/config-3.19.0-22-generic: No such file or directory
depmod: WARNING: could not open /tmp/mkinitramfs_6gldfB/lib/modules/3.19.0-22-generic/modules.order: No such file or directory
depmod: WARNING: could not open /tmp/mkinitramfs_6gldfB/lib/modules/3.19.0-22-generic/modules.builtin: No such file or directory
run-parts: executing /etc/kernel/postinst.d/pm-utils 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
Generating grub configuration file ...
ERROR: cannot determine partition label for rootfs /dev/sda9
run-parts: /etc/kernel/postinst.d/zz-update-grub exited with return code 1
dpkg: error processing package linux-image-extra-3.19.0-22-generic (--remove):
 subprocess installed post-removal script returned error exit status 1
Removing linux-image-3.19.0-22-generic (3.19.0-22.22) ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
update-initramfs: Deleting /boot/initrd.img-3.19.0-22-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
Generating grub configuration file ...
ERROR: cannot determine partition label for rootfs /dev/sda9
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 1
Failed to process /etc/kernel/postrm.d at /var/lib/dpkg/info/linux-image-3.19.0-22-generic.postrm line 328.
dpkg: error processing package linux-image-3.19.0-22-generic (--remove):
 subprocess installed post-removal script returned error exit status 1
Errors were encountered while processing:
 linux-image-extra-3.19.0-22-generic
 linux-image-3.19.0-22-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
Run Code Online (Sandbox Code Playgroud)

我需要让 apt 再次工作并进入可以安装​​未来内核的状态。正确清除 3.19.0-22 内核会很好但没有必要。随时询问更多信息,并提前致谢

--编辑--

0x450 的答案适用于任何非内核相关的包。内核和 grub 更新将 apt 和 dpkg 返回到损坏状态。我注意到这个反复出现的错误消息:

Generating grub configuration file ... ERROR: cannot determine partition label for rootfs /dev/sda9

这可能是与 grub 配置文件相关的问题吗?


sudo apt-get install --reinstall linux-image-extra-3.19.0-22-generic导致非常相似的错误(可以在这里查看)

sudo dpkg --configure -a创建错误

sudo apt-get purge linux-image-extra-3.19.0-22-generic创建错误

0x4*_*450 12

我遇到了完全相同的问题,但损坏的内核包是 3.13.0.57 版。

检查问题:

检查dpkg status软件包:

dpkg --status linux-image-3.19.0-22-generic
dpkg --status linux-image-extra-3.19.0-22-generic
Run Code Online (Sandbox Code Playgroud)

如果输出表明软件包处于错误状态,即half installednot fully installed,这意味着它们分别已损坏apt-getdpkg

解决方案:

受感染的内核软件包的条目必须手动从状态文件中删除dpkg,以便apt-getdpkg正常再次本身的功能。步骤如下:

  1. 确保创建状态文件的备份,以防万一出现问题。

    sudo cp /var/lib/dpkg/status /var/lib/dpkg/status.backup

  2. /var/lib/dpkg/status使用您喜欢的文本编辑器打开并搜索和删除损坏包的引用。您不得删除任何其他内容!

  3. 运行sudo apt-get updatesudo apt-get upgrade确保一切都已修复。

  4. 此步骤是可选的,因为包管理器不再跟踪包,但如果您愿意,可以通过删除它们来释放一些磁盘空间。您可以安全地删除所有手动的破碎内核软件包的条目/boot,并在/usr/src但要非常小心。确保仅触摸与您的案例中的3.19.0-22版本相对应的文件/文件夹。


Dav*_*vid 0

事实证明,该问题是由 grub-mkconfig 崩溃并显示错误消息引起的Generating grub configuration file ... ERROR: cannot determine partition label for rootfs /dev/sda9 (sda9 保留了我的 fs 根目录)。

Apt 崩溃是因为当它尝试安装新内核时,它运行 grub-mkconfig 将它们添加到启动菜单中。这实际上不是 apt 的问题,而是 grub 的问题。

我通过重新安装 ubuntu 并使用 ext3 而不是 ext4 作为包含我的文件系统根的分区来修复它。不过,我的主目录仍在其自己的 ext4 分区中,因此它似乎没有受到影响。

0x450 的答案作为一种临时修复效果很好,以便可以再次使用 apt。但它并不能解决根本问题。