May 14th, 2011


In which Windows file-copy error-checking is insufficient

My process for storing my digital pictures currently works like this, once they're saved onto my laptop: First, I copy them from my laptop onto my desktop computer, using a simple Windows-network copy. Then, I upload them from the desktop to a remote server using the Unison file synchronizer. Finally, I also run Unison between my laptop and the server to synchronize their databases.

(If I have just a few pictures, or am somewhere else and have a good network connection, I'll use Unison between the laptop and the server first; thus, the importance of the database synchronization.)

The most recent time I did this, I discovered that in the final laptop/server synchronization, six of the photos (out of about 3 GB of photos) did not match. A bit more investigation found that some small errors had been introduced between the laptop and the desktop, and then got propagated up to the server. Luckily, closing the loop allowed me to fix them in this case, but.

So, the conclusion: Windows network copying of files does not do sufficient error-checking to avoid this sort of error in copying files.

This is really rather concerning, given that pretty much all of my backup files over the years have gone through at least one copy of this sort, if not several.

Does anyone know of any settings or configurations that I might be able to adjust to improve the error checking? Or, alternately, is this a known issue of some sort? I expect that the right solution is going to be either switching my copying tools or else md5hashing everything I copy, but I'm wondering if there are simpler solutions. For that matter, before someone suggests "switch to Linux" -- what does NFS do with regards to error-checking? What about Samba (if I'm connecting from my laptop), or SCP?

And, for that matter, does anyone know what sort of checking Windows might be doing on file read/writes? It's possible that this isn't a network issue, but a disk I/O issue -- in which case, the same "what does Linux do?" question applies for 'cp'. Is there a "safe cp" that does error-checking?