如何恢复升级版本?

昨天我开始从12.10升级到13.04,但是因为时间太长而中断了。现在如果我重新启动它,它无法继续进行。
有没有可能清理中断时留下的混乱,并重新开始这次更新?

必须有一种方法来删除他为上次试验存储的所有临时数据,或者告诉他重新开始。简单的方式“继续之前中断的地方继续”似乎不起作用! - Dave
1我不确定,但也许执行 'sudo apt-get upgrade' 然后再执行 'sudo apt-get update' 可能会修复它! - Dave
我在我的回答中添加了删除所有下载包的说明。至于升级/更新,通常你希望以相反的方式进行:“sudo apt-get update && sudo-apt-get upgrade”(你可以将其放在一行上--'&&'表示第二个命令只有在第一个成功运行后才会执行)。 - Lambart
6个回答

看起来sudo screen -D -r将会在12.04到16.04升级中重新连接到已经断开的安装。这意味着不需要杀死任何包或类似操作。这假设您没有主动停止升级,只是失去了对会话的访问。

6即使是从14.04LTS升级到16.04LTS的"do-release-upgrade"也使用屏幕。 - Ivan Buttinoni
3适用于17.10 -> 18.04 LTS版本! - Preston Lee
1我正在使用x2go进行do-release-upgrade,这可能是个坏主意,因为远程屏幕包在此过程中会出问题。这个方法帮了我大忙。 - endolith
5谢谢!如果你的SSH连接断开,这非常有用。 - Chris Koston
5这应该是被接受的答案。 - Kenji Noguchi
9这在18.04升级到20.04的过程中,对于一个中断的SSH连接起作用。 - John Dunne
1仍然适用于18>20。 - Mark Carpenter Jr
1我希望早点看到这个.. =) - eitch
如果你需要安装screen,尽管dpkg正在使用中,该怎么办? - Coder Guy
@JonathanNeufeld dpkg是独占的。它一次只能运行一个实例。我想你可以从源代码安装它或使用其他安装方法而不使用dpkg。不过,我建议找到一个不需要这样处理的解决方案。 - flickerfly
1依然有效!在我的情况下,是将Ubuntu 20升级到21.04版本。 - Macindows
1为我工作,从21.10升级到22.04。 - Luis Flores III
1我可以确认,将20.04升级至22.04仍然有效。 - shroudednight
1do-release-upgrade从21.10升级到22.04时,自动地在一个screen会话中运行了该过程,因此重新连接(ssh)到我中断的会话并运行"screen -dr"重新连接到现有的升级,我能够继续进行而没有任何问题。 - milegrin
这对我来说显示为"命令未找到"(在从20.04升级到22.04的过程中我的X会话崩溃了),并且关于配置挂起还有一些问题。 - Paŭlo Ebermann

尝试从命令行执行以下步骤:
修复损坏的依赖关系:
$ sudo apt-get install -f

如果还是不起作用,尝试以下方法修复/重新配置已解压但尚未配置的软件包:
$ sudo dpkg --configure -a

然后再尝试升级一次。
如果再次失败,您可能希望删除所有已下载的软件包(它们应该存储在/var/cache/apt/archives目录中),执行以下操作:
$ sudo apt-get clean

那将清理掉这些软件包,但如果你仍然陷入某种奇怪的状态,我不知道还能提出什么其他建议。
$ sudo apt-get autoremove -y

这将删除任何现在已过时的软件包。
当然,在你做任何事情之前,你应该备份你的/home/dave目录(或者你的$HOME目录)中的任何重要内容。

我按照你在这里写的一切做了。感谢详细的建议!但是我担心图形用户界面软件更新程序仍然失败。唯一能让它执行任何操作的方式是通过终端,但这并没有改变我的计算机陷入奇怪状态的问题。 - Dave
当然,很抱歉没有任何方法奏效。我昨天找到了这个帖子,其中提到了一些其他的解决方案。也许这里面有一些有用的信息?http://ubuntuforums.org/showthread.php?t=947124&p=5962046#post5962046 - Lambart
非常感谢你的帮助!没有放弃,经过几次尝试修改步骤后,我终于让它正常工作了!你的代码确实解决了这个问题。 - Dave
不客气,很高兴能帮到你! - Lambart
2确认一下,sudo apt-get install -f 已经为我重新启动了 dpkg。我的升级在网络连接中断时被中止了。也许在远程升级时应该使用 screen,我记得 Ubuntu 曾经这样做过... - lukewendling
7do-release-upgrade会启动一个screen会话(使用screen转义字符^空格),但是如果父do-release-upgrade进程终止,可能会导致整个会话被终止。在启动子shell来修改配置文件时,请小心按下^c,我曾经遇到过这个问题:https://bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+bug/1343737 - Peter Cordes
2在恢复工作的开始处执行 sudo apt-get dist-upgrade 也是值得推荐的。只需确保 /etc/apt/sources.list 中包含了新的发行版即可。 - Pete Ashdown
对我来说,在sudo dpkg --configure -a之后,我不得不重新启动才能让apt正常工作。 - Joshua Grosso Reinstate CMs
1@PeterCordes 我今天在2021年遇到了这个问题... ‍♂️ - Peter Roberts
再说一遍,就是那些在这个网站上出现在数百个“解决方案”中的完全相同的命令,无论是针对任何问题,我已经尝试了很多次,真的很多次,针对很多不同的问题,但从来没有看到它们解决过任何一个问题。 - undefined

我的16.04升级到18.04被中断了,因为我不小心停止了过程。我猜这个过程已经接近尾声(正在安装WiFi包)。以上所有内容都没有起作用,并且始终出现“dpkg前端被另一个进程锁定”的错误提示。随后进行了系统重新启动。
$ sudo dpkg --configure -a

恢复了进程并成功完成升级到18.04。

这对我来说是最简单的恢复过程。幸运的是,部分升级的系统可以重新启动(我中断了Samba配置文件的替换)。感谢您记录下这个恢复过程! - BobHy
4我害怕完全按照这个步骤操作,因为在软件包处于未知状态时重新启动可能导致系统无法正常启动。所以我选择了另外一种方法,先执行pkill dpkg命令,然后再执行sudo dpkg --configure -a命令,最后重启电脑。效果非常好,一切都顺利解决了 :) - iFreilicht

对我来说情况有些不同:进程在下载阶段停止了(因为断电了)。
所以没有屏幕可以恢复,也没有损坏的软件包,因为没有安装任何软件包,但是do-release-upgrade让我先升级850个软件包...
解决方法是恢复文件/etc/apt/sources.list
mv /etc/apt/sources.list.distUpgrade /etc/apt/sources.list

在`/etc/apt/sources.list.d`中,对所有的`*.distUpgrade`都执行相同的操作。
for x in /etc/apt/sources.list.d/*.distUpgrade; do
    mv -- "$x" "${x%.distUpgrade}"
done

然后简单的apt update将系统置于干净的状态,我能够正常进行版本升级。

这个对我有帮助,因为我在虚拟机升级到Ubuntu 23.04并更新了新的软件包列表后错误地关闭了它。 - Jwosty

感谢您的提示。我最初打算通过用户界面进行重启。请求被接受,屏幕变空白,但之后没有发生其他任何事情。您可以看到大约30分钟的小磁盘活动。
然后,我使用Win笔记本电脑上的SSH登录Ubuntu系统,输入 sudo pkill dpkg 然后是 sudo dpkg --configure -a
在这些操作之后,Ubuntu 20.04 升级从我之前意外中断的地方继续进行。20分钟后,升级完成并要求系统重新启动。
重新启动后,一切都正常运行。Openhab、minidlna、smb和所有其他服务都按预期重新启动。

看起来sudo screen -D -r在16-17、17-18和16-18都很有效果。
这样做可以避免费力地修复软件包或回退的麻烦。

谢谢 @emakundi,你救了我两个小时的时间:)) - MR.GEWA