使用rsync进行备份而不会覆盖

Kas*_*tin 2 versioning backup rsync rsnapshot

我知道--ignore-existing选择权,想知道是否有些不同。

我的情况是:我有一个带有大量用户上传图片的Web服务器。现在大约2TB。通常,这些文件根本不会被修改。我使用rsync并将其备份到其他服务器。

但是,如果某些文件损坏了怎么办?假设文件的一半消失了。它将被复制到备份并覆盖以前的正确文件,因此备份也将损坏。

我可以用--ignore-existing。但是,如果某些文件仍被更改怎么办(这很少,但是可能)。使用此选项,备份将没有此新文件。

如果文件更改,我希望备份所有版本。可能吗?也就是说:如果rsync定义该文件已存在,则它将现有的旧文件移至某个文件,../previous-TIMESTAMP/oldFileHere然后将新文件放在旧文件的位置。

有没有办法做到这一点?

Sri*_*bat 7

抱歉,这是错误的答案,请参阅我的其他答案

我认为你想使用rsnapshot而不是rsync. 它专为恢复旧版本的文件而构建。它每小时、每周和每月在目录中提供文件版本控制~/.snapshots

如果您的文件很小,您甚至可以考虑通过将它们放入gitrepo 来基于修改而不是基于时间对它们进行版本控制。这就是我如何处理我的数据库、点文件和个人笔记。


Sri*_*bat 7

--backup --suffix =

如果您不想使用rsnapshot,则可以使用带有后缀的目标文件,如下所示:

rsync --backup --suffix=`date +'.%F_%H-%M'` ~/life_story.txt /media/myusername/backupdrive/life_story.txt
Run Code Online (Sandbox Code Playgroud)

注意:

  • 副本将是“智能的”-如果源和目标相同,则不会生成新的带时间戳的备份(很好)
  • 有一个选项可以使用子目录而不是文件后缀(--backup-dir),但我自己没有尝试过。

  • 很好的答案!我修改为 `rsync --backup-dir=backup_\`date +%F_%H-%M-%S\` src dst`。这会将“src”同步到“dst”,并创建一个带日期的备份目录,其中仅包含“dst”中即将覆盖的文件的副本。备份目录保留子目录结构 (3认同)