Q:

rsync - why is it transferring whole file

I believe my rsync is transferring the entire file each time instead of using its algorithm and only transferring changes.  Why is this?
I have a text file called rsynctest.  Even if I delete only a single character from the text file on the server end, it appears to be transferring the entire file.  The rsync stats show: Total transferred file size is 2.55G and the file size is 2.4G so I believe it transferred the entire file.  
Here is the output 
/usr/bin/rsync -avrh --progress --compress --stats rsynctest x.x.x.x:/rsynctest
sending incremental file list
test
       2.55G 100%   27.56MB/s    0:01:28 (xfer#1, to-check=0/1)

Number of files: 1
Number of files transferred: 1
Total file size: 2.55G bytes
Total transferred file size: 2.55G bytes
Literal data: 50.53K bytes
Matched data: 2.55G bytes
File list size: 39
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 693
Total bytes received: 404.38K

sent 693 bytes  received 404.38K bytes  2.54K bytes/sec
total size is 2.55G  speedup is 6305.64

A:

It's not actually transferring the whole file. Look at the "Total bytes sent" and "Total bytes received" lines. It's only transferring the checksums of each block of N bytes (where N can vary), and when a given block's checksums turn out identical, that block isn't transferred. But since the file size has changed, it has to check the whole file for differences. And that's what you're seeing in the progress bar: rsync checking the whole file for differences. (Note also the speed of 27.56MB/s -- I doubt your Internet connection could actually maintain a quarter of a hundred megabytes per second transfer speed. Though if it can, more power to you.)

