【问题标题】:Use rsync for backup without overwrite使用 rsync 进行备份而不覆盖
【发布时间】:2016-07-01 13:27:28
【问题描述】:

我知道--ignore-existing 选项,想知道是否有一些不同之处。

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

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

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

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

有没有办法做到这一点?

【问题讨论】:

    标签: backup versioning rsync rsnapshot


    【解决方案1】:

    --备份 --suffix=

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

    rsync --backup --suffix=`date +'.%F_%H-%M'` ~/life_story.txt /media/myusername/backupdrive/life_story.txt
    

    注意:

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

    【讨论】:

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

    对不起,这是错误的答案,请参阅我的其他答案

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

    如果您的文件很小,您甚至可以考虑通过将它们放在git 存储库中,基于修改而不是基于时间对它们进行版本控制。这就是我对数据库、点文件和个人笔记所做的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 2021-09-20
      相关资源
      最近更新 更多