How can I use rsync with a FAT file system?

Solution 1:

I use rsync to backup my photos I store and process on laptop running Linux (Ubuntu 10.4). I backup them to a very basic NAS with 1TB hard disk formatted as FAT32. The NAS case and firmware is very basic, so it doesn't allow to reformat the drive.

The command I use is:

$ rsync --progress --modify-window=1 --update --recursive --times \
  /home/mloskot/Pictures /mnt/nas/Pictures

To allow correct time comparison --modify-window=1 option is used, because FAT32 records file timestamps with 2-seconds resolution which is different to filesystem(s) used on Linux. The --update to avoid unnecessary copying of existing files - it behaves like incremental backup.

In order to do size-based comparison, you can specify --size-only option.

Solution 2:

I would recommend reformatting to a linux fs if you possibly can. As mentioned, FAT has relatively low file size limits and might not handle permissions and ownership quite right. More importantly, FAT doesn't track modification times on files as precisely as, say ext3 (FAT is only precise to within a 2 second window). This leads to particularly nasty behavior with rsync as it will sometimes decide that the original files is newer or older than the backup file by enough that it needs to re-copy the data or at least re-check the hashes. All in all, it makes for very poor performance on backups. If you must stick with FAT, look into rsync's --size-only and --modify-window flags as workarounds.


Solution 3:

Is this rsync on linux to/from a FAT (which version of FAT?) disk or are you using the Windows version cwRsync?

Either way FAT16 and 32 work with both versions (haven't tried FAT12 myself). If you're on a linux system I would expect performance from a FAT filesystem to be a little worse than using a linux-format filesystem as in general they are slightly slower (happy for someone to put me right on this one if I'm wrong).