我定期创建整个文件系统快照(使用 BTRFS)。我需要防止我的脚本在系统处于不一致状态时拍摄快照,例如在应用程序安装或完整系统升级期间。
- 我怎样才能可靠地检测到此类行为?
就像我们不能调用多个apt
实例一样,我也想为apt install
(或任何其他包管理软件)创建一个锁,以确保快照操作已经完成(可能需要几秒钟,具体取决于磁盘 IO)。
- 如何暂时阻止任何包管理应用程序运行?
我定期创建整个文件系统快照(使用 BTRFS)。我需要防止我的脚本在系统处于不一致状态时拍摄快照,例如在应用程序安装或完整系统升级期间。
就像我们不能调用多个apt
实例一样,我也想为apt install
(或任何其他包管理软件)创建一个锁,以确保快照操作已经完成(可能需要几秒钟,具体取决于磁盘 IO)。
/var/lib/dpkg/lock
是 apt 的锁文件,通过它可以检测 apt 操作是否正在进行:防止打开锁定文件,例如。设置不可变属性:
或者,老实说,意识到您开始快照的那一刻定义了快照中的内容。制作快照时存储性能可能会更差,但启动后所做的更改不会影响快照本身。
事实上,快照是一个相当轻量级的东西——它所做的只是说“如果你修改了这个数据或元数据块,复制它,将它标记为当前有效的,并将它标记为对最后一个快照有效的,并保留它”。这是写时复制文件系统的完全正常操作模式。不同之处在于,当您获得不属于快照的数据时,复制(和修改副本)后的原始数据将返回到空闲扩展区/元数据块池中。