I’ve been having some problems with my ReadyNAS NV+ unit recently that has me worried the hardware is about to fail, so I’ve been trying to copy everything as efficiently as possible to a spare disk on my Windows 7 desktop.
My first attempt was to use the Microsoft SyncToy, it was relatively efficient but had a couple of problem. The most serious of which is that it appeared to cause the NV+ to freeze occasionally. The other annoyance is, similar to using Windows Explorer to copy, timestamps on folders are not preserved. So I pitched it.
This didn’t leave me with many options, so I tried falling back on the tried and true Rsync utility as Rsync is one of the utilities included with the ReadyNAS firmware, and is available in various forms on Windows including as part of the Cygwin package.
My first thought was rsync-over-ssh, using a relatively compute-lite cipher. I had previously checked out ciphers for SSH, and had found the blowfish was about the least expensive, so I gave it a shot.
It, unfortunately, did not perform well at all. Running top on the NV+ I could see a lot of the CPU was taken up by SSH. ‘Nuff of that.
Ok, so next attempt, the ReadyNAS firmware comes with the Rsync daemon. That should be a pretty optimal experience with a client and server designed for each other. Brrrt! This still suffered from some pretty poor transfer rates.
But all is not lost, I attempted what I figured would give me the worst performance, mounting a share through CIFS and then using Rsync to copy from the CIFS share to the local disk. Generally networked filesystems suffer from some overhead themselves, so putting Rsync on top of that couldn’t be good.
To my surprise, it worked quite well. Ok, so mainly it worked quite well for copying large files, producing transfer rates between 20-30 MB/sec, and consuming about .5 Gbit/sec of network bandwidth. Bingo!
And the bonus, file and folder permissions and timestamps are preserved pretty well. I did run into some issues at first with Rsync (or perhaps Cygwin) having problems setting permissions on a subset of files. It appears to have to do with how Cygwin tries to map POSIX file permission to Windows ACLs, in the end I was able to resolve this by running Rsync as Administrator on Windows.
So, before I forget and have to do it all again, here’s some notes on what I did.
First of all, when you kick of a Cygwin Bash Shell, right click on the Start Menu entry and then select Run as Administrator.
The rest is just mapping a ReadyNAS CIFS share to a drive letter, then firing off an rsync, for example:
% NET USE Q: \\\\READYNAS\\Share % rsync -rlptDWiv --whole-file --inplace \ --delete-during --delete --stats --progress \ /cygdrive/q/ /cygdrive/e/Share/