使用 --backup 进行 rsync

使用 --backup 进行 rsync

我正在尝试 rsync 单个文件目录并将带时间戳的修订存储在目标位置。这是我目前正在使用的方法:

rsync --verbose --progress --stats --compress --no-whole-file --inplace --recursive \
  --times --perms --owner --group --links --delete --backup --suffix=.`date +%y%m%d_%H%M` \
  user@remote:/backups/mysql/ /data/backups/mysql/remote/

文件user@remote:/backups/mysql/如下:

db1.gz
db2.gz

第一次运行 rsync 时,我按预期复制了两个文件/data/backups/mysql/remote/。在文件发生更改后第二次运行时,旧文件被加了时间戳,新文件被传输到目标:

db1.gz.150522_1328
db2.gz.150522_1328
db1.gz
db2.gz

这一切似乎都是我想要的,除了当我第三次运行它(使用更改的文件)时,输出在同步之前显示“删除”消息:

deleting db1.gz.150522_1328
deleting db2.gz.150522_1328

我在目的地留下了这个:

db1.gz.150522_1328.150522_1515
db2.gz.150522_1328.150522_1515
db1.gz.150522_1515
db2.gz.150522_1515
db1.gz
db2.gz

它怎么会在现有的备份文件中添加后缀?我需要弄清楚的另一件事是,当我使用 rsync 时,即使文件有 99% 相同,并且我在 gzip 压缩它们时使用了 --rsyncable,也没有加速。(是在增量传输之前重命名备份文件吗?)

答案1

正如您在问题评论中写的那样,之前的备份会再次备份,因为后缀已更改,并且 rsync 假定这些文件在源上不再存在。您可以通过在后缀中添加静态部分并将其用作过滤器来避免这种情况,例如:--suffix=$(date +.backup~%y%m%d_%H%M) --filter="P *.backup~*"

或者,您可以使用--backup-dir=DIR将备份放在单独的目录中。但是,如果该目录的名称也是动态的(例如--backup-dir=$(date +%F)),则--inplace会使您的命令效率降低。

我认为动态备份后缀也是您没有注意到加速的原因:rsync 找不到与您的文件对应的备份。但是,删除“--inplace”参数应该会有所帮助(如果您不需要它的优势,那么“硬链接未损坏“)。

相关内容