过去 5 年里,这种情况发生过很多次:升级导致系统崩溃。每次遇到这种情况,我都得重新安装整个系统,这真的很烦人。
有没有办法回滚最新更新,以便无需重新安装即可拥有正常运行的系统?如果没有,哪种方法可以最好地将此作为首要想法提出?
我读到过在 brainstorm.ubuntu.com 上描述的这个想法,但感觉它已经死了,而且论坛上充满了更新破坏事物的例子,这就是为什么我觉得需要对这个话题做点什么。
答案1
在 synaptics 中,你至少可以控制最近的更新:文件菜单、历史记录。
(如果 synaptic 可以启动,但系统已损坏)。因此,使用 apt-...-命令来恢复其更新应该不会太难。
我猜想命令行也有一个历史命令。
也许你必须删除整个软件包,然后安装特定版本。据我所知,可以安装特定版本,但我从未需要这样做。
更新:查找如何使用 apt:
查找最近 3x24 小时内安装的软件包:
find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##'
使用 apt-cache 策略,您可以看到程序的可用版本:
sudo apt-cache policy PROGRAM:
*** 3.6.7+build3+nobinonly-0ubuntu0.10.04.1 0
500 http://de.archive.ubuntu.com/ubuntu/ lucid-updates/main Packages
500 http://security.ubuntu.com/ubuntu/ lucid-security/main Packages
100 /var/lib/dpkg/status
3.6.3+nobinonly-0ubuntu4 0
这里是 3.6.7 和 3.6.3 。现在你知道可能安装的是哪个早期版本(通常不是直接的前身):
sudo apt-get install PROGRAM=3.6.3
然后您需要执行 apt-pinning,以防止将来的更新:
在 /etc/apt/preferences.d/ 中创建一个以你的程序命名的新文件(如果 >= 10.4),
Package: program
Pin: version 3.6.3*
Pin-Priority: 1000
答案2
大多数情况下,您可以咨询/var/log/apt/history.log
apt/synaptic 所做的更改。这只需要一点取证和大量的剪切/粘贴操作。
回到你的系统仍然运行良好的日期。
首先将此后安装的所有软件包放在一起,并将它们放在卸载脚本中。脚本完成后,重新开始添加所有已删除的软件包。
示例案例:
日志文件:
Start-Date: 2014-05-28 21:28:11
Commandline: synaptic
Install: libfglrx-amdxvba1:amd64 (13.12-3kali1, automatic), libgl1-fglrx-glx:amd64 (13.12-3kali1), glx-alternative-fglrx:amd64 (0.4.1kali1, automatic), libfglrx:amd64 (13.12-3kali1, au$
Remove: fglrx-glx-ia32:amd64 (12-6+point-3)
End-Date: 2014-05-28 21:28:27
你可以看到,
libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 & libfglrx:amd64
由 Synaptic 安装。 就像libfglrx:amd64
由 Synaptic 删除一样。
我们按照相反的顺序进行,因此首先删除新安装的软件包,然后重新添加已删除的软件包。
这种情况下的有效命令可能如下所示:
sudo apt-get remove -y libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 libfglrx:amd64 && sudo apt-get install -y libfglrx:amd64
也许不使用该开关并不是最好的主意-y
- 为了更好地控制流程(以避免依赖关系中断)。大多数人都不会在进行一些验证“y”时弄断手指
大多数情况下,通过这种方式可以进行回滚,但如果依赖关系已经被破坏 - 您可能会遇到更大的问题。
答案3
大多数情况下,如果你的系统坏了,这是一个核心问题。
只需启动较旧的内核并重新安装可能未正确更新的最新软件包(尤其是内核软件包)。几点说明:
/var/log/dpkg.log
你的朋友可以检查一下最近更新/安装的软件包列表是什么
sudo apt-get -f install
大多数情况下可以修复半安装的软件包
答案4
在进行重大升级时,我使用以下方法克隆磁盘克隆兹拉。将其刻录到 CD 上,准备好备用(外部)硬盘,然后按照 Clonezilla LiveCD 上的说明进行操作。选择模式partition-image
,该模式占用的空间最少。
如果您认为您的系统已损坏(或希望恢复任何更改),只需启动 Clonezilla LiveCD,选择(外部)硬盘上的映像并恢复它。由于这些映像是磁盘上每个位的逐字副本,因此这可能需要几个小时,具体取决于您的磁盘速度和连接速度(数据(通常是外部 USB 硬盘)与计算机之间的连接)。
顺便说一下,这叫做备份方法。