我正在尝试设置rsync以将增量备份发送到远程服务器。第一个备份将转到“备份”文件夹,然后下一个备份将只发送对"backup.1“文件夹的更改,依此类推。
我通过以下命令在本地成功地做到了这一点,该命令似乎正如前所述,在第二次同步中创建了一个backup.1文件夹:
rsync -zaP folder_to_backup /backup 然后,我设置了一个ssh密钥对,并设法使rsync远程工作,因此我现在使用:
rsync -zaP folder_to_backup myuser@myserver:/home/myuser/backup同步工作,文件出现在删除服务器上。但是,一旦我第二次运行它,新的文件只需添加到现有的“备份”文件夹,而不是创建一个备份1文件夹。我还使用-b参数尝试了其他命令,例如:
rsync -zaPb folder_to_backup myuser@myserver:/home/myuser/backup
rsync -aPb --backup-dir=`date +%s` folder_to_backup myuser@myserver:/home/myuser/backup但在任何情况下都是一样的。在最后一种情况下,同步仍然转到“备份”文件夹,备份-dir参数似乎完全被忽略。
我做错了什么?
编辑:阅读评论,当我说“它似乎像描述的那样工作,在第二次同步上创建一个backup.1文件夹”时,我可能会有些困惑。我就是这么记得的,但很明显这不是rsync的特性?相反,我现在安装了r快照,这对于增量备份非常有用。
发布于 2021-12-24 09:37:48
我编写了这个剧本,它使用--link-dest只传输新文件,同时硬链接所有未修改的文件。这样,只有传输是增量的,而每个备份本身每次都是一个完整的备份。示例:
src_path="/home/user“
dst_path="user@server:/home/Backups"
rsync_options=(
--archive # same as --recursive --links --perms --times --group --owner --devices --specials
--human-readable # output numbers in a human-readable format
--itemize-changes # output a change-summary for all updates
--exclude="[Tt][Ee][Mm][Pp]/" # exclude dirs with the name "temp" or "Temp" or "TEMP"
--exclude="[Tt][Mm][Pp]/" # exclude dirs with the name "tmp" or "Tmp" or "TMP"
--exclude="Cache/" # exclude dirs with the name "Cache"
)
empty_dir="/tmp/empty_dir"
new_backup="$(date +%Y%m%d_%H%M%S)"
last_backup=$(rsync --dry-run --recursive --itemize-changes --exclude="*/*/" --include="[0-9]*/" --exclude="*" "$dst_path/" "$empty_dir" | grep -oP "[0-9_/]*" | sort -r | head -n1)
last_backup="${last_backup/$(echo "$dst_path" | grep -oP "^.*:")/}" # remove ssh login
rsync "${rsync_options[@]}" --stats --delete --link-dest="$last_backup" "$src_path/" "$dst_path/$new_backup"当然,这只在目标文件系统支持硬链接的情况下才能工作,但大多数文件系统都支持硬链接。
我希望rsync将来将支持--reflink,以减少大型文件中的小改动的存储使用量。
https://serverfault.com/questions/940799
复制相似问题