为了增量备份利用 tar 的 -g参数

为了增量备份利用 tar 的 -g参数

tar -cf backup_`date +%F`.tar -g backup_`date +%F`.snapshot /path/source/

首次执行时,会将source这目录(即整个source裡的资料)作成tarball档,
并在daily-snapshot-file档案裡记录时间点,
第二次执行时,根据daily-snapshot-file裡的时间点,与在现执行时的时间点,
检查是否有变动的资料,有更新便只把更新档案的作成tarball档,并更新daily-snapshot-file裡的时间点,
无更新时也会有tarball档产生,但裡面无资料,而daily-snapshot-file的时间点也会作变动。

假如source裡还有目录的话,它是同理的。

如果持续作这动作,可能要考虑写个script来针对snapshot这档作置换一下,

因为每执行一次,照著`date +%F`的话,时间点会从新计算,

范例:

cp backup_20051221.snapshot backup_20051221.snapshot.old

tar -cf backup_20051222.tar -g backup_20051221.snapshot /path/source

mv backup_20051221.snapshot backup_20051222.snapshot

使用 find 来作辅助
找出昨天到现在时间裡的档案作成 tarball

tar -cf data.tar `find /path/* -mtime -1 ! -type d -print`

-mtime -1
-1表示前一天。

! -type d
或者是
-type f
如果没加这个参数,它会把/path/底下的目录的裡的全部资料(包含旧的)都备出来

-print
表示标准输出,每个档有路径且一行一行列出。但路径要看find指令后面接什麽路径,

如果为./path,输出的路径就成./xxx/data.txt,如果为/path/*,输出的路径就成/path/data.txt,
并注意 find后面接的路径,如果为/path/,则交给tar后,产生的档案会与为/path/*产生的不同,
而/path/*的才是正确的,/path/所产生的tarball会多出一倍的容量。

比较两种方式,当搭配了crontab时,
使用 find的方式,需要去计算在crontab裡排程的时间与-mtime参数的时间之间的差距,
假如排程每七日执行一次,而-mtime就要设定为-8。
使用 tar -g的方式,就不用去管时间差距,到时排程一执行,它会自动去读daily-snapshot-file裡与现在的时间差。

其它范例

比这时间还新的档案做 tar,不过用这方法不准,会参杂其它日期的

tar -N “20050909″ -cf data.tar /path/

依date参数%Y/%m/%d产生出来的现在时间,的四天前做tar

如果现在时间为2005-12-04,要tar作2005-10-22天后的日期,”4 days ago”改为”43 days ago”

tar -jcvf /path/aletw.bz2 –newer-mtime `date -d “4 days ago” +%Y/%m/%d` /path

2008/01/22 单纯使用 tar 依日期作差异的话它会把空目录也 tar 进来,所以还是搭配 find 吧
find 目录 -mtime -1 ! -type d -print > include.txt
tar zcvf xxx.tar.gz -T include.txt


Leave Your Comment

Your email will not be published or shared. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">

*
请输入图片中的字符以验证你并非垃圾机器人. 点击图片收听验证码的语音版.
点击这里收听此验证码的语音版本