在全新的16.04安装中无法运行sudo dpkg --configure -a命令。

新安装(Ubuntu 16.04 LTS)后,我无法通过apt更新或安装任何东西。我可以成功运行apt update,但如果我接着运行apt upgrade或apt dist-upgrade,它总是(我尝试了无数次重启后,以及从恢复模式下尝试)导致以下结果:
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.

如果我运行它,它总是做以下的事情,并且无限期地停滞不前:
Setting up grub-efi-amd64 (2.02~beta2-36ubuntu3.12) ...
Installing for x86_64-efi platform.
Installation finished. No error reported.
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.10.0-35-generic
Found initrd image: /boot/initrd.img-4.10.0-35-generic
Found linux image: /boot/vmlinuz-4.10.0-28-generic
Found initrd image: /boot/initrd.img-4.10.0-28-generic

uname -r显示正在运行的版本为4.10.0-35-generic,所以我可以放心删除4.10.0-28-generic,因为它总是出现问题,但是我无法清除它,因为当执行apt purgeFound initrd image: /boot/initrd.img-4.10.0-28-generic时就会挂起。

我已经尝试了每种可能的排序,但都没有成功。

sudo dpkg --configure -a
sudo apt install -f
sudo apt clean
sudo apt update
sudo apt upgrade|dist-upgrade|full-upgrade

这是一个全新安装,所以我不担心任何可能导致数据丢失的“核选项”(即我没有要丢失的数据)。我尝试过使用boot-repair,但它从未完成(它说可能需要几分钟,但我让它运行了几个小时)。
我意识到这个问题与E: dpkg was interrupted... run 'sudo dpkg --configure -a'dpkg --configure -a hangs when found initrd image之间存在相似之处,但没有一个答案对我有帮助。

请使用apt而不是apt-get,使用full-upgrade而不是dist-upgrade来执行任何16.04+的操作系统。现在,请重新启动计算机。然后运行sudo apt update,再运行sudo apt full-upgrade,如果出现任何错误,请编辑并发布完整的错误信息。 - user692175
我的理解是在运行aptapt-get之间没有区别,但尽管如此,我一直在使用apt。上面的代码块中的apt-get是从一个帖子中复制过来的,但我会编辑它以显示apt。至于full-upgrade,它导致了与upgradedist-upgrade相同的错误(在我问题的顶部显示的“dpkg被中断…”)。 - frostmatthew
1个回答

在 grub 更新过程中,30_os-prober 卡住了。我忘记具体是什么问题了。

30_uefi-firmware 也有一个问题,在这里可以修复 - https://askubuntu.com/a/938472/694267

暂时移除两者的执行权限,以完成配置。
sudo chmod -x /etc/grub.d/30_os-prober
sudo chmod -x /etc/grub.d/30_uefi-firmware

然后运行 sudo dpkg --configure -a

如果你想要 grub 中的系统设置入口,请修复 30_uefi-firmware 然后重新启用执行权限:
sudo chmod +x /etc/grub.d/30_uefi-firmware

然后运行 sudo update-grub


谢谢,但似乎没有任何效果,一旦达到Found initrd image: /boot/initrd.img-4.10.0-28-generic仍然卡住。 - frostmatthew
看起来你的方向是对的,考虑到它正在配置(grub-efi-amd64),名字中有efi,我尝试去掉30_uefi-firmware的执行标志并重新运行dpkg,进展更远了,它设置了grub-efi-amd64,但现在卡在了Setting up grub-efi-amd64-signed (1.66.12+2.02~beta2-36ubuntu3.12) ...Installing for x86_64-efi platform. - 但至少有进展了,谢谢! - frostmatthew
在看到你最后的评论之前,我重新启动并运行了dpkg configure,出于某种原因它成功地完成了grub-efi-amd64-signed(没有发生其他错误)。然后,我能够顺利运行apt upgrade,所以如果你编辑你的答案建议同时删除30_os-prober30_uefi-firmware的执行标志,我会将其标记为已接受。(当我切换回执行标志时,我也会根据你给出的链接对30_uefi-firmware进行建议更改)。非常感谢! - frostmatthew
@Exupery -- 编辑的答案 - ravery
有时候问题并不在于 os_prober 等等。在我的情况下,我连接了一个坏的重复启动驱动器到系统中,这扰乱了 grub 的探测逻辑。如果有人遇到类似的情况,请记得在完成后使用 sudo chmod +x /etc/grub.d/30_os-prober 重新启用 prober。 - Eponymous