Can rsync resume after being interrupted?
I used rsync
to copy a large number of files, but my OS (Ubuntu) restarted unexpectedly.
After reboot, I ran rsync
again, but from the output on the terminal, I found that rsync
still copied those already copied before. But I heard that rsync
is able to find differences between source and destination, and therefore to just copy the differences. So I wonder in my case if rsync
can resume what was left last time?
rsync
|
show 1 more comment
I used rsync
to copy a large number of files, but my OS (Ubuntu) restarted unexpectedly.
After reboot, I ran rsync
again, but from the output on the terminal, I found that rsync
still copied those already copied before. But I heard that rsync
is able to find differences between source and destination, and therefore to just copy the differences. So I wonder in my case if rsync
can resume what was left last time?
rsync
Yes, rsync won't copy again files that it's already copied. There are a few edge cases where its detection can fail. Did it copy all the already-copied files? What options did you use? What were the source and target filesystems? If you run rsync again after it's copied everything, does it copy again?
– Gilles
Sep 16 '12 at 1:56
@Gilles: Thanks! (1) I think I saw rsync copied the same files again from its output on the terminal. (2) Options are same as in my other post, i.e.sudo rsync -azvv /home/path/folder1/ /home/path/folder2
. (3) Source and target are both NTFS, buy source is an external HDD, and target is an internal HDD. (3) It is now running and hasn't finished yet.
– Tim
Sep 16 '12 at 2:30
There is also the --partial flag to resume partially transferred files (useful for large files)
– jwbensley
Sep 16 '12 at 16:15
3
@Tim Off the top of my head, there's at least clock skew, and differences in time resolution (a common issue with FAT filesystems which store times in 2-second increments, the--modify-window
option helps with that).
– Gilles
Sep 19 '12 at 9:25
1
if you did not have / or /. at the tail end of the file source path argument then it will be making an extra copy in a subdirectory that has the same name as the source directory
– Skaperen
Aug 19 '15 at 13:50
|
show 1 more comment
I used rsync
to copy a large number of files, but my OS (Ubuntu) restarted unexpectedly.
After reboot, I ran rsync
again, but from the output on the terminal, I found that rsync
still copied those already copied before. But I heard that rsync
is able to find differences between source and destination, and therefore to just copy the differences. So I wonder in my case if rsync
can resume what was left last time?
rsync
I used rsync
to copy a large number of files, but my OS (Ubuntu) restarted unexpectedly.
After reboot, I ran rsync
again, but from the output on the terminal, I found that rsync
still copied those already copied before. But I heard that rsync
is able to find differences between source and destination, and therefore to just copy the differences. So I wonder in my case if rsync
can resume what was left last time?
rsync
rsync
edited Jul 29 '14 at 18:38
Anthon
61.4k17105168
61.4k17105168
asked Sep 15 '12 at 23:36
TimTim
28.1k78269490
28.1k78269490
Yes, rsync won't copy again files that it's already copied. There are a few edge cases where its detection can fail. Did it copy all the already-copied files? What options did you use? What were the source and target filesystems? If you run rsync again after it's copied everything, does it copy again?
– Gilles
Sep 16 '12 at 1:56
@Gilles: Thanks! (1) I think I saw rsync copied the same files again from its output on the terminal. (2) Options are same as in my other post, i.e.sudo rsync -azvv /home/path/folder1/ /home/path/folder2
. (3) Source and target are both NTFS, buy source is an external HDD, and target is an internal HDD. (3) It is now running and hasn't finished yet.
– Tim
Sep 16 '12 at 2:30
There is also the --partial flag to resume partially transferred files (useful for large files)
– jwbensley
Sep 16 '12 at 16:15
3
@Tim Off the top of my head, there's at least clock skew, and differences in time resolution (a common issue with FAT filesystems which store times in 2-second increments, the--modify-window
option helps with that).
– Gilles
Sep 19 '12 at 9:25
1
if you did not have / or /. at the tail end of the file source path argument then it will be making an extra copy in a subdirectory that has the same name as the source directory
– Skaperen
Aug 19 '15 at 13:50
|
show 1 more comment
Yes, rsync won't copy again files that it's already copied. There are a few edge cases where its detection can fail. Did it copy all the already-copied files? What options did you use? What were the source and target filesystems? If you run rsync again after it's copied everything, does it copy again?
– Gilles
Sep 16 '12 at 1:56
@Gilles: Thanks! (1) I think I saw rsync copied the same files again from its output on the terminal. (2) Options are same as in my other post, i.e.sudo rsync -azvv /home/path/folder1/ /home/path/folder2
. (3) Source and target are both NTFS, buy source is an external HDD, and target is an internal HDD. (3) It is now running and hasn't finished yet.
– Tim
Sep 16 '12 at 2:30
There is also the --partial flag to resume partially transferred files (useful for large files)
– jwbensley
Sep 16 '12 at 16:15
3
@Tim Off the top of my head, there's at least clock skew, and differences in time resolution (a common issue with FAT filesystems which store times in 2-second increments, the--modify-window
option helps with that).
– Gilles
Sep 19 '12 at 9:25
1
if you did not have / or /. at the tail end of the file source path argument then it will be making an extra copy in a subdirectory that has the same name as the source directory
– Skaperen
Aug 19 '15 at 13:50
Yes, rsync won't copy again files that it's already copied. There are a few edge cases where its detection can fail. Did it copy all the already-copied files? What options did you use? What were the source and target filesystems? If you run rsync again after it's copied everything, does it copy again?
– Gilles
Sep 16 '12 at 1:56
Yes, rsync won't copy again files that it's already copied. There are a few edge cases where its detection can fail. Did it copy all the already-copied files? What options did you use? What were the source and target filesystems? If you run rsync again after it's copied everything, does it copy again?
– Gilles
Sep 16 '12 at 1:56
@Gilles: Thanks! (1) I think I saw rsync copied the same files again from its output on the terminal. (2) Options are same as in my other post, i.e.
sudo rsync -azvv /home/path/folder1/ /home/path/folder2
. (3) Source and target are both NTFS, buy source is an external HDD, and target is an internal HDD. (3) It is now running and hasn't finished yet.– Tim
Sep 16 '12 at 2:30
@Gilles: Thanks! (1) I think I saw rsync copied the same files again from its output on the terminal. (2) Options are same as in my other post, i.e.
sudo rsync -azvv /home/path/folder1/ /home/path/folder2
. (3) Source and target are both NTFS, buy source is an external HDD, and target is an internal HDD. (3) It is now running and hasn't finished yet.– Tim
Sep 16 '12 at 2:30
There is also the --partial flag to resume partially transferred files (useful for large files)
– jwbensley
Sep 16 '12 at 16:15
There is also the --partial flag to resume partially transferred files (useful for large files)
– jwbensley
Sep 16 '12 at 16:15
3
3
@Tim Off the top of my head, there's at least clock skew, and differences in time resolution (a common issue with FAT filesystems which store times in 2-second increments, the
--modify-window
option helps with that).– Gilles
Sep 19 '12 at 9:25
@Tim Off the top of my head, there's at least clock skew, and differences in time resolution (a common issue with FAT filesystems which store times in 2-second increments, the
--modify-window
option helps with that).– Gilles
Sep 19 '12 at 9:25
1
1
if you did not have / or /. at the tail end of the file source path argument then it will be making an extra copy in a subdirectory that has the same name as the source directory
– Skaperen
Aug 19 '15 at 13:50
if you did not have / or /. at the tail end of the file source path argument then it will be making an extra copy in a subdirectory that has the same name as the source directory
– Skaperen
Aug 19 '15 at 13:50
|
show 1 more comment
5 Answers
5
active
oldest
votes
First of all, regarding the "resume" part of your question, --partial
just tells the receiving end to keep partially transferred files if the sending end disappears as though they were completely transferred.
While transferring files, they are temporarily saved as hidden files in their target folders (e.g. .TheFileYouAreSending.lRWzDC
), or a specifically chosen folder if you set the --partial-dir
switch. When a transfer fails and --partial
is not set, this hidden file will remain in the target folder under this cryptic name, but if --partial
is set, the file will be renamed to the actual target file name (in this case, TheFileYouAreSending
), even though the file isn't complete. The point is that you can later complete the transfer by running rsync again with either --append
or --append-verify
.
So, --partial
doesn't itself resume a failed or cancelled transfer. To resume it, you'll have to use one of the aforementioned flags on the next run. So, if you need to make sure that the target won't ever contain files that appear to be fine but are actually incomplete, you shouldn't use --partial
. Conversely, if you want to make sure you never leave behind stray failed files that are hidden in the target directory, and you know you'll be able to complete the transfer later, --partial
is there to help you.
With regards to the --append
switch mentioned above, this is the actual "resume" switch, and you can use it whether or not you're also using --partial
. Actually, when you're using --append
, no temporary files are ever created. Files are written directly to their targets. In this respect, --append
gives the same result as --partial
on a failed transfer, but without creating those hidden temporary files.
So, to sum up, if you're moving large files and you want the option to resume a cancelled or failed rsync operation from the exact point that rsync
stopped, you need to use the --append
or --append-verify
switch on the next attempt.
As @Alex points out below, since version 3.0.0 rsync
now has a new option, --append-verify
, which behaves like --append
did before that switch existed. You probably always want the behaviour of --append-verify
, so check your version with rsync --version
. If you're on a Mac and not using rsync
from homebrew
, you'll (at least up to and including El Capitan) have an older version and need to use --append
rather than --append-verify
. Why they didn't keep the behaviour on --append
and instead named the newcomer --append-no-verify
is a bit puzzling. Either way, --append
on rsync
before version 3 is the same as --append-verify
on the newer versions.
--append-verify
isn't dangerous: It will always read and compare the data on both ends and not just assume they're equal. It does this using checksums, so it's easy on the network, but it does require reading the shared amount of data on both ends of the wire before it can actually resume the transfer by appending to the target.
Second of all, you said that you "heard that rsync is able to find differences between source and destination, and therefore to just copy the differences."
That's correct, and it's called delta transfer, but it's a different thing. To enable this, you add the -c
, or --checksum
switch. Once this switch is used, rsync will examine files that exist on both ends of the wire. It does this in chunks, compares the checksums on both ends, and if they differ, it transfers just the differing parts of the file. But, as @Jonathan points out below, the comparison is only done when files are of the same size on both ends — different sizes will cause rsync to upload the entire file, overwriting the target with the same name.
This requires a bit of computation on both ends initially, but can be extremely efficient at reducing network load if for example you're frequently backing up very large files fixed-size files that often contain minor changes. Examples that come to mind are virtual hard drive image files used in virtual machines or iSCSI targets.
It is notable that if you use --checksum
to transfer a batch of files that are completely new to the target system, rsync will still calculate their checksums on the source system before transferring them. Why I do not know :)
So, in short:
If you're often using rsync to just "move stuff from A to B" and want the option to cancel that operation and later resume it, don't use --checksum
, but do use --append-verify
.
If you're using rsync to back up stuff often, using --append-verify
probably won't do much for you, unless you're in the habit of sending large files that continuously grow in size but are rarely modified once written. As a bonus tip, if you're backing up to storage that supports snapshotting such as btrfs
or zfs
, adding the --inplace
switch will help you reduce snapshot sizes since changed files aren't recreated but rather the changed blocks are written directly over the old ones. This switch is also useful if you want to avoid rsync creating copies of files on the target when only minor changes have occurred.
When using --append-verify
, rsync will behave just like it always does on all files that are the same size. If they differ in modification or other timestamps, it will overwrite the target with the source without scrutinizing those files further. --checksum
will compare the contents (checksums) of every file pair of identical name and size.
UPDATED 2015-09-01 Changed to reflect points made by @Alex (thanks!)
UPDATED 2017-07-14 Changed to reflect points made by @Jonathan (thanks!)
1
According to the documentation--append
does not check the data, but--append-verify
does. Also, as @gaoithe points out in a comment below, the documentation claims--partial
does resume from previous files.
– Alex
Aug 28 '15 at 3:49
2
This says--partial
is enough.
– Cees Timmerman
Sep 15 '15 at 17:21
2
opens tab 526 Using the --partial option tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster. Simpler doc.
– Cees Timmerman
Sep 16 '15 at 15:36
2
@CMCDragonkai Actually, check out Alexander's answer below about--partial-dir
— looks like it's the perfect bullet for this. I may have missed something entirely ;)
– DanielSmedegaardBuus
May 10 '16 at 19:31
3
What's your level of confidence in the described behavior of--checksum
? According to theman
it has more to do with deciding which files to flag for transfer than with delta-transfer (which, presumably, isrsync
's default behavior).
– Jonathan Y.
Jun 14 '17 at 5:48
|
show 14 more comments
TL;DR:
Just specify a partial directory as the rsync man pages recommends:
--partial-dir=.rsync-partial
Longer explanation:
There is actually a built-in feature for doing this using the --partial-dir
option, which has several advantages over the --partial
and --append-verify
/--append
alternative.
Excerpt from the rsync man pages:
--partial-dir=DIR
A better way to keep partial files than the --partial option is
to specify a DIR that will be used to hold the partial data
(instead of writing it out to the destination file). On the
next transfer, rsync will use a file found in this dir as data
to speed up the resumption of the transfer and then delete it
after it has served its purpose.
Note that if --whole-file is specified (or implied), any par-
tial-dir file that is found for a file that is being updated
will simply be removed (since rsync is sending files without
using rsync's delta-transfer algorithm).
Rsync will create the DIR if it is missing (just the last dir --
not the whole path). This makes it easy to use a relative path
(such as "--partial-dir=.rsync-partial") to have rsync create
the partial-directory in the destination file's directory when
needed, and then remove it again when the partial file is
deleted.
If the partial-dir value is not an absolute path, rsync will add
an exclude rule at the end of all your existing excludes. This
will prevent the sending of any partial-dir files that may exist
on the sending side, and will also prevent the untimely deletion
of partial-dir items on the receiving side. An example: the
above --partial-dir option would add the equivalent of "-f '-p
.rsync-partial/'" at the end of any other filter rules.
By default, rsync uses a random temporary file name which gets deleted when a transfer fails. As mentioned, using --partial
you can make rsync keep the incomplete file as if it were successfully transferred, so that it is possible to later append to it using the --append-verify
/--append
options. However there are several reasons this is sub-optimal.
Your backup files may not be complete, and without checking the remote file which must still be unaltered, there's no way to know.
If you are attempting to use
--backup
and--backup-dir
, you've just added a new version of this file that never even exited before to your version history.
However if we use --partial-dir
, rsync will preserve the temporary partial file, and resume downloading using that partial file next time you run it, and we do not suffer from the above issues.
2
This is really the answer. Hey everyone, LOOK HERE!!
– trs
Apr 7 '17 at 0:00
2
I agree this is a much more concise answer to the question. the TL;DR: is perfect and for those that need more can read the longer bit. Strong work.
– JKOlaf
Jun 28 '17 at 0:11
add a comment |
You may want to add the -P
option to your command.
From the man
page:
--partial By default, rsync will delete any partially transferred file if the transfer
is interrupted. In some circumstances it is more desirable to keep partially
transferred files. Using the --partial option tells rsync to keep the partial
file which should make a subsequent transfer of the rest of the file much faster.
-P The -P option is equivalent to --partial --progress. Its pur-
pose is to make it much easier to specify these two options for
a long transfer that may be interrupted.
So instead of:
sudo rsync -azvv /home/path/folder1/ /home/path/folder2
Do:
sudo rsync -azvvP /home/path/folder1/ /home/path/folder2
Of course, if you don't want the progress updates, you can just use --partial
, i.e.:
sudo rsync --partial -azvv /home/path/folder1/ /home/path/folder2
@Flimm not quite correct. If there is an interruption (network or receiving side) then when using --partial the partial file is kept AND it is used when rsync is resumed. From the manpage: "Using the --partial option tells rsync to keep the partial file which should <b>make a subsequent transfer of the rest of the file much faster</b>."
– gaoithe
Aug 19 '15 at 11:29
2
@Flimm and @gaoithe, my answer wasn't quite accurate, and definitely not up-to-date. I've updated it to reflect version 3 + ofrsync
. It's important to stress, though, that--partial
does not itself resume a failed transfer. See my answer for details :)
– DanielSmedegaardBuus
Sep 1 '15 at 14:11
2
@DanielSmedegaardBuus I tried it and the-P
is enough in my case. Versions: client has 3.1.0 and server has 3.1.1. I interrupted the transfer of a single large file with ctrl-c. I guess I am missing something.
– guettli
Nov 18 '15 at 12:28
add a comment |
I think you are forcibly calling the rsync
and hence all data is getting downloaded when you recall it again. use --progress
option to copy only those files which are not copied and --delete
option to delete any files if already copied and now it does not exist in source folder...
rsync -avz --progress --delete -e /home/path/folder1/ /home/path/folder2
If you are using ssh to login to other system and copy the files,
rsync -avz --progress --delete -e "ssh -o UserKnownHostsFile=/dev/null -o
StrictHostKeyChecking=no" /home/path/folder1/ /home/path/folder2
let me know if there is any mistake in my understanding of this concept...
1
Can you please edit your answer and explain what your special ssh call does, and why you advice to do it?
– Fabien
Jun 14 '13 at 12:12
2
@Fabien He tells rsync to set two ssh options (rsync uses ssh to connect). The second one tells ssh to not prompt for confirmation if the host he's connecting to isn't already known (by existing in the "known hosts" file). The first one tells ssh to not use the default known hosts file (which would be ~/.ssh/known_hosts). He uses /dev/null instead, which is of course always empty, and as ssh would then not find the host in there, it would normally prompt for confirmation, hence option two. Upon connecting, ssh writes the now known host to /dev/null, effectively forgetting it instantly :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:12
1
...but you were probably wondering what effect, if any, it has on the rsync operation itself. The answer is none. It only serves to not have the host you're connecting to added to your SSH known hosts file. Perhaps he's a sysadmin often connecting to a great number of new servers, temporary systems or whatnot. I don't know :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:23
4
"use --progress option to copy only those files which are not copied" What?
– moi
May 10 '16 at 13:49
1
There are a couple errors here; one is very serious:--delete
will delete files in the destination that don't exist in the source. The less serious one is that--progress
doesn't modify how things are copied; it just gives you a progress report on each file as it copies. (I fixed the serious error; replaced it with--remove-source-files
.)
– Paul d'Aoust
Nov 17 '16 at 22:39
add a comment |
I am using this simple script. Feel free to adjust certain flags and/or paramterize it.
#!/bin/bash
while [ 1 ]
do
rsync -avz --partial [source] [dest]:
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "Rsync failure. Backing off and retrying..."
sleep 180
fi
done
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f48298%2fcan-rsync-resume-after-being-interrupted%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
First of all, regarding the "resume" part of your question, --partial
just tells the receiving end to keep partially transferred files if the sending end disappears as though they were completely transferred.
While transferring files, they are temporarily saved as hidden files in their target folders (e.g. .TheFileYouAreSending.lRWzDC
), or a specifically chosen folder if you set the --partial-dir
switch. When a transfer fails and --partial
is not set, this hidden file will remain in the target folder under this cryptic name, but if --partial
is set, the file will be renamed to the actual target file name (in this case, TheFileYouAreSending
), even though the file isn't complete. The point is that you can later complete the transfer by running rsync again with either --append
or --append-verify
.
So, --partial
doesn't itself resume a failed or cancelled transfer. To resume it, you'll have to use one of the aforementioned flags on the next run. So, if you need to make sure that the target won't ever contain files that appear to be fine but are actually incomplete, you shouldn't use --partial
. Conversely, if you want to make sure you never leave behind stray failed files that are hidden in the target directory, and you know you'll be able to complete the transfer later, --partial
is there to help you.
With regards to the --append
switch mentioned above, this is the actual "resume" switch, and you can use it whether or not you're also using --partial
. Actually, when you're using --append
, no temporary files are ever created. Files are written directly to their targets. In this respect, --append
gives the same result as --partial
on a failed transfer, but without creating those hidden temporary files.
So, to sum up, if you're moving large files and you want the option to resume a cancelled or failed rsync operation from the exact point that rsync
stopped, you need to use the --append
or --append-verify
switch on the next attempt.
As @Alex points out below, since version 3.0.0 rsync
now has a new option, --append-verify
, which behaves like --append
did before that switch existed. You probably always want the behaviour of --append-verify
, so check your version with rsync --version
. If you're on a Mac and not using rsync
from homebrew
, you'll (at least up to and including El Capitan) have an older version and need to use --append
rather than --append-verify
. Why they didn't keep the behaviour on --append
and instead named the newcomer --append-no-verify
is a bit puzzling. Either way, --append
on rsync
before version 3 is the same as --append-verify
on the newer versions.
--append-verify
isn't dangerous: It will always read and compare the data on both ends and not just assume they're equal. It does this using checksums, so it's easy on the network, but it does require reading the shared amount of data on both ends of the wire before it can actually resume the transfer by appending to the target.
Second of all, you said that you "heard that rsync is able to find differences between source and destination, and therefore to just copy the differences."
That's correct, and it's called delta transfer, but it's a different thing. To enable this, you add the -c
, or --checksum
switch. Once this switch is used, rsync will examine files that exist on both ends of the wire. It does this in chunks, compares the checksums on both ends, and if they differ, it transfers just the differing parts of the file. But, as @Jonathan points out below, the comparison is only done when files are of the same size on both ends — different sizes will cause rsync to upload the entire file, overwriting the target with the same name.
This requires a bit of computation on both ends initially, but can be extremely efficient at reducing network load if for example you're frequently backing up very large files fixed-size files that often contain minor changes. Examples that come to mind are virtual hard drive image files used in virtual machines or iSCSI targets.
It is notable that if you use --checksum
to transfer a batch of files that are completely new to the target system, rsync will still calculate their checksums on the source system before transferring them. Why I do not know :)
So, in short:
If you're often using rsync to just "move stuff from A to B" and want the option to cancel that operation and later resume it, don't use --checksum
, but do use --append-verify
.
If you're using rsync to back up stuff often, using --append-verify
probably won't do much for you, unless you're in the habit of sending large files that continuously grow in size but are rarely modified once written. As a bonus tip, if you're backing up to storage that supports snapshotting such as btrfs
or zfs
, adding the --inplace
switch will help you reduce snapshot sizes since changed files aren't recreated but rather the changed blocks are written directly over the old ones. This switch is also useful if you want to avoid rsync creating copies of files on the target when only minor changes have occurred.
When using --append-verify
, rsync will behave just like it always does on all files that are the same size. If they differ in modification or other timestamps, it will overwrite the target with the source without scrutinizing those files further. --checksum
will compare the contents (checksums) of every file pair of identical name and size.
UPDATED 2015-09-01 Changed to reflect points made by @Alex (thanks!)
UPDATED 2017-07-14 Changed to reflect points made by @Jonathan (thanks!)
1
According to the documentation--append
does not check the data, but--append-verify
does. Also, as @gaoithe points out in a comment below, the documentation claims--partial
does resume from previous files.
– Alex
Aug 28 '15 at 3:49
2
This says--partial
is enough.
– Cees Timmerman
Sep 15 '15 at 17:21
2
opens tab 526 Using the --partial option tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster. Simpler doc.
– Cees Timmerman
Sep 16 '15 at 15:36
2
@CMCDragonkai Actually, check out Alexander's answer below about--partial-dir
— looks like it's the perfect bullet for this. I may have missed something entirely ;)
– DanielSmedegaardBuus
May 10 '16 at 19:31
3
What's your level of confidence in the described behavior of--checksum
? According to theman
it has more to do with deciding which files to flag for transfer than with delta-transfer (which, presumably, isrsync
's default behavior).
– Jonathan Y.
Jun 14 '17 at 5:48
|
show 14 more comments
First of all, regarding the "resume" part of your question, --partial
just tells the receiving end to keep partially transferred files if the sending end disappears as though they were completely transferred.
While transferring files, they are temporarily saved as hidden files in their target folders (e.g. .TheFileYouAreSending.lRWzDC
), or a specifically chosen folder if you set the --partial-dir
switch. When a transfer fails and --partial
is not set, this hidden file will remain in the target folder under this cryptic name, but if --partial
is set, the file will be renamed to the actual target file name (in this case, TheFileYouAreSending
), even though the file isn't complete. The point is that you can later complete the transfer by running rsync again with either --append
or --append-verify
.
So, --partial
doesn't itself resume a failed or cancelled transfer. To resume it, you'll have to use one of the aforementioned flags on the next run. So, if you need to make sure that the target won't ever contain files that appear to be fine but are actually incomplete, you shouldn't use --partial
. Conversely, if you want to make sure you never leave behind stray failed files that are hidden in the target directory, and you know you'll be able to complete the transfer later, --partial
is there to help you.
With regards to the --append
switch mentioned above, this is the actual "resume" switch, and you can use it whether or not you're also using --partial
. Actually, when you're using --append
, no temporary files are ever created. Files are written directly to their targets. In this respect, --append
gives the same result as --partial
on a failed transfer, but without creating those hidden temporary files.
So, to sum up, if you're moving large files and you want the option to resume a cancelled or failed rsync operation from the exact point that rsync
stopped, you need to use the --append
or --append-verify
switch on the next attempt.
As @Alex points out below, since version 3.0.0 rsync
now has a new option, --append-verify
, which behaves like --append
did before that switch existed. You probably always want the behaviour of --append-verify
, so check your version with rsync --version
. If you're on a Mac and not using rsync
from homebrew
, you'll (at least up to and including El Capitan) have an older version and need to use --append
rather than --append-verify
. Why they didn't keep the behaviour on --append
and instead named the newcomer --append-no-verify
is a bit puzzling. Either way, --append
on rsync
before version 3 is the same as --append-verify
on the newer versions.
--append-verify
isn't dangerous: It will always read and compare the data on both ends and not just assume they're equal. It does this using checksums, so it's easy on the network, but it does require reading the shared amount of data on both ends of the wire before it can actually resume the transfer by appending to the target.
Second of all, you said that you "heard that rsync is able to find differences between source and destination, and therefore to just copy the differences."
That's correct, and it's called delta transfer, but it's a different thing. To enable this, you add the -c
, or --checksum
switch. Once this switch is used, rsync will examine files that exist on both ends of the wire. It does this in chunks, compares the checksums on both ends, and if they differ, it transfers just the differing parts of the file. But, as @Jonathan points out below, the comparison is only done when files are of the same size on both ends — different sizes will cause rsync to upload the entire file, overwriting the target with the same name.
This requires a bit of computation on both ends initially, but can be extremely efficient at reducing network load if for example you're frequently backing up very large files fixed-size files that often contain minor changes. Examples that come to mind are virtual hard drive image files used in virtual machines or iSCSI targets.
It is notable that if you use --checksum
to transfer a batch of files that are completely new to the target system, rsync will still calculate their checksums on the source system before transferring them. Why I do not know :)
So, in short:
If you're often using rsync to just "move stuff from A to B" and want the option to cancel that operation and later resume it, don't use --checksum
, but do use --append-verify
.
If you're using rsync to back up stuff often, using --append-verify
probably won't do much for you, unless you're in the habit of sending large files that continuously grow in size but are rarely modified once written. As a bonus tip, if you're backing up to storage that supports snapshotting such as btrfs
or zfs
, adding the --inplace
switch will help you reduce snapshot sizes since changed files aren't recreated but rather the changed blocks are written directly over the old ones. This switch is also useful if you want to avoid rsync creating copies of files on the target when only minor changes have occurred.
When using --append-verify
, rsync will behave just like it always does on all files that are the same size. If they differ in modification or other timestamps, it will overwrite the target with the source without scrutinizing those files further. --checksum
will compare the contents (checksums) of every file pair of identical name and size.
UPDATED 2015-09-01 Changed to reflect points made by @Alex (thanks!)
UPDATED 2017-07-14 Changed to reflect points made by @Jonathan (thanks!)
1
According to the documentation--append
does not check the data, but--append-verify
does. Also, as @gaoithe points out in a comment below, the documentation claims--partial
does resume from previous files.
– Alex
Aug 28 '15 at 3:49
2
This says--partial
is enough.
– Cees Timmerman
Sep 15 '15 at 17:21
2
opens tab 526 Using the --partial option tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster. Simpler doc.
– Cees Timmerman
Sep 16 '15 at 15:36
2
@CMCDragonkai Actually, check out Alexander's answer below about--partial-dir
— looks like it's the perfect bullet for this. I may have missed something entirely ;)
– DanielSmedegaardBuus
May 10 '16 at 19:31
3
What's your level of confidence in the described behavior of--checksum
? According to theman
it has more to do with deciding which files to flag for transfer than with delta-transfer (which, presumably, isrsync
's default behavior).
– Jonathan Y.
Jun 14 '17 at 5:48
|
show 14 more comments
First of all, regarding the "resume" part of your question, --partial
just tells the receiving end to keep partially transferred files if the sending end disappears as though they were completely transferred.
While transferring files, they are temporarily saved as hidden files in their target folders (e.g. .TheFileYouAreSending.lRWzDC
), or a specifically chosen folder if you set the --partial-dir
switch. When a transfer fails and --partial
is not set, this hidden file will remain in the target folder under this cryptic name, but if --partial
is set, the file will be renamed to the actual target file name (in this case, TheFileYouAreSending
), even though the file isn't complete. The point is that you can later complete the transfer by running rsync again with either --append
or --append-verify
.
So, --partial
doesn't itself resume a failed or cancelled transfer. To resume it, you'll have to use one of the aforementioned flags on the next run. So, if you need to make sure that the target won't ever contain files that appear to be fine but are actually incomplete, you shouldn't use --partial
. Conversely, if you want to make sure you never leave behind stray failed files that are hidden in the target directory, and you know you'll be able to complete the transfer later, --partial
is there to help you.
With regards to the --append
switch mentioned above, this is the actual "resume" switch, and you can use it whether or not you're also using --partial
. Actually, when you're using --append
, no temporary files are ever created. Files are written directly to their targets. In this respect, --append
gives the same result as --partial
on a failed transfer, but without creating those hidden temporary files.
So, to sum up, if you're moving large files and you want the option to resume a cancelled or failed rsync operation from the exact point that rsync
stopped, you need to use the --append
or --append-verify
switch on the next attempt.
As @Alex points out below, since version 3.0.0 rsync
now has a new option, --append-verify
, which behaves like --append
did before that switch existed. You probably always want the behaviour of --append-verify
, so check your version with rsync --version
. If you're on a Mac and not using rsync
from homebrew
, you'll (at least up to and including El Capitan) have an older version and need to use --append
rather than --append-verify
. Why they didn't keep the behaviour on --append
and instead named the newcomer --append-no-verify
is a bit puzzling. Either way, --append
on rsync
before version 3 is the same as --append-verify
on the newer versions.
--append-verify
isn't dangerous: It will always read and compare the data on both ends and not just assume they're equal. It does this using checksums, so it's easy on the network, but it does require reading the shared amount of data on both ends of the wire before it can actually resume the transfer by appending to the target.
Second of all, you said that you "heard that rsync is able to find differences between source and destination, and therefore to just copy the differences."
That's correct, and it's called delta transfer, but it's a different thing. To enable this, you add the -c
, or --checksum
switch. Once this switch is used, rsync will examine files that exist on both ends of the wire. It does this in chunks, compares the checksums on both ends, and if they differ, it transfers just the differing parts of the file. But, as @Jonathan points out below, the comparison is only done when files are of the same size on both ends — different sizes will cause rsync to upload the entire file, overwriting the target with the same name.
This requires a bit of computation on both ends initially, but can be extremely efficient at reducing network load if for example you're frequently backing up very large files fixed-size files that often contain minor changes. Examples that come to mind are virtual hard drive image files used in virtual machines or iSCSI targets.
It is notable that if you use --checksum
to transfer a batch of files that are completely new to the target system, rsync will still calculate their checksums on the source system before transferring them. Why I do not know :)
So, in short:
If you're often using rsync to just "move stuff from A to B" and want the option to cancel that operation and later resume it, don't use --checksum
, but do use --append-verify
.
If you're using rsync to back up stuff often, using --append-verify
probably won't do much for you, unless you're in the habit of sending large files that continuously grow in size but are rarely modified once written. As a bonus tip, if you're backing up to storage that supports snapshotting such as btrfs
or zfs
, adding the --inplace
switch will help you reduce snapshot sizes since changed files aren't recreated but rather the changed blocks are written directly over the old ones. This switch is also useful if you want to avoid rsync creating copies of files on the target when only minor changes have occurred.
When using --append-verify
, rsync will behave just like it always does on all files that are the same size. If they differ in modification or other timestamps, it will overwrite the target with the source without scrutinizing those files further. --checksum
will compare the contents (checksums) of every file pair of identical name and size.
UPDATED 2015-09-01 Changed to reflect points made by @Alex (thanks!)
UPDATED 2017-07-14 Changed to reflect points made by @Jonathan (thanks!)
First of all, regarding the "resume" part of your question, --partial
just tells the receiving end to keep partially transferred files if the sending end disappears as though they were completely transferred.
While transferring files, they are temporarily saved as hidden files in their target folders (e.g. .TheFileYouAreSending.lRWzDC
), or a specifically chosen folder if you set the --partial-dir
switch. When a transfer fails and --partial
is not set, this hidden file will remain in the target folder under this cryptic name, but if --partial
is set, the file will be renamed to the actual target file name (in this case, TheFileYouAreSending
), even though the file isn't complete. The point is that you can later complete the transfer by running rsync again with either --append
or --append-verify
.
So, --partial
doesn't itself resume a failed or cancelled transfer. To resume it, you'll have to use one of the aforementioned flags on the next run. So, if you need to make sure that the target won't ever contain files that appear to be fine but are actually incomplete, you shouldn't use --partial
. Conversely, if you want to make sure you never leave behind stray failed files that are hidden in the target directory, and you know you'll be able to complete the transfer later, --partial
is there to help you.
With regards to the --append
switch mentioned above, this is the actual "resume" switch, and you can use it whether or not you're also using --partial
. Actually, when you're using --append
, no temporary files are ever created. Files are written directly to their targets. In this respect, --append
gives the same result as --partial
on a failed transfer, but without creating those hidden temporary files.
So, to sum up, if you're moving large files and you want the option to resume a cancelled or failed rsync operation from the exact point that rsync
stopped, you need to use the --append
or --append-verify
switch on the next attempt.
As @Alex points out below, since version 3.0.0 rsync
now has a new option, --append-verify
, which behaves like --append
did before that switch existed. You probably always want the behaviour of --append-verify
, so check your version with rsync --version
. If you're on a Mac and not using rsync
from homebrew
, you'll (at least up to and including El Capitan) have an older version and need to use --append
rather than --append-verify
. Why they didn't keep the behaviour on --append
and instead named the newcomer --append-no-verify
is a bit puzzling. Either way, --append
on rsync
before version 3 is the same as --append-verify
on the newer versions.
--append-verify
isn't dangerous: It will always read and compare the data on both ends and not just assume they're equal. It does this using checksums, so it's easy on the network, but it does require reading the shared amount of data on both ends of the wire before it can actually resume the transfer by appending to the target.
Second of all, you said that you "heard that rsync is able to find differences between source and destination, and therefore to just copy the differences."
That's correct, and it's called delta transfer, but it's a different thing. To enable this, you add the -c
, or --checksum
switch. Once this switch is used, rsync will examine files that exist on both ends of the wire. It does this in chunks, compares the checksums on both ends, and if they differ, it transfers just the differing parts of the file. But, as @Jonathan points out below, the comparison is only done when files are of the same size on both ends — different sizes will cause rsync to upload the entire file, overwriting the target with the same name.
This requires a bit of computation on both ends initially, but can be extremely efficient at reducing network load if for example you're frequently backing up very large files fixed-size files that often contain minor changes. Examples that come to mind are virtual hard drive image files used in virtual machines or iSCSI targets.
It is notable that if you use --checksum
to transfer a batch of files that are completely new to the target system, rsync will still calculate their checksums on the source system before transferring them. Why I do not know :)
So, in short:
If you're often using rsync to just "move stuff from A to B" and want the option to cancel that operation and later resume it, don't use --checksum
, but do use --append-verify
.
If you're using rsync to back up stuff often, using --append-verify
probably won't do much for you, unless you're in the habit of sending large files that continuously grow in size but are rarely modified once written. As a bonus tip, if you're backing up to storage that supports snapshotting such as btrfs
or zfs
, adding the --inplace
switch will help you reduce snapshot sizes since changed files aren't recreated but rather the changed blocks are written directly over the old ones. This switch is also useful if you want to avoid rsync creating copies of files on the target when only minor changes have occurred.
When using --append-verify
, rsync will behave just like it always does on all files that are the same size. If they differ in modification or other timestamps, it will overwrite the target with the source without scrutinizing those files further. --checksum
will compare the contents (checksums) of every file pair of identical name and size.
UPDATED 2015-09-01 Changed to reflect points made by @Alex (thanks!)
UPDATED 2017-07-14 Changed to reflect points made by @Jonathan (thanks!)
edited Jul 14 '17 at 11:43
answered Nov 1 '14 at 12:32
DanielSmedegaardBuusDanielSmedegaardBuus
2,655188
2,655188
1
According to the documentation--append
does not check the data, but--append-verify
does. Also, as @gaoithe points out in a comment below, the documentation claims--partial
does resume from previous files.
– Alex
Aug 28 '15 at 3:49
2
This says--partial
is enough.
– Cees Timmerman
Sep 15 '15 at 17:21
2
opens tab 526 Using the --partial option tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster. Simpler doc.
– Cees Timmerman
Sep 16 '15 at 15:36
2
@CMCDragonkai Actually, check out Alexander's answer below about--partial-dir
— looks like it's the perfect bullet for this. I may have missed something entirely ;)
– DanielSmedegaardBuus
May 10 '16 at 19:31
3
What's your level of confidence in the described behavior of--checksum
? According to theman
it has more to do with deciding which files to flag for transfer than with delta-transfer (which, presumably, isrsync
's default behavior).
– Jonathan Y.
Jun 14 '17 at 5:48
|
show 14 more comments
1
According to the documentation--append
does not check the data, but--append-verify
does. Also, as @gaoithe points out in a comment below, the documentation claims--partial
does resume from previous files.
– Alex
Aug 28 '15 at 3:49
2
This says--partial
is enough.
– Cees Timmerman
Sep 15 '15 at 17:21
2
opens tab 526 Using the --partial option tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster. Simpler doc.
– Cees Timmerman
Sep 16 '15 at 15:36
2
@CMCDragonkai Actually, check out Alexander's answer below about--partial-dir
— looks like it's the perfect bullet for this. I may have missed something entirely ;)
– DanielSmedegaardBuus
May 10 '16 at 19:31
3
What's your level of confidence in the described behavior of--checksum
? According to theman
it has more to do with deciding which files to flag for transfer than with delta-transfer (which, presumably, isrsync
's default behavior).
– Jonathan Y.
Jun 14 '17 at 5:48
1
1
According to the documentation
--append
does not check the data, but --append-verify
does. Also, as @gaoithe points out in a comment below, the documentation claims --partial
does resume from previous files.– Alex
Aug 28 '15 at 3:49
According to the documentation
--append
does not check the data, but --append-verify
does. Also, as @gaoithe points out in a comment below, the documentation claims --partial
does resume from previous files.– Alex
Aug 28 '15 at 3:49
2
2
This says
--partial
is enough.– Cees Timmerman
Sep 15 '15 at 17:21
This says
--partial
is enough.– Cees Timmerman
Sep 15 '15 at 17:21
2
2
opens tab 526 Using the --partial option tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster. Simpler doc.
– Cees Timmerman
Sep 16 '15 at 15:36
opens tab 526 Using the --partial option tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster. Simpler doc.
– Cees Timmerman
Sep 16 '15 at 15:36
2
2
@CMCDragonkai Actually, check out Alexander's answer below about
--partial-dir
— looks like it's the perfect bullet for this. I may have missed something entirely ;)– DanielSmedegaardBuus
May 10 '16 at 19:31
@CMCDragonkai Actually, check out Alexander's answer below about
--partial-dir
— looks like it's the perfect bullet for this. I may have missed something entirely ;)– DanielSmedegaardBuus
May 10 '16 at 19:31
3
3
What's your level of confidence in the described behavior of
--checksum
? According to the man
it has more to do with deciding which files to flag for transfer than with delta-transfer (which, presumably, is rsync
's default behavior).– Jonathan Y.
Jun 14 '17 at 5:48
What's your level of confidence in the described behavior of
--checksum
? According to the man
it has more to do with deciding which files to flag for transfer than with delta-transfer (which, presumably, is rsync
's default behavior).– Jonathan Y.
Jun 14 '17 at 5:48
|
show 14 more comments
TL;DR:
Just specify a partial directory as the rsync man pages recommends:
--partial-dir=.rsync-partial
Longer explanation:
There is actually a built-in feature for doing this using the --partial-dir
option, which has several advantages over the --partial
and --append-verify
/--append
alternative.
Excerpt from the rsync man pages:
--partial-dir=DIR
A better way to keep partial files than the --partial option is
to specify a DIR that will be used to hold the partial data
(instead of writing it out to the destination file). On the
next transfer, rsync will use a file found in this dir as data
to speed up the resumption of the transfer and then delete it
after it has served its purpose.
Note that if --whole-file is specified (or implied), any par-
tial-dir file that is found for a file that is being updated
will simply be removed (since rsync is sending files without
using rsync's delta-transfer algorithm).
Rsync will create the DIR if it is missing (just the last dir --
not the whole path). This makes it easy to use a relative path
(such as "--partial-dir=.rsync-partial") to have rsync create
the partial-directory in the destination file's directory when
needed, and then remove it again when the partial file is
deleted.
If the partial-dir value is not an absolute path, rsync will add
an exclude rule at the end of all your existing excludes. This
will prevent the sending of any partial-dir files that may exist
on the sending side, and will also prevent the untimely deletion
of partial-dir items on the receiving side. An example: the
above --partial-dir option would add the equivalent of "-f '-p
.rsync-partial/'" at the end of any other filter rules.
By default, rsync uses a random temporary file name which gets deleted when a transfer fails. As mentioned, using --partial
you can make rsync keep the incomplete file as if it were successfully transferred, so that it is possible to later append to it using the --append-verify
/--append
options. However there are several reasons this is sub-optimal.
Your backup files may not be complete, and without checking the remote file which must still be unaltered, there's no way to know.
If you are attempting to use
--backup
and--backup-dir
, you've just added a new version of this file that never even exited before to your version history.
However if we use --partial-dir
, rsync will preserve the temporary partial file, and resume downloading using that partial file next time you run it, and we do not suffer from the above issues.
2
This is really the answer. Hey everyone, LOOK HERE!!
– trs
Apr 7 '17 at 0:00
2
I agree this is a much more concise answer to the question. the TL;DR: is perfect and for those that need more can read the longer bit. Strong work.
– JKOlaf
Jun 28 '17 at 0:11
add a comment |
TL;DR:
Just specify a partial directory as the rsync man pages recommends:
--partial-dir=.rsync-partial
Longer explanation:
There is actually a built-in feature for doing this using the --partial-dir
option, which has several advantages over the --partial
and --append-verify
/--append
alternative.
Excerpt from the rsync man pages:
--partial-dir=DIR
A better way to keep partial files than the --partial option is
to specify a DIR that will be used to hold the partial data
(instead of writing it out to the destination file). On the
next transfer, rsync will use a file found in this dir as data
to speed up the resumption of the transfer and then delete it
after it has served its purpose.
Note that if --whole-file is specified (or implied), any par-
tial-dir file that is found for a file that is being updated
will simply be removed (since rsync is sending files without
using rsync's delta-transfer algorithm).
Rsync will create the DIR if it is missing (just the last dir --
not the whole path). This makes it easy to use a relative path
(such as "--partial-dir=.rsync-partial") to have rsync create
the partial-directory in the destination file's directory when
needed, and then remove it again when the partial file is
deleted.
If the partial-dir value is not an absolute path, rsync will add
an exclude rule at the end of all your existing excludes. This
will prevent the sending of any partial-dir files that may exist
on the sending side, and will also prevent the untimely deletion
of partial-dir items on the receiving side. An example: the
above --partial-dir option would add the equivalent of "-f '-p
.rsync-partial/'" at the end of any other filter rules.
By default, rsync uses a random temporary file name which gets deleted when a transfer fails. As mentioned, using --partial
you can make rsync keep the incomplete file as if it were successfully transferred, so that it is possible to later append to it using the --append-verify
/--append
options. However there are several reasons this is sub-optimal.
Your backup files may not be complete, and without checking the remote file which must still be unaltered, there's no way to know.
If you are attempting to use
--backup
and--backup-dir
, you've just added a new version of this file that never even exited before to your version history.
However if we use --partial-dir
, rsync will preserve the temporary partial file, and resume downloading using that partial file next time you run it, and we do not suffer from the above issues.
2
This is really the answer. Hey everyone, LOOK HERE!!
– trs
Apr 7 '17 at 0:00
2
I agree this is a much more concise answer to the question. the TL;DR: is perfect and for those that need more can read the longer bit. Strong work.
– JKOlaf
Jun 28 '17 at 0:11
add a comment |
TL;DR:
Just specify a partial directory as the rsync man pages recommends:
--partial-dir=.rsync-partial
Longer explanation:
There is actually a built-in feature for doing this using the --partial-dir
option, which has several advantages over the --partial
and --append-verify
/--append
alternative.
Excerpt from the rsync man pages:
--partial-dir=DIR
A better way to keep partial files than the --partial option is
to specify a DIR that will be used to hold the partial data
(instead of writing it out to the destination file). On the
next transfer, rsync will use a file found in this dir as data
to speed up the resumption of the transfer and then delete it
after it has served its purpose.
Note that if --whole-file is specified (or implied), any par-
tial-dir file that is found for a file that is being updated
will simply be removed (since rsync is sending files without
using rsync's delta-transfer algorithm).
Rsync will create the DIR if it is missing (just the last dir --
not the whole path). This makes it easy to use a relative path
(such as "--partial-dir=.rsync-partial") to have rsync create
the partial-directory in the destination file's directory when
needed, and then remove it again when the partial file is
deleted.
If the partial-dir value is not an absolute path, rsync will add
an exclude rule at the end of all your existing excludes. This
will prevent the sending of any partial-dir files that may exist
on the sending side, and will also prevent the untimely deletion
of partial-dir items on the receiving side. An example: the
above --partial-dir option would add the equivalent of "-f '-p
.rsync-partial/'" at the end of any other filter rules.
By default, rsync uses a random temporary file name which gets deleted when a transfer fails. As mentioned, using --partial
you can make rsync keep the incomplete file as if it were successfully transferred, so that it is possible to later append to it using the --append-verify
/--append
options. However there are several reasons this is sub-optimal.
Your backup files may not be complete, and without checking the remote file which must still be unaltered, there's no way to know.
If you are attempting to use
--backup
and--backup-dir
, you've just added a new version of this file that never even exited before to your version history.
However if we use --partial-dir
, rsync will preserve the temporary partial file, and resume downloading using that partial file next time you run it, and we do not suffer from the above issues.
TL;DR:
Just specify a partial directory as the rsync man pages recommends:
--partial-dir=.rsync-partial
Longer explanation:
There is actually a built-in feature for doing this using the --partial-dir
option, which has several advantages over the --partial
and --append-verify
/--append
alternative.
Excerpt from the rsync man pages:
--partial-dir=DIR
A better way to keep partial files than the --partial option is
to specify a DIR that will be used to hold the partial data
(instead of writing it out to the destination file). On the
next transfer, rsync will use a file found in this dir as data
to speed up the resumption of the transfer and then delete it
after it has served its purpose.
Note that if --whole-file is specified (or implied), any par-
tial-dir file that is found for a file that is being updated
will simply be removed (since rsync is sending files without
using rsync's delta-transfer algorithm).
Rsync will create the DIR if it is missing (just the last dir --
not the whole path). This makes it easy to use a relative path
(such as "--partial-dir=.rsync-partial") to have rsync create
the partial-directory in the destination file's directory when
needed, and then remove it again when the partial file is
deleted.
If the partial-dir value is not an absolute path, rsync will add
an exclude rule at the end of all your existing excludes. This
will prevent the sending of any partial-dir files that may exist
on the sending side, and will also prevent the untimely deletion
of partial-dir items on the receiving side. An example: the
above --partial-dir option would add the equivalent of "-f '-p
.rsync-partial/'" at the end of any other filter rules.
By default, rsync uses a random temporary file name which gets deleted when a transfer fails. As mentioned, using --partial
you can make rsync keep the incomplete file as if it were successfully transferred, so that it is possible to later append to it using the --append-verify
/--append
options. However there are several reasons this is sub-optimal.
Your backup files may not be complete, and without checking the remote file which must still be unaltered, there's no way to know.
If you are attempting to use
--backup
and--backup-dir
, you've just added a new version of this file that never even exited before to your version history.
However if we use --partial-dir
, rsync will preserve the temporary partial file, and resume downloading using that partial file next time you run it, and we do not suffer from the above issues.
edited Jan 3 '16 at 18:30
answered Jan 3 '16 at 6:34
Alexander O'MaraAlexander O'Mara
588410
588410
2
This is really the answer. Hey everyone, LOOK HERE!!
– trs
Apr 7 '17 at 0:00
2
I agree this is a much more concise answer to the question. the TL;DR: is perfect and for those that need more can read the longer bit. Strong work.
– JKOlaf
Jun 28 '17 at 0:11
add a comment |
2
This is really the answer. Hey everyone, LOOK HERE!!
– trs
Apr 7 '17 at 0:00
2
I agree this is a much more concise answer to the question. the TL;DR: is perfect and for those that need more can read the longer bit. Strong work.
– JKOlaf
Jun 28 '17 at 0:11
2
2
This is really the answer. Hey everyone, LOOK HERE!!
– trs
Apr 7 '17 at 0:00
This is really the answer. Hey everyone, LOOK HERE!!
– trs
Apr 7 '17 at 0:00
2
2
I agree this is a much more concise answer to the question. the TL;DR: is perfect and for those that need more can read the longer bit. Strong work.
– JKOlaf
Jun 28 '17 at 0:11
I agree this is a much more concise answer to the question. the TL;DR: is perfect and for those that need more can read the longer bit. Strong work.
– JKOlaf
Jun 28 '17 at 0:11
add a comment |
You may want to add the -P
option to your command.
From the man
page:
--partial By default, rsync will delete any partially transferred file if the transfer
is interrupted. In some circumstances it is more desirable to keep partially
transferred files. Using the --partial option tells rsync to keep the partial
file which should make a subsequent transfer of the rest of the file much faster.
-P The -P option is equivalent to --partial --progress. Its pur-
pose is to make it much easier to specify these two options for
a long transfer that may be interrupted.
So instead of:
sudo rsync -azvv /home/path/folder1/ /home/path/folder2
Do:
sudo rsync -azvvP /home/path/folder1/ /home/path/folder2
Of course, if you don't want the progress updates, you can just use --partial
, i.e.:
sudo rsync --partial -azvv /home/path/folder1/ /home/path/folder2
@Flimm not quite correct. If there is an interruption (network or receiving side) then when using --partial the partial file is kept AND it is used when rsync is resumed. From the manpage: "Using the --partial option tells rsync to keep the partial file which should <b>make a subsequent transfer of the rest of the file much faster</b>."
– gaoithe
Aug 19 '15 at 11:29
2
@Flimm and @gaoithe, my answer wasn't quite accurate, and definitely not up-to-date. I've updated it to reflect version 3 + ofrsync
. It's important to stress, though, that--partial
does not itself resume a failed transfer. See my answer for details :)
– DanielSmedegaardBuus
Sep 1 '15 at 14:11
2
@DanielSmedegaardBuus I tried it and the-P
is enough in my case. Versions: client has 3.1.0 and server has 3.1.1. I interrupted the transfer of a single large file with ctrl-c. I guess I am missing something.
– guettli
Nov 18 '15 at 12:28
add a comment |
You may want to add the -P
option to your command.
From the man
page:
--partial By default, rsync will delete any partially transferred file if the transfer
is interrupted. In some circumstances it is more desirable to keep partially
transferred files. Using the --partial option tells rsync to keep the partial
file which should make a subsequent transfer of the rest of the file much faster.
-P The -P option is equivalent to --partial --progress. Its pur-
pose is to make it much easier to specify these two options for
a long transfer that may be interrupted.
So instead of:
sudo rsync -azvv /home/path/folder1/ /home/path/folder2
Do:
sudo rsync -azvvP /home/path/folder1/ /home/path/folder2
Of course, if you don't want the progress updates, you can just use --partial
, i.e.:
sudo rsync --partial -azvv /home/path/folder1/ /home/path/folder2
@Flimm not quite correct. If there is an interruption (network or receiving side) then when using --partial the partial file is kept AND it is used when rsync is resumed. From the manpage: "Using the --partial option tells rsync to keep the partial file which should <b>make a subsequent transfer of the rest of the file much faster</b>."
– gaoithe
Aug 19 '15 at 11:29
2
@Flimm and @gaoithe, my answer wasn't quite accurate, and definitely not up-to-date. I've updated it to reflect version 3 + ofrsync
. It's important to stress, though, that--partial
does not itself resume a failed transfer. See my answer for details :)
– DanielSmedegaardBuus
Sep 1 '15 at 14:11
2
@DanielSmedegaardBuus I tried it and the-P
is enough in my case. Versions: client has 3.1.0 and server has 3.1.1. I interrupted the transfer of a single large file with ctrl-c. I guess I am missing something.
– guettli
Nov 18 '15 at 12:28
add a comment |
You may want to add the -P
option to your command.
From the man
page:
--partial By default, rsync will delete any partially transferred file if the transfer
is interrupted. In some circumstances it is more desirable to keep partially
transferred files. Using the --partial option tells rsync to keep the partial
file which should make a subsequent transfer of the rest of the file much faster.
-P The -P option is equivalent to --partial --progress. Its pur-
pose is to make it much easier to specify these two options for
a long transfer that may be interrupted.
So instead of:
sudo rsync -azvv /home/path/folder1/ /home/path/folder2
Do:
sudo rsync -azvvP /home/path/folder1/ /home/path/folder2
Of course, if you don't want the progress updates, you can just use --partial
, i.e.:
sudo rsync --partial -azvv /home/path/folder1/ /home/path/folder2
You may want to add the -P
option to your command.
From the man
page:
--partial By default, rsync will delete any partially transferred file if the transfer
is interrupted. In some circumstances it is more desirable to keep partially
transferred files. Using the --partial option tells rsync to keep the partial
file which should make a subsequent transfer of the rest of the file much faster.
-P The -P option is equivalent to --partial --progress. Its pur-
pose is to make it much easier to specify these two options for
a long transfer that may be interrupted.
So instead of:
sudo rsync -azvv /home/path/folder1/ /home/path/folder2
Do:
sudo rsync -azvvP /home/path/folder1/ /home/path/folder2
Of course, if you don't want the progress updates, you can just use --partial
, i.e.:
sudo rsync --partial -azvv /home/path/folder1/ /home/path/folder2
edited Aug 19 '15 at 11:48
gaoithe
1195
1195
answered Jul 29 '14 at 18:24
N2ON2O
46143
46143
@Flimm not quite correct. If there is an interruption (network or receiving side) then when using --partial the partial file is kept AND it is used when rsync is resumed. From the manpage: "Using the --partial option tells rsync to keep the partial file which should <b>make a subsequent transfer of the rest of the file much faster</b>."
– gaoithe
Aug 19 '15 at 11:29
2
@Flimm and @gaoithe, my answer wasn't quite accurate, and definitely not up-to-date. I've updated it to reflect version 3 + ofrsync
. It's important to stress, though, that--partial
does not itself resume a failed transfer. See my answer for details :)
– DanielSmedegaardBuus
Sep 1 '15 at 14:11
2
@DanielSmedegaardBuus I tried it and the-P
is enough in my case. Versions: client has 3.1.0 and server has 3.1.1. I interrupted the transfer of a single large file with ctrl-c. I guess I am missing something.
– guettli
Nov 18 '15 at 12:28
add a comment |
@Flimm not quite correct. If there is an interruption (network or receiving side) then when using --partial the partial file is kept AND it is used when rsync is resumed. From the manpage: "Using the --partial option tells rsync to keep the partial file which should <b>make a subsequent transfer of the rest of the file much faster</b>."
– gaoithe
Aug 19 '15 at 11:29
2
@Flimm and @gaoithe, my answer wasn't quite accurate, and definitely not up-to-date. I've updated it to reflect version 3 + ofrsync
. It's important to stress, though, that--partial
does not itself resume a failed transfer. See my answer for details :)
– DanielSmedegaardBuus
Sep 1 '15 at 14:11
2
@DanielSmedegaardBuus I tried it and the-P
is enough in my case. Versions: client has 3.1.0 and server has 3.1.1. I interrupted the transfer of a single large file with ctrl-c. I guess I am missing something.
– guettli
Nov 18 '15 at 12:28
@Flimm not quite correct. If there is an interruption (network or receiving side) then when using --partial the partial file is kept AND it is used when rsync is resumed. From the manpage: "Using the --partial option tells rsync to keep the partial file which should <b>make a subsequent transfer of the rest of the file much faster</b>."
– gaoithe
Aug 19 '15 at 11:29
@Flimm not quite correct. If there is an interruption (network or receiving side) then when using --partial the partial file is kept AND it is used when rsync is resumed. From the manpage: "Using the --partial option tells rsync to keep the partial file which should <b>make a subsequent transfer of the rest of the file much faster</b>."
– gaoithe
Aug 19 '15 at 11:29
2
2
@Flimm and @gaoithe, my answer wasn't quite accurate, and definitely not up-to-date. I've updated it to reflect version 3 + of
rsync
. It's important to stress, though, that --partial
does not itself resume a failed transfer. See my answer for details :)– DanielSmedegaardBuus
Sep 1 '15 at 14:11
@Flimm and @gaoithe, my answer wasn't quite accurate, and definitely not up-to-date. I've updated it to reflect version 3 + of
rsync
. It's important to stress, though, that --partial
does not itself resume a failed transfer. See my answer for details :)– DanielSmedegaardBuus
Sep 1 '15 at 14:11
2
2
@DanielSmedegaardBuus I tried it and the
-P
is enough in my case. Versions: client has 3.1.0 and server has 3.1.1. I interrupted the transfer of a single large file with ctrl-c. I guess I am missing something.– guettli
Nov 18 '15 at 12:28
@DanielSmedegaardBuus I tried it and the
-P
is enough in my case. Versions: client has 3.1.0 and server has 3.1.1. I interrupted the transfer of a single large file with ctrl-c. I guess I am missing something.– guettli
Nov 18 '15 at 12:28
add a comment |
I think you are forcibly calling the rsync
and hence all data is getting downloaded when you recall it again. use --progress
option to copy only those files which are not copied and --delete
option to delete any files if already copied and now it does not exist in source folder...
rsync -avz --progress --delete -e /home/path/folder1/ /home/path/folder2
If you are using ssh to login to other system and copy the files,
rsync -avz --progress --delete -e "ssh -o UserKnownHostsFile=/dev/null -o
StrictHostKeyChecking=no" /home/path/folder1/ /home/path/folder2
let me know if there is any mistake in my understanding of this concept...
1
Can you please edit your answer and explain what your special ssh call does, and why you advice to do it?
– Fabien
Jun 14 '13 at 12:12
2
@Fabien He tells rsync to set two ssh options (rsync uses ssh to connect). The second one tells ssh to not prompt for confirmation if the host he's connecting to isn't already known (by existing in the "known hosts" file). The first one tells ssh to not use the default known hosts file (which would be ~/.ssh/known_hosts). He uses /dev/null instead, which is of course always empty, and as ssh would then not find the host in there, it would normally prompt for confirmation, hence option two. Upon connecting, ssh writes the now known host to /dev/null, effectively forgetting it instantly :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:12
1
...but you were probably wondering what effect, if any, it has on the rsync operation itself. The answer is none. It only serves to not have the host you're connecting to added to your SSH known hosts file. Perhaps he's a sysadmin often connecting to a great number of new servers, temporary systems or whatnot. I don't know :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:23
4
"use --progress option to copy only those files which are not copied" What?
– moi
May 10 '16 at 13:49
1
There are a couple errors here; one is very serious:--delete
will delete files in the destination that don't exist in the source. The less serious one is that--progress
doesn't modify how things are copied; it just gives you a progress report on each file as it copies. (I fixed the serious error; replaced it with--remove-source-files
.)
– Paul d'Aoust
Nov 17 '16 at 22:39
add a comment |
I think you are forcibly calling the rsync
and hence all data is getting downloaded when you recall it again. use --progress
option to copy only those files which are not copied and --delete
option to delete any files if already copied and now it does not exist in source folder...
rsync -avz --progress --delete -e /home/path/folder1/ /home/path/folder2
If you are using ssh to login to other system and copy the files,
rsync -avz --progress --delete -e "ssh -o UserKnownHostsFile=/dev/null -o
StrictHostKeyChecking=no" /home/path/folder1/ /home/path/folder2
let me know if there is any mistake in my understanding of this concept...
1
Can you please edit your answer and explain what your special ssh call does, and why you advice to do it?
– Fabien
Jun 14 '13 at 12:12
2
@Fabien He tells rsync to set two ssh options (rsync uses ssh to connect). The second one tells ssh to not prompt for confirmation if the host he's connecting to isn't already known (by existing in the "known hosts" file). The first one tells ssh to not use the default known hosts file (which would be ~/.ssh/known_hosts). He uses /dev/null instead, which is of course always empty, and as ssh would then not find the host in there, it would normally prompt for confirmation, hence option two. Upon connecting, ssh writes the now known host to /dev/null, effectively forgetting it instantly :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:12
1
...but you were probably wondering what effect, if any, it has on the rsync operation itself. The answer is none. It only serves to not have the host you're connecting to added to your SSH known hosts file. Perhaps he's a sysadmin often connecting to a great number of new servers, temporary systems or whatnot. I don't know :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:23
4
"use --progress option to copy only those files which are not copied" What?
– moi
May 10 '16 at 13:49
1
There are a couple errors here; one is very serious:--delete
will delete files in the destination that don't exist in the source. The less serious one is that--progress
doesn't modify how things are copied; it just gives you a progress report on each file as it copies. (I fixed the serious error; replaced it with--remove-source-files
.)
– Paul d'Aoust
Nov 17 '16 at 22:39
add a comment |
I think you are forcibly calling the rsync
and hence all data is getting downloaded when you recall it again. use --progress
option to copy only those files which are not copied and --delete
option to delete any files if already copied and now it does not exist in source folder...
rsync -avz --progress --delete -e /home/path/folder1/ /home/path/folder2
If you are using ssh to login to other system and copy the files,
rsync -avz --progress --delete -e "ssh -o UserKnownHostsFile=/dev/null -o
StrictHostKeyChecking=no" /home/path/folder1/ /home/path/folder2
let me know if there is any mistake in my understanding of this concept...
I think you are forcibly calling the rsync
and hence all data is getting downloaded when you recall it again. use --progress
option to copy only those files which are not copied and --delete
option to delete any files if already copied and now it does not exist in source folder...
rsync -avz --progress --delete -e /home/path/folder1/ /home/path/folder2
If you are using ssh to login to other system and copy the files,
rsync -avz --progress --delete -e "ssh -o UserKnownHostsFile=/dev/null -o
StrictHostKeyChecking=no" /home/path/folder1/ /home/path/folder2
let me know if there is any mistake in my understanding of this concept...
edited Nov 18 '16 at 3:01
DarkHeart
3,52632441
3,52632441
answered Sep 16 '12 at 16:07
Yadunandana Yadunandana
323
323
1
Can you please edit your answer and explain what your special ssh call does, and why you advice to do it?
– Fabien
Jun 14 '13 at 12:12
2
@Fabien He tells rsync to set two ssh options (rsync uses ssh to connect). The second one tells ssh to not prompt for confirmation if the host he's connecting to isn't already known (by existing in the "known hosts" file). The first one tells ssh to not use the default known hosts file (which would be ~/.ssh/known_hosts). He uses /dev/null instead, which is of course always empty, and as ssh would then not find the host in there, it would normally prompt for confirmation, hence option two. Upon connecting, ssh writes the now known host to /dev/null, effectively forgetting it instantly :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:12
1
...but you were probably wondering what effect, if any, it has on the rsync operation itself. The answer is none. It only serves to not have the host you're connecting to added to your SSH known hosts file. Perhaps he's a sysadmin often connecting to a great number of new servers, temporary systems or whatnot. I don't know :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:23
4
"use --progress option to copy only those files which are not copied" What?
– moi
May 10 '16 at 13:49
1
There are a couple errors here; one is very serious:--delete
will delete files in the destination that don't exist in the source. The less serious one is that--progress
doesn't modify how things are copied; it just gives you a progress report on each file as it copies. (I fixed the serious error; replaced it with--remove-source-files
.)
– Paul d'Aoust
Nov 17 '16 at 22:39
add a comment |
1
Can you please edit your answer and explain what your special ssh call does, and why you advice to do it?
– Fabien
Jun 14 '13 at 12:12
2
@Fabien He tells rsync to set two ssh options (rsync uses ssh to connect). The second one tells ssh to not prompt for confirmation if the host he's connecting to isn't already known (by existing in the "known hosts" file). The first one tells ssh to not use the default known hosts file (which would be ~/.ssh/known_hosts). He uses /dev/null instead, which is of course always empty, and as ssh would then not find the host in there, it would normally prompt for confirmation, hence option two. Upon connecting, ssh writes the now known host to /dev/null, effectively forgetting it instantly :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:12
1
...but you were probably wondering what effect, if any, it has on the rsync operation itself. The answer is none. It only serves to not have the host you're connecting to added to your SSH known hosts file. Perhaps he's a sysadmin often connecting to a great number of new servers, temporary systems or whatnot. I don't know :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:23
4
"use --progress option to copy only those files which are not copied" What?
– moi
May 10 '16 at 13:49
1
There are a couple errors here; one is very serious:--delete
will delete files in the destination that don't exist in the source. The less serious one is that--progress
doesn't modify how things are copied; it just gives you a progress report on each file as it copies. (I fixed the serious error; replaced it with--remove-source-files
.)
– Paul d'Aoust
Nov 17 '16 at 22:39
1
1
Can you please edit your answer and explain what your special ssh call does, and why you advice to do it?
– Fabien
Jun 14 '13 at 12:12
Can you please edit your answer and explain what your special ssh call does, and why you advice to do it?
– Fabien
Jun 14 '13 at 12:12
2
2
@Fabien He tells rsync to set two ssh options (rsync uses ssh to connect). The second one tells ssh to not prompt for confirmation if the host he's connecting to isn't already known (by existing in the "known hosts" file). The first one tells ssh to not use the default known hosts file (which would be ~/.ssh/known_hosts). He uses /dev/null instead, which is of course always empty, and as ssh would then not find the host in there, it would normally prompt for confirmation, hence option two. Upon connecting, ssh writes the now known host to /dev/null, effectively forgetting it instantly :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:12
@Fabien He tells rsync to set two ssh options (rsync uses ssh to connect). The second one tells ssh to not prompt for confirmation if the host he's connecting to isn't already known (by existing in the "known hosts" file). The first one tells ssh to not use the default known hosts file (which would be ~/.ssh/known_hosts). He uses /dev/null instead, which is of course always empty, and as ssh would then not find the host in there, it would normally prompt for confirmation, hence option two. Upon connecting, ssh writes the now known host to /dev/null, effectively forgetting it instantly :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:12
1
1
...but you were probably wondering what effect, if any, it has on the rsync operation itself. The answer is none. It only serves to not have the host you're connecting to added to your SSH known hosts file. Perhaps he's a sysadmin often connecting to a great number of new servers, temporary systems or whatnot. I don't know :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:23
...but you were probably wondering what effect, if any, it has on the rsync operation itself. The answer is none. It only serves to not have the host you're connecting to added to your SSH known hosts file. Perhaps he's a sysadmin often connecting to a great number of new servers, temporary systems or whatnot. I don't know :)
– DanielSmedegaardBuus
Dec 7 '14 at 0:23
4
4
"use --progress option to copy only those files which are not copied" What?
– moi
May 10 '16 at 13:49
"use --progress option to copy only those files which are not copied" What?
– moi
May 10 '16 at 13:49
1
1
There are a couple errors here; one is very serious:
--delete
will delete files in the destination that don't exist in the source. The less serious one is that --progress
doesn't modify how things are copied; it just gives you a progress report on each file as it copies. (I fixed the serious error; replaced it with --remove-source-files
.)– Paul d'Aoust
Nov 17 '16 at 22:39
There are a couple errors here; one is very serious:
--delete
will delete files in the destination that don't exist in the source. The less serious one is that --progress
doesn't modify how things are copied; it just gives you a progress report on each file as it copies. (I fixed the serious error; replaced it with --remove-source-files
.)– Paul d'Aoust
Nov 17 '16 at 22:39
add a comment |
I am using this simple script. Feel free to adjust certain flags and/or paramterize it.
#!/bin/bash
while [ 1 ]
do
rsync -avz --partial [source] [dest]:
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "Rsync failure. Backing off and retrying..."
sleep 180
fi
done
add a comment |
I am using this simple script. Feel free to adjust certain flags and/or paramterize it.
#!/bin/bash
while [ 1 ]
do
rsync -avz --partial [source] [dest]:
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "Rsync failure. Backing off and retrying..."
sleep 180
fi
done
add a comment |
I am using this simple script. Feel free to adjust certain flags and/or paramterize it.
#!/bin/bash
while [ 1 ]
do
rsync -avz --partial [source] [dest]:
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "Rsync failure. Backing off and retrying..."
sleep 180
fi
done
I am using this simple script. Feel free to adjust certain flags and/or paramterize it.
#!/bin/bash
while [ 1 ]
do
rsync -avz --partial [source] [dest]:
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "Rsync failure. Backing off and retrying..."
sleep 180
fi
done
answered Mar 3 at 20:57
NeverEndingQueueNeverEndingQueue
1163
1163
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f48298%2fcan-rsync-resume-after-being-interrupted%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Yes, rsync won't copy again files that it's already copied. There are a few edge cases where its detection can fail. Did it copy all the already-copied files? What options did you use? What were the source and target filesystems? If you run rsync again after it's copied everything, does it copy again?
– Gilles
Sep 16 '12 at 1:56
@Gilles: Thanks! (1) I think I saw rsync copied the same files again from its output on the terminal. (2) Options are same as in my other post, i.e.
sudo rsync -azvv /home/path/folder1/ /home/path/folder2
. (3) Source and target are both NTFS, buy source is an external HDD, and target is an internal HDD. (3) It is now running and hasn't finished yet.– Tim
Sep 16 '12 at 2:30
There is also the --partial flag to resume partially transferred files (useful for large files)
– jwbensley
Sep 16 '12 at 16:15
3
@Tim Off the top of my head, there's at least clock skew, and differences in time resolution (a common issue with FAT filesystems which store times in 2-second increments, the
--modify-window
option helps with that).– Gilles
Sep 19 '12 at 9:25
1
if you did not have / or /. at the tail end of the file source path argument then it will be making an extra copy in a subdirectory that has the same name as the source directory
– Skaperen
Aug 19 '15 at 13:50