[ad_1]
R回滚到以前的版本可能会解决问题或释放磁盘空间。 CentOS/RHEL 都支持回滚功能,但我很难学到 Debian 和 Ubuntu 还不支持回滚功能。
在选择解决方案之前先了解问题
我在其中一个非常便宜的云中远程管理 Ubuntu 14.04.3 LTS 服务器,并且我会定期使用 apt-get 命令/apt 命令来安装软件包或进行升级。 我想在我的系统上安装“Planet Venus”(一个灵活的提要聚合器)软件。 出于某种奇怪的原因,我跑了:$ sudo apt-get -y --install-suggests install planet-venus
我应该停止安装。 但是,那天我太累了,工作过度了。 结果是一场灾难。 我用完了磁盘空间,它在系统上安装了 1764 个软件包。 我的行星-金星装置也坏了。 那是我犯错误并忘记拍摄快照/备份的日子之一。 长话短说:
有关的: 这不是我第一次搞砸了。 查看我的 10 个 Unix 命令行错误。
解决方案
我试过谷歌和 找到这个维基页面 没那么有帮助。 一些邮件列表和论坛帖子根本没有帮助。 最后,来自推特的提示:
如何从命令行回滚 apt-get 升级?
我赶紧跑:# grep -A 2 'Start-Date: 2016-01-17 07:56:42' /var/log/apt/history.log
示例输出(此处为完整转储):
Start-Date: 2016-01-17 07:56:42 Commandline: apt-get --install-suggests install planet-venus Install: libmaa3:amd64 (1.3.2-2, automatic), ant:amd64 (1.9.3-2build1, automatic), libmimic0:amd64 (1.0.4-2.1ubuntu1, .... ... .... b5.3-util:amd64 (5.3.28-3ubuntu3, automatic), libopencore-amrnb0:amd64 (0.1.3-2ubuntu1, automatic), firebird2.5-examples:amd64 (2.5.2.26540.ds4-9ubuntu1, automatic), libboost-random1.54-dev:amd64 (1.54.0-4ubuntu3.1, automatic), libtbb2:amd64 (4.2~20130725-1.1ubuntu1, automatic), libwxgtk2.8-0:amd64 (2.8.12.1+dfsg-2ubuntu2, automatic), libc6-x32:amd64 (2.19-0ubuntu6.6, automatic), magicfilter:amd64 (1.2-64, automatic)
回滚/撤消 apt-get install 命令
休息很容易。
创建列表:
grep -A 2 'Start-Date: 2016-01-17 07:56:42' /var/log/apt/history.log | tail -1 >/tmp/packages.txt
编辑 /tmp/packages.txt 文件并删除 Install: word:
vi /tmp/packages.txt
或者
sed -i 's/Install://' /tmp/packages.txt
最后,我需要清理一些东西:
tr ',' 'n' < /tmp/packages.txt | sed '/automatic)/d' | awk '{ print $1}' > /tmp/final.packages.txt wc -l /tmp/final.packages.txt
示例输出:
1764 /tmp/final.packages.txt
删除包
现在,我有一个在那个不忠的日子安装的所有软件包的完整列表
# less /tmp/final.packages.txt libmaa3:amd64 ant:amd64 libmimic0:amd64 dc:amd64 libparse-yapp-perl:amd64 gir1.2-clutter-1.0:amd64 libjna-java:amd64 python-egenix-mxbeebase:amd64 libxkbcommon-x11-0:amd64 libmpeg2-4:amd64 libopencv-core2.4:amd64 libdvdread4:amd64 libhunspell-1.3-0:amd64 fonts-lobster:amd64 libtotem-plparser18:amd64 libodbcinstq4-1:amd64 jed-common:amd64 .... .. ... xfonts-cyrillic:amd64 postgresql:amd64 db5.3-util:amd64 libopencore-amrnb0:amd64 firebird2.5-examples:amd64 libboost-random1.54-dev:amd64 libtbb2:amd64 libwxgtk2.8-0:amd64 libc6-x32:amd64 magicfilter:amd64
只需卸载它:
# Run as root # Store packages name in $p p="$(</tmp/final.packages.txt)" # Nuke it apt-get --purge remove $p #clears out the local repository of retrieved package files apt-get clean # Just in case ... apt-get autoremove # Verify disk space df -H
结论
为了帮助自己,你必须做你自己。 成为最好的自己。 当你犯错时,从中吸取教训,振作起来,继续前进。 ——戴夫·佩尔泽
我了解到:
- 备份的最佳时间是在服务器上做主要工作之前。
- 三思而后行。 点击进入一次。
- 永远不要盲目相信 apt-get 或任何带有 -y 选项的命令。
- 始终制作快照。 不幸的是,这个盒子仍然使用 ext4。 没有选项可以使用此云服务器提供商将我的文件系统设置为 BTRFS/ZFS(ZFS 上的 Linux)。 所以我现在坚持使用 ext4。
又一天,系统管理员解决了另一个问题。
[ad_2]