I was not aware of the --partial option until today.  It sounded 
appealing, but after testing it, I'm not sure if I can make good use of 
it.  I killed a big file half way through transfer:

$ rsync -av --partial --progress BIGFILE .
sending incremental file list
BIGFILE
   3,629,744,128  50%  106.53MB/s    0:00:32  ^C
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(644) [sender=3.1.2]
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(513) [generator=3.1.2]


Then I completed it using --append (which does not test like it used to 
before version 3.0), but the file was different.  The difference turned 
out to be in the last 256KB of the first part of the transfer, just before 
the append.  Everything else was fine.  So, obviously, I need to use the 
verification when using appened.  I tried again, killing the job midway as 
before, then I did this:


$ rsync -av --append-verify --progress BIGFILE .
sending incremental file list
BIGFILE
   7,175,385,088 100%  158.88MB/s    0:00:43 (xfr#1, to-chk=0/1)
WARNING: BIGFILE failed verification -- update retained (will try again).
BIGFILE
   7,175,385,088 100%  251.69MB/s    0:00:27 (xfr#2, to-chk=0/1)

sent 3,461,803,040 bytes  received 1,694,498 bytes  39,582,829.01 bytes/sec
total size is 7,175,385,088  speedup is 2.07


As you can see, it caught the problem, then it fixed it, but this took 70 
seconds, plus about 19 seconds in between the two transfers for a total of 
89 seconds.  But transferring the whole file takes only 56 seconds:

$ rsync -av --progress BIGFILE .
sending incremental file list
BIGFILE
   7,175,385,088 100%  120.51MB/s    0:00:56 (xfr#1, to-chk=0/1)

sent 7,177,137,019 bytes  received 35 bytes  124,819,774.85 bytes/sec
total size is 7,175,385,088  speedup is 1.00

I tested a couple more things.  I chopped off the last megabyte of the 
received half-file like so:

$ truncate -s -1M BIGFILE

That did chop off the damaged part of the file, so then --append worked 
and it took 27 seconds.  Also, --append-verify found the file passed 
verification, so that took 48 seconds instead of 89 seconds.

So for most use cases, I would not use --partial.  I would just start the 
file transfer from scratch.  Use of --append can leave me with errors in 
binary files (even though file size is an exact match), and 
--append-verify works but it can be slower than just starting over.

Are there use cases where you think use of --partial followed by --append 
or --append-verify works much better than leaving them off?

Best,
Mike