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

2020-11-15 09:54:00 — by Kevin Suo


参考: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 同步时,若检测到文件变动,则会先断开链接,再复制。