On Sat, Jul 08, 2000 at 02:40:22AM +1000, Mike Benoit wrote:
> I'm attempting to use Rsync (2.4.3) to update files between a Linux server, 
> and a Linux client with a mounted vfat partition (/c). I've heard about the 
> problem where windows mtime's arn't 100% accurate to the second, and 
> noticed that myself, but I'm not totally sure if vfat in linux mimics that 
> problem or not. I highly doubt it though.
> 
> The problem is this. If I run rsync with the following command:
> 
> rsync -rptS --timeout=240 --stats --delete --exclude-from=exclude.lst 
> [EMAIL PROTECTED]::sync/ /c/
> 
> It takes approx. 18minutes on a Celeron 333a 64mb ram client, same only 
> 128mb ram server to complete the task. When using full verbose (-vvvv ) I 
> notice that rsync is calculating checksums for virtually every file if not 
> every file. (25,000 files, 1.5 gb's about) If I run the above line twice in 
> a row, one right after another (obviously no files have changed) it _still_ 
> calculates checksums.
> 
> The weird part is this.
> 
> rsync -rptS --timeout=240 --stats --delete --exclude-from=exclude.lst 
> [EMAIL PROTECTED]::sync/windows /c/windows
> 
> If I run the above line, (just update the windows directory) the first time 
> it runs, all the checksums are calculated, (240megs or so) If I run it 
> again, immediately after, its completed in about 5seconds, no checksums are 
> calculated at all. (this is how it should be, correct?)
> 
> So why when I try to update the entire exported directory (or share, which 
> ever you want to call it?) at once (::sync/ /c/), it calculates the 
> checksums for every file, every time its run regardless, but if I just do 
> one directory at a time(::/sync/windows /c/windows/), it seems to work the 
> way it should? Thanks. 


Were the things in /sync/windows originally copied from a VFAT partition
and the things in a lot of the rest of the directories originally generated
on Unix?   I would assume that everything generated on Windows would have
write times that are only even numbers (since its granularity is 2 seconds)
and that things written to on Unix would have a 50% chance of having an
odd timestamp and thus rsync would think they didn't match.

If --size-only is allowing rsync to accept everything and not calculate
checksums, it's gog to be a timestamp problem.  Somebody should try
modifying rsync to accept any timestamp +-1 second as a match.   I don't
even know if it's worth making it an option or if it should just always do
that.  If VFAT always truncates the second, you wouldn't even need to
check for +1, just minus 1.  Or just compare (t1 & ~1) == (t2 & ~1) or
(t1 >> 1) == (t2 >> 1).

- Dave Dykstra

Reply via email to