How to resume an interrupted rsync transfer

An interrupted rsync run can leave a shorter destination file after a link drop, terminal disconnect, or stopped process. Restarting the same large transfer from the beginning wastes time and bandwidth when the existing destination file is a valid prefix of the source.

Use --partial to keep partially transferred files and --append-verify when resuming a regular file that was interrupted while being copied in order. The append-verify mode appends the missing data and then verifies the completed file, which is safer than blind append behavior when the partial file might not match the source prefix.

This method fits large archives, media files, exports, and backup bundles that are not changing while the transfer runs. Do not resume a file that the source application is still writing, and do not use append-style resume when the destination file might be unrelated or manually edited. Verify the final checksum before deleting the source, pruning older backups, or handing the file to another workflow.

Steps to resume an interrupted rsync transfer:

  1. Check the source and partial destination sizes before resuming.
    $ ls -lh /srv/source/archive.img /srv/destination/archive.img
    -rw-r--r-- 1 root root 1.0M Jun  6 04:01 /srv/destination/archive.img
    -rw-r--r-- 1 root root 4.1M Jun  6 04:01 /srv/source/archive.img

    The destination file is shorter, which matches an interrupted transfer. If the destination file is the same size but still suspect, verify checksums before deciding whether to rerun.

  2. Resume the transfer with partial-file retention and append verification.
    $ rsync -a --partial --append-verify --info=progress2 /srv/source/archive.img /srv/destination/
                  0   0%    0.00kB/s    0:00:00
          4,194,318 100%    1.30GB/s    0:00:00 (xfr#1, to-chk=0/1)
          4,194,318 100% 1000.00MB/s    0:00:00 (xfr#1, to-chk=0/1)

    Use the same source and destination path as the interrupted run. For remote copies, keep the same remote account and destination directory.

  3. Compare the completed source and destination checksums.
    $ sha256sum /srv/source/archive.img /srv/destination/archive.img
    b23127de58206b981412fc6c88f0020f3a1e8064ffe96bfb7e48693de80905a3  /srv/source/archive.img
    b23127de58206b981412fc6c88f0020f3a1e8064ffe96bfb7e48693de80905a3  /srv/destination/archive.img
  4. Use a partial directory for scripted or repeated transfers when unfinished files should not sit beside completed files.
    $ rsync -a --partial --partial-dir=.rsync-partial --append-verify /srv/source/archive.img /srv/destination/

    The partial directory keeps temporary resume data under the destination tree. Leave it in place until the transfer completes or until a deliberate cleanup removes abandoned partial files.

  5. Restart without --append-verify when the partial file is not trusted.
    $ rm -f /srv/destination/archive.img
    $ rsync -a --partial --info=progress2 /srv/source/archive.img /srv/destination/

    Remove only the known partial destination file. Do not delete a broader destination directory while recovering from a failed transfer.