另外,推荐压缩时使用选项p,保持文件访问权限。
转载自http://blog.tangjianwei.com/2010/08/06/perform-a-incremental-backup-with-tar-in-linux/
近来无聊,博客又好久没有更新了,来说说linux下面的文件备份吧。
备份无非就是全量备份与增量备份。linux下面的全量备份自然不用说,很多命令与软件都能实现;增量备份相对来说软件就要少些,我常用的就是rsync与tar。
rsync与tar相比,rsync的优点在于可以异机备份,缺点在用不能对文件进行压缩。tar的优点就是可以调用bzip2或者gzip进行压缩,但是只限于本机备份。rsync我这里就不多讲了,今天就来说说tar吧
开题不说闲话,其他参数格式我都不说了,说说我们今天要用的参数格式:
在这里对info_file
info_file是一个纯文本文件,以UNIX时间记录备份的时间戳。这个文件一般是第一次全备时自动创建,也可以手动创建。如果你手动创建这个文件,那tar就只会备份在这个时间戳之后修改过的文件,所以严格意义上来说,tar的增量备份并不能算做是增量备份,而只是按时间戳备份而已。这点远远比不上rsync。
ok,了解了一下概念,我们正式开始:
$ touch dest/{1,2,3}
$ tar -g /tmp/timestamp -zcvf backup0.tgz dest/
dest/
dest/1
dest/2
dest/3
$ cat /tmp/timestamp
1281096816
由于/tmp/timestamp原来是不存在的,所以这次备份下来的backup0.tgz就是一个全备份文件。备份之后的timestamp文件内容是1281096816。
然后我们继续。这个时候就要记得info_file要继续用上次全备文件之后文件:
dest/
dest/4
dest/5
dest/6
$ cat /tmp/timestamp
1281097104
我们可以看到,这次生成的backup1.tgz并没有备份还在dest目录下面的文件1, 2, 3,而只备份了新生成的文件4, 5, 6。
然后,我们再来一个测试
$ date +%s > /tmp/timestamp
$ touch dest/9
$ tar -g /tmp/timestamp -zcvf backup2.tgz dest/
dest/9
$ cat /tmp/timestamp
1281097553
我在创建文件7, 8之后,利用date命令手动刷新了一下info_file的内容,然后再创建了文件9,之后的备份,大家就可以很明显的看到,文件7, 8并没有被备份。
大家应该也就应该看出来了,这就存在一个问题,就是-g做增量备份时的这个info_file到底记录的是什么时刻的时间。大家可以通过实验得到,info_file的更新时间在在.tgz文件之后的,但究竟记录的时间是不是刚刚开始时间呢?
这个我们也可以通过一个小实验来得到:
$ date +%s && tar -g /tmp/timestamp -zcf backup3.tgz dest && cat /tmp/timestamp && date +%s
1281098446
1281098523
1281098524
怎么样,很明显了吧。如果直接用这种方式备份的话,那么从你备份开始到备份结束之间生成的文件是不会被备份的。