【问题标题】:Are rsync operations atomic at file level?rsync 操作在文件级别是原子的吗?
【发布时间】:2011-04-15 17:14:09
【问题描述】:

我试图弄清楚 rsyncing 文件是否是原子的。我找不到任何关于它的确认。由于 rsync 只能发送增量,我的印象是它也只更新了部分实时文件。

另一方面,DJB 建议使用 rsync 同步实时 .cdb 文件,我发现这篇文章 (http://lists.samba.org/archive/rsync/2002-April/002210.html) 都暗示新文件已创建,然后移至正确的位置。

有人可以指出一个官方消息来源来确认其中一个吗?

【问题讨论】:

    标签: synchronization atomic rsync


    【解决方案1】:

    rsync 不会自动写入文件。

    在传输过程中,将在同一目标目录 (.[original-filename].[6-random-characters]) 中创建一个隐藏的临时文件,其中包含处于当前状态的传输文件。

    如果您在传输过程中碰巧失去连接或rsync遇到任何其他问题导致连接被关闭,在杀死rsync进程之前,请确保将临时文件复制到为了保留所有已经转移的包裹。您可以简单地重命名临时文件(删除前导“.”和尾随“.xxxxxx”以获得原始文件名)。

    【讨论】:

      【解决方案2】:

      Rsync 创建一个新的临时文件,该文件将包含来自本地(接收)副本的块以及它需要来自发送副本的任何块。完成后,临时文件将被移动到替换原始文件的位置。

      这里有完整的细节;

      http://rsync.samba.org/how-rsync-works.html

      【讨论】:

      • 您没有回答实际问题。 – 这是否意味着每个单独文件的更新都是原子的?
      • 是的,如果您认为同一目录中的文件移动操作是原子操作。
      • “考虑”?我认为原子与非原子应该是事实,而不是意见? :) 你的意思是说在某些情况下(在本地磁盘上)目录中的文件重命名是不是原子的?如果是这样,什么时候会发生?
      • @zrajm:是的,这取决于,甚至在这里查看更根本的问题是和否的答案:stackoverflow.com/q/7054844/367456
      【解决方案3】:

      有一个 perl 脚本应该添加这个功能: http://www.opensource.apple.com/source/rsync/rsync-40/rsync/support/atomic-rsync

      问题是我试图测试它但它不起作用。还有一些奇怪的地方,因为从 URL 看,它看起来像是与 rsync 4.0 相关的东西,而当前版本的 rsync 是 2.6.9!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        • 1970-01-01
        相关资源
        最近更新 更多