I have found that using Rsync to transfer files from CIFS mounted shares resident on a Widnows client is extremly slow.
I have read a few threads here on SF, and several other forum posts on the web, that point to the issue being related to rsync verifying the data to be transferred. Is anyone able to explain this to me?
Also, if this isn't going to work at the speeds I would like, what are my options if I want support for checksumming to ensure data integrity?
Currently when rsyncing files from a CIFS mounted share to a physically connected drive I net ~25 MB/s over a Gigabit LAN. Conversely, when using Robocopy on the Windows client I realize transfer speeds of ~85 MB/s which is approaching the practical cap of the 5,900 RPM drive. Why such a signifcant difference?
Rsync, for convenience, supports a mode where both files are local. This is the mode you are getting, because Rsync is not talking to a remote machine using the rsync protocol. None of rsync's optimizations are possible in this mode, because there is no program on the remote side to perform the optimized operations.
Rsync, in local mode, will not make any attempt to send only differences, because it has no way to tell what the differences are. It defaults to a standard copy, followed by a standard read to verify the data. If you want checksumming to verify data integrity, you need some software on the other end to do the checksumming locally. You could use an
rsync
server for this purpose, since you're usingrsync
anyway.Yes, I have noticed the same thing.
I have found that using unison is faster than using rsync when the source (a local hard drive) and the destination (a CIFS share) are both mounted on the same machine and so there is only one instance of the synchronization program.
Yes, unison is designed to copy files in both directions on the same invocation, but I have found that even just using it for one-way pushing (because I never edit anything at the destination) is faster than rsync.