使用 Rsync 并确保在应用更改之前所有文件都已传输

使用 Rsync 并确保在应用更改之前所有文件都已传输

我想知道是否有办法告诉 rsync 仅在文件列表中的所有文件都成功传输时才应用更改(删除、覆盖、创建)。

需要澄清的是,这实质上是围绕转移进行交易。

答案1

您可以使用具有快照功能的文件系统(btrfs,zfs):

  • 快照当前状态
  • 同步
  • 检查 rsync 的退出代码并根据需要回滚

您还可以注册自己的快照:

  • 复制文件(这将成为工作区)
  • rsync 到工作区
  • 检查 rsync 的退出代码,如果退出代码正确,则将工作区移到原始文件上。

答案2

你可以使用这个--delay-updates选项,或者如果你想真的原子更新,atomic-rsync脚本(包含在 Debian 中/usr/share/doc/rsync/scripts/atomic-rsync.gz)。

答案3

从 'rsync' 手册页中,你可能很幸运仅有的对于删除:

某些选项需要 rsync 知道完整的文件列表,因此这些选项会禁用增量递归模式。这些选项包括:--delete-before、--delete-after、--prune-empty-dirs 和 --delay-updates。因此,当连接两端的版本至少为 3.0.0 时,指定 --delete 时的默认删除模式现在是 --delete-during(使用 --del 或 --delete-during 明确请求此改进的删除模式)。另请参阅 --delete-delay 选项,它是比使用 --delete-after 更好的选择。

相关内容