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 !
精彩评论