diff -uNr rsnapshot-1.4.3/rsnapshot-program.pl rsnapshot-1.4.3.mod/rsnapshot-program.pl --- rsnapshot-1.4.3/rsnapshot-program.pl 2019-11-17 03:57:50.000000000 +0200 +++ rsnapshot-1.4.3.mod/rsnapshot-program.pl 2020-01-04 15:09:32.625965909 +0200 @@ -2618,7 +2618,7 @@ # same as $interval_max, except for the previous interval. # this is used to determine which of the previous snapshots to pull from - # e.g., cp -al alpha.$prev_interval_max/ beta.0/ + # e.g., cp -a alpha.$prev_interval_max/ beta.0/ my $prev_interval_max; # FIGURE OUT WHICH INTERVAL WE'RE RUNNING, AND HOW IT RELATES TO THE OTHERS @@ -3347,7 +3347,7 @@ # operates on directories in the given interval (it should be the lowest one) # deletes the highest numbered directory in the interval, and rotates the ones below it # if link_dest is enabled, .0 gets moved to .1 -# otherwise, we do cp -al .0 .1 +# otherwise, we do cp -a .0 .1 # # if we encounter an error, this script will terminate the program with an error condition # @@ -3492,7 +3492,7 @@ # otherwise, we hard link (except for directories, symlinks, and special files) sync to .0 else { - # cp -al .sync .0 + # cp -a .sync .0 if (-d "$config_vars{'snapshot_root'}/.sync/") { display_cp_al("$config_vars{'snapshot_root'}/.sync/", "$config_vars{'snapshot_root'}/$interval.0/"); @@ -4773,7 +4773,7 @@ } # accepts src, dest -# prints out the cp -al command that would be run, based on config file data +# prints out the cp -a command that would be run, based on config file data sub display_cp_al { my $src = shift(@_); my $dest = shift(@_); @@ -4786,10 +4786,10 @@ if (!defined($dest)) { bail('dest not defined in display_cp_al()'); } if (defined($config_vars{'cmd_cp'})) { - print_cmd("$config_vars{'cmd_cp'} -al $src $dest"); + print_cmd("$config_vars{'cmd_cp'} -a $src $dest"); } else { - print_cmd("native_cp_al(\"$src\", \"$dest\")"); + print_cmd("cp -a $src $dest"); } } @@ -4802,31 +4802,14 @@ my $dest = shift(@_); my $result = 0; - # use gnu cp if we have it - if (defined($config_vars{'cmd_cp'})) { - $result = gnu_cp_al("$src", "$dest"); - - } - - # fall back to the built-in native perl replacement, followed by an rsync clean-up step - else { - - # native cp -al - $result = native_cp_al("$src", "$dest"); - if (1 != $result) { - return ($result); - } - - # rsync clean-up - $result = rsync_cleanup_after_native_cp_al("$src", "$dest"); - } + $result = gnu_cp_al("$src", "$dest"); return ($result); } -# This is to test whether cp -al seems to work in a simple case -# return 0 if cp -al succeeds -# return 1 if cp -al fails +# This is to test whether cp -a seems to work in a simple case +# return 0 if cp -a succeeds +# return 1 if cp -a fails # return -1 if something else failed - test inconclusive sub test_cp_al { my $s = "$config_vars{'snapshot_root'}/cp_al1"; @@ -4836,7 +4819,7 @@ -d $s || mkdir($s) || return (-1); open(TT1, ">>$s/tt1") || return (-1); close(TT1) || return (-1); - $result = system($config_vars{'cmd_cp'}, '-al', "$s", "$d"); + $result = system($config_vars{'cmd_cp'}, '-a', "$s", "$d"); if ($result != 0) { return (1); } @@ -4870,12 +4853,17 @@ } # make the system call to GNU cp - $result = system($config_vars{'cmd_cp'}, '-al', "$src", "$dest"); + if (defined($config_vars{'cmd_cp'})) { + $result = system($config_vars{'cmd_cp'}, '-a', "$src", "$dest"); + } else { + $result = system('cp', '-a', "$src", "$dest"); + } + if ($result != 0) { $status = $result >> 8; - print_err("$config_vars{'cmd_cp'} -al $src $dest failed (result $result, exit status $status).", 2); + print_err("$config_vars{'cmd_cp'} -a $src $dest failed (result $result, exit status $status).", 2); if (test_cp_al() > 0) { - print_err("Perhaps your cp does not support -al options?", 2); + print_err("Perhaps your cp does not support -a option?", 2); } return (0); } @@ -4883,7 +4871,7 @@ return (1); } -# This is a purpose built, native perl replacement for GNU "cp -al". +# This is a purpose built, native perl replacement for GNU "cp -a". # However, it is not quite as good. it does not copy "special" files: # block, char, fifo, or sockets. # Never the less, it does do regular files, directories, and symlinks @@ -6645,9 +6633,7 @@ B saves much more disk space than you might imagine. The amount of space required is roughly the size of one full backup, plus a copy -of each additional file that is changed. B makes extensive -use of hard links, so if the file doesn't change, the next snapshot is -simply a hard link to the exact same file. +of each additional file that is changed. B will typically be invoked as root by a cron job, or series of cron jobs. It is possible, however, to run as any arbitrary user @@ -6806,8 +6792,7 @@ /alpha.{1,2,3,4} will all be rotated +1, if they exist. -/alpha.0/ will be copied to /alpha.1/ -using hard links. +/alpha.0/ will be copied to /alpha.1/. Each backup point (explained below) will then be rsynced to the corresponding directories in /alpha.0/ @@ -7204,9 +7189,7 @@ rsnapshot will take the generated "mydatabase.sql" file and move it into the /.0/db_backup/ directory. On subsequent runs, rsnapshot checks the differences between the files created against the -previous files. If the backup script generates the same output on the next -run, the files will be hard linked against the previous ones, and no -additional disk space will be taken up. +previous files. =back @@ -7389,7 +7372,7 @@ =back This will call the rsnapshot-diff program, which will scan both directories -looking for differences (based on hard links). +looking for differences. B