安装程序确实更改了很多系统文件。如果软件更新期间出现故障,系统可能无法启动。然而,即使是简单的单文件写入操作也几乎不可能确保原子性。所有这些问题在 UNIX 安装程序中是如何解决的?它们依赖于文件系统吗?
答案1
yum
3.2.25 或更高版本带来历史命令来检查、完成或回滚事务。历史信息存在于/var/lib/yum/历史记录。该yum-complete-transaction
工具可以在断电或崩溃后使用来完成事务,或者通过删除保存在其中的日志信息来简单地丢弃中止的事务。/var/lib/yum/transaction-all和/var/lib/yum/事务完成。
更新
原子性基于 Sqlite 数据库提供原子性幻觉的能力。有关这些技术的出色讨论可以在题为SQLite 中的原子提交。
答案2
实际上,原子更新是一个问题; yum(以及 apt、pacman 等)不是原子的。幸运的是,人们正在尝试解决方案。看rpm-ostree和CoreOS原子升级。
答案3
yum 依赖 rpm 来完成事务... rpm 不是原子的。历史或 yum-complete-transaction 尝试在事后尽力做到最好。
您还可以使用 yum 最新版本中的 LVM 快照功能,然后在出现问题时回滚整个块设备。但您必须使用外部可引导 LVM 环境进行实际回滚(因为 yum/rpm/glibc 都可以在此时被软管处理)。
如果您需要原子保证,那么您不能直接使用 rpm(例如,您的 ostree、0install 或分层多个可启动环境)。