Differential and Incremental Backup

常见的备份除了增量备份和差异备份之外,还有一个完全备份。三这的差别这里通过一个例子帮助理解。

注:增量备份和差异备份都是建立在完全备份的基础上的,也就是说做增量备份或者差异备
份之前至少要做一次完全备份。

这里假设,三种方式的备份频率都是一天一次,到了第四天资料损坏,需要还原。

原始有 a,b,c 三个文件。
第一天:多了 d,e,变成了 a,b,c,d,e。
第二天:多了 f,g,变成了 a,b,c,d,e,f,g。
第三天:多了 g,i,变成了 a,b,c,d,e,f,g,h,i。

完全备份:

对原始的 a,b,c 做一个完全备份,变为abc.tgz。
第一天结束,完全备份:abcde.tgz。
第二天结束,完全备份:abcdefg.tgz。
第三天结束,完全备份:abcdefghi.tgz。

第四天机子挂掉,直接还原 abcdefghi.tgz 文件即可。

差异备份:

对原始的 a,b,c 做一个完全备份,变为abc.tgz。
第一天结束,差异备份:de.tgz。
第二天结束,差异备份:defg.tgz。
第三天结束,差异备份:defghi.tgz。

第四天机子挂掉,还原 abc.tgz 和 defghi.tgz 两个文件即可。

增量备份:

对原始的 a,b,c 做一个完全备份,变为abc.tgz。
第一天结束,增量备份:de.tgz。
第二天结束,增量备份:fg.tgz。
第三天结束,增量备份:hi.tgz。

第四天机子挂掉,还原 abc.tgz,de.tgz,fg.tgz,hi.tgz。这四个文件即可。

从以上可以看出差异备份和增量的备份的差别:
增量备份会备份自从上次完全备份或者增量备份之后被修改过的文件,差量备份会备份自从上次完全备份后被修改过的文件。前者备份比较耗时而回复比较省时;后者备份比较省时而回复比较耗时。
假使按照上述一天一备份的计划,可以先进行一次完全备份,接下来进行差异或者增量备份,实际应用中不大可能天天进行完全备份。

实现这两种备份的方法有很多,这里以常见的 tar 工具来实现。

差异备份:

先做完全备份

$ tar -zcvf /backup/bk_full.tgz /home

差异备份

$ find /home [-type f] -newer /backup/bk_full.tgz -print0 | tar –null zcvf /backup/bk_diff.tgz -T –

增量备份

先做完全备份

$ tar -zcv -g /backup/snapshot -f /backup/bk_full.tgz /home

增量备份

$ tar -zcv -g /backup/snapshot -f /backup/bk_in.tgz /home

增量备份的还原

$ tar -zxvf /backup/bk_full.tgz -g /dev/null

还原时 -g 参数不需要参考 snapshot 值,可赋予任意值。

而差异的备份的还原跟普通打包解压缩没什么区别。各选项 man 一下就知道什么意思了 :-)

还有一种基于时间方式的差异,增量备份,以下面的这个为例:

1月1日

全备份:

$ tar -cf /dev/nst0 /datas

注:磁带机装置名称依系统和使用的磁带不同有可能是: /dev/st0、/dev/rst0、/dev/rft0/、/dev/sa0等不同名称。开头加上n ( nst、nsa ) 的装置代表操作完不卷回,差异或增量备份使用这种模式可以省去换磁带的麻烦又可以充份利用磁带容量。

2月1日

差异或者增量备份(此时没什么太大的区别)

$ tar -cf /dev/nst0 -N "2011-01-01" /datas

3月1日

增量:

$ tar -cf /dev/nst0 -N "2011-02-01" /datas

差异:

$ tar -cf /dev/nst0 -N "2011-01-01" /datas

4月1日

增量:

$ tar -cf /dev/nst0 -N "2011-03-01" /datas

差异:

$ tar -cf /dev/nst0 -N "2011-01-01" /datas

参考:
http://www.ciehperu.com/selecting-the-best-backup-strategy/
http://beckjottings.blogspot.com/2010/11/tar.html
http://blog.arjin.tw/index.php?pl=257&ct1=2&ct2=113