分类
未分类

使用 rsync 进行增量备份并保存每天的快照

这一招简直牛逼透顶了。参考:http://www.mikerubel.org/computers/rsync_snapshots/#Incremental

假设我们的数据文件在 /data 目录,需要将其备份到 /backup 目录,并且保留最近一个月的每天的快照,则:

第一天(首次备份):

# 注意目录之后的斜杠:
rsync -a --delete /data/ /backup/2020-11-01/

第二天:

# 注意此处的 --link-dest,它会创建 hard link 硬链接,因此非常节省空间
rsync -a --delete --link-dest=/backup/2020-11-01 /data/ /backup/2020-11-02/

第三天:

rsync -a --delete --link-dest=/backup/2020-11-02 /data/ /backup/2020-11-03/

下个月第一天:

rm -rf /backup/2020-11-01
rsync -a --delete --link-dest=/backup/2020-11-30 /data/ /backup/2020-12-01/

这样以来,/backup 下会保留每天的完整备份,但却是最小化硬盘空间占用。其妙处在于使用了以下两个特性:

  1. 硬链接特性。若b是指向a的硬链接,则:磁盘空间占用只有一个文件的大小;若删除其中一个文件,那么另外一个文件还会存在,只有a和b都删除之后磁盘空间才会清除。但是,若修改了a,则b的内容也会变,因此两者指向的都是同一个文件。
  2. rsync 同步时,若检测到文件变动,则会先断开链接,再复制。

实际上我感觉用这种方法,我保留半年的备份硬盘也不会满。当然最靠谱的方式是将备份放到单独的物理硬盘中。

“使用 rsync 进行增量备份并保存每天的快照”上的4条回复

理论上,每一次备份都会生成一个新的目录,这些目录怎么管理?

这些目录只能用于恢复用途,恢复时使用最近的备份目录(其他目录)即可。若手动编辑目录中的文件,则必须手动断开硬链接,否则会影响其他目录中的文件内容。

也就是说,这些目录相互是有关联的,不适合单独处理,应该作为一个整体来管理?

目录是独立的,但是只能复制,不能更改,更改之前先要断开硬链接。实际上,这的目的只是为了备份和恢复,若要更改的话则先恢复然后在恢复的版本里更改即可。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注