开发者

Are rsync operations atomic at file level?

I'm trying to figure out how if rsyncing files is atomic. I couldn't find any confirmation about it. Due to rsync being able to send only deltas, I was under the impression that it also updates only parts of the live files.

开发者_开发知识库On the other hang DJB recommends rsync for synchronising live .cdb files and I've found this post ( http://lists.samba.org/archive/rsync/2002-April/002210.html ) which both would imply that the new file is created, then moved over to the proper location.

Can someone point me at an official source confirming one or the other?


Rsync creates a new temporary file which will contain blocks from the local (receiving) copy and whatever blocks it requires from the sending copy. When done the temporary file is moved into place replacing the original.

Full details are here;

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


No, rsync does not write files atomically.

During transfer, a hidden temporary file is being created within the same target directory (.[original-filename].[6-random-characters]) which contains the transferred file in its current state.

If you should happen to lose connection during transfer or rsync encounters any other problem, causing the connection to be closed, before killing the rsync process make sure to copy the temporary file in order to keep all the already transferred packages. You can simply rename the temp file (remove the leading "." and the trailing ".xxxxxx" to get the original filename).


There is a perl script that is supposed to add this functionality: http://www.opensource.apple.com/source/rsync/rsync-40/rsync/support/atomic-rsync

The problem is that I tried to test it and it doesn't work. Also there is something strage because from the URL it looks like being something related to rsync 4.0 and the current version of rsync is 2.6.9 !

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜