2009-12-15 update
之前的定期计划放到crongtab,会产生错误,可以查看/var/log/syslog

$ grep -i CMD /var/log/syslog.0
Dec 25 00:11:01 krc /USR/SBIN/CRON[4273]: (root) CMD (tar -g /data0/snapshot_data_www -p -cvzf /data1/backup_zone/data_www/da

ta_www_`date '+)

Dec 25 00:11:30 krc Transfer: Get GETCMD error.

Dec 25 01:01:01 krc /USR/SBIN/CRON[12617]: (root) CMD (tar -cvzf /data1/backup_zone/data_conf/usr_local_webserve_`date '+)

Dec 25 01:01:33 krc Transfer: Get GETCMD error.

查看以上的日志,不难发现,备份语句被截断了,在换行的时候。因此,可以有以下2种修补方案

1.手工把语句截断,利用分行符%

2.把语句放到sh脚本里,使用bash /root/scriptname.sh这样的方式执行(推荐,因为看起来更简洁)

附注:备份任务最好以高权限用户执行,因为要备份的内容文件权限各不一样,其他用户不能保证都有权限。因此,建议用root权限执行。鉴于root权限的高风险,请编辑crontab之前,先在试验环境全部run过。*

more

·完全备份,每隔一天做增量备份(Everyday,00:01)*

tar -g snapshot_data_www -p --exclude=data_www/ftp.99dev.net -cvzf /data1/backup_zone/data_www/data_www_date '+%Y%m%d'.tar.gz /data0/data_www  

-g指定文件,为记录gnu tar文件变化情况;-p保留文件权限;--exclude指定打包要排除的目录,这里指定最大,变化最不经常的目录;-cvzf常见的打包选项,这里就不说了;'date ‘+%Y%m%d'指定用20091028这样的格式显示文件名,详细可查看man date`


·每周一凌晨,清空snapshot(Mon,00:10),重新做完全备份(Mon,00:11)

> cat /dev/null > /data0/snapshot_data_www  

·每周一清晨,删除>14天的文件(Mon,00:01)*

find /data1/backup_zone/data_www/* -mtime +14 |xargs rm –f

不定期删除的话,再大的备份盘怕是也顶不住,而且备份文件太多,也不便于管理


·设定crontab内容,均以无特权用户www执行*

crontab –u www -e

·crontab输出结果(任务计划文件/var/spool/cron/_username_)*

1 0 1 find /data1/backup_zone/data_www/* -mtime +14 |xargs rm -f   #remove old files

10 0 1 cat /dev/null > /data0/snapshot_data_www      #clear the snapshot

11 0 * tar -g /data0/snapshot_data_www -p --exclude=data_www/ftp.99dev.net -cvzf /data1/backup_zone/data_www/data_www_date '+%Y%m%d'.tar.gz /data0/data_www     #backup the data_www directory

·Tips

有时候,你只想从备份文件中恢复某个历史文件,没必要大费周章去解压那巨大的压缩文件。只须执行以下2

1.tar ztf tarballfile.tar.gz,找出你想要的文件的路径

2.tar xvzf tarball.tar.gz ‘the file/folder what you want’ –C ‘special folder’