rsync操作在文件级别是原子的吗?

时间:2010-09-22 12:40:33

标签: synchronization atomic rsync

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

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

有人能指出我的官方来源确认其中一个吗?

3 个答案:

答案 0 :(得分:13)

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

详细信息在这里;

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

答案 1 :(得分:2)

rsync不会以原子方式写入文件。

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

如果您在转移过程中碰巧丢失连接或rsync遇到任何其他问题,导致连接关闭,杀死之前rsync进程请务必复制临时文件,以保留所有已传输的包。您可以简单地重命名临时文件(删除前导"。"以及尾随" .xxxxxx"以获取原始文件名。)

答案 2 :(得分:0)

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

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