Resume transfer of a single file by rsync
To resume an interrupted copy, you should use rsync --append
. From the
man page's explanation of --append
:
This causes rsync to update a file by appending data onto the end of the file, which presumes that the data that already exists on the receiving side is identical with the start of the file on the sending side. [...] Implies
--inplace
, [...]
Option --inplace
makes rsync
(over)write the destination file
contents directly; without --inplace
, rsync
would:
- create a new file with a temporary name,
- copy updated content into it,
- swap it with the destination file, and finally
- delete the old copy of the destination file.
The normal mode of operation mainly prevents conflicts with
applications that might have the destination file open, and a few
other mishaps which are duly listed in the rsync
manpage.
Note that, if a copy/update operation fails in steps 1.-3. above,
rsync
will delete the temporary destination file; the --partial
option disables this behavior and rsync
will leave
partially-transferred temporary files on the destination filesystem.
Thus, resuming a single file copy operation will not gain much
unless you called the first rsync
with --partial
or
--partial-dir
(same effect as --partial
, in addition instructs rsync
to create all temporary files in a specific directory).
Be aware that --append
implies --inplace
, which itself implies --partial
.
By just using
--partial
you should causersync
to leave partial transfers and resume them in subsequent attempts.By using
--append
you should causersync
to both leave partial files and resume them next time. After transferrsync
should verify the checksum of transmitted data only.--append-verify
includes the whole file in the checksum verification, including any portion transferred in a previous transfer.With either
--append
or--append-verify
a failed checksum verification should cause the file to be re-transmitted completely (using--inplace
)
You should be able to resume a mv
or cp
operation with rsync
but you may want to use the --append-verify
option for peace of mind.
Note that using --append
causes rsync
to copy only those files which have its size on the receiver shorter than the size on the sender (regardless of time stamps), or are absent on receiver. By documentation on this option:
If a file needs to be transferred and its size on the receiver is the same or longer than the size on the sender, the file is skipped.
More info in the man page
David Schwartz is correct, --partial
(or better, -P
) does do what you want. I verified this on a 37G file that was stopped ~8g into it, over a network. rsync quickly scanned the first parts of the partial (showing progress as it was going thanks to -P
), and then resumed the transfer to the end of the partial file.