我远程管理 12.04 LTS 桌面,并会定期执行 sudo apt-get update sudo apt-get upgrade
但是,如果升级安装了某些导致系统问题的东西,我想将其回滚到以前的版本。
- 有没有办法知道哪些项目将升级,以及升级的版本?
- 升级完成后,有没有办法恢复以前的版本(及其所有依赖项)。
例如,我在本地机器上看到 Flash Player 有更新版本。从历史上看,我遇到过许多 Flash 破坏问题,所以我真的很担心在这个远程系统上盲目更新而无法撤消。
有什么想法/建议吗?
答案1
您可以使用以下命令显示将要升级的软件包和版本变更:
sudo apt-get update
sudo apt-get -V upgrade
“-V”标志会显示附加信息。至于快照 - 您确实必须自己动手。
我最喜欢的回滚功能方法是在 Linux 上使用带快照的 LVM - 但上次我检查时,自动回滚到所选快照没有任何进展。从那时起,这种情况可能已经发生了变化(我很高兴有人能纠正我),但您始终可以使用root=/dev/vg0/root-snap
内核参数(例如)进行启动,然后使用 rsync 将快照同步/dev/vg0/root-snap
到原始卷/dev/vg0/root
,然后丢弃快照。不是理想的,但可以自动化。
当然,ZFS 快照很棒,但是 Linux 上没有官方的、可用于生产的 ZFS 支持(是的,我知道linux之家和 ZFS-FUSE),所以除非您只是玩玩,否则这对您来说并不是一个可行的选择。
更新:看来我们现在可以回滚(用 LVM2 的说法就是合并)快照。因此,对于 LVM2,更新将采用以下形式:
创建根 LV 的 5GB 快照:
lvcreate -s /dev/vg0/root -L5G -n root-snap
更新包(如上)。
如果有必要,请运行以下命令回滚:
lvconvert --merge /dev/vg0/root-snap
由于 /dev/vg0/root(原始 LV)已打开,lvconvert 将通知您,在下次激活此卷时,/dev/vg0/root 将回滚到 /dev/vg0/root-snap。当您运行
lvchange -ay /dev/vg0/root
当此 LV 关闭时,即在下次启动时或运行后:
lvchange -an /dev/vg0/root