| 关键词: 备份 DAYTIME BACKUPDIR 文件 完全 echo 增量 ALLDIR file list |
#说明:这个备份脚本只是一个基于文件名的备份 #完全备份:就是完全备份 #增量备份:备份与前一次的差异 #差异备份:每次备份都是与原始的备份比较的结果 #!/bin/bash #backup script #思想: #完全备份:若没有进行过完全备份,则使用find命令将$SRCDIR下不是目录(!d)的文件名重定向输出到$ALLDIR/$DAYTIME/file.list.all #差异备份:将$SRCDIR下文件和完全备份时的日期文件$BACKUPDIR/time.all进行新旧比较,若前者比后者新则进行备份(同上!d文件) #增量备份;将$SRCDIR下文件和完全备份时的日期文件$BACKUPDIR/time.up进行新旧比较,若前者比后者新则进行备份(同上!d文件) #判定当前用户是否是root if [ "$USER" == "root" ] ; then echo "" else echo "滚蛋!" exit 2 fi #每次运行此脚本时产生/tmp/back.pid文件,主要用于判定当前进程是否是唯一的! if [ ! -e "/tmp/back.pid" ]; then echo $$ > /tmp/back.pid else echo "已经再运行,马上退出!" exit 2 fi #备份的主体,/data目录下的所有文件到/tmp/backup, tar.gz BACKUPDIR=/tmp/backup ALLDIR=/tmp/backup/all DIFFDIR=/tmp/backup/diff UPDIR=/tmp/backup/up SRCDIR=/data #定制时间格式 DAYTIME=$(date +"%Y%m%d%H%M%S") #创建备份用的目录 #测试是否存在$BACKUPDIR,若不存在则创建$BACKUPDIR [ ! -d $BACKUPDIR ] && mkdir $BACKUPDIR #用来创建完全备份 function all() { if [ ! -f $BACKUPDIR/time.all ]; then #完全备份的同时,创建用来比较的时间文件 echo $DAYTIME > $BACKUPDIR/time.all echo $DAYTIME > $BACKUPDIR/time.up echo $DAYTIME > $BACKUPDIR/time.diff #进入$SRCDIR,创建$ALLDIR/$DAYTIME文件 #将$SRCDIR下不是d(目录)的文件备份为/$ALLDIR/$DAYTIME/file.list.all #将文件/$ALLDIR/$DAYTIME/file.list.all打包压缩为$ALLDIR/$DAYTIME/$DAYTIME.tar.gz cd $SRCDIR mkdir -p $ALLDIR/$DAYTIME #完全备份 find ! -type d > $ALLDIR/$DAYTIME/file.list.all tar -zcv -f $ALLDIR/$DAYTIME/$DAYTIME.tar.gz -T $ALLDIR/$DAYTIME/file.list.all #给备份的文件增加时间标记 sed -i "s/$/ $DAYTIME/" $ALLDIR/$DAYTIME/file.list.all echo "完整备份结束" else echo "已在"`tail -n 1 $BACKUPDIR/time.all`"执行过完整备份" fi } #用来创建差异备份 function diff() { #判断是否完全备份过,如果没有,则执行完全备份 [ ! -f $BACKUPDIR/time.all ] && echo "没有完全备份,将执行完全备份!" && all && rm -fr /tmp/back.pid && exit 0 cd $SRCDIR mkdir -p $DIFFDIR/$DAYTIME #查找存在差异的需要备份的文件 find -newer $BACKUPDIR/time.all ! -type d > $DIFFDIR/$DAYTIME/file.list.diff #如果文件内容为空,则不进行差异备份! if [ -s $DIFFDIR/$DAYTIME/file.list.diff ] ;then tar -zvc -f $DIFFDIR/$DAYTIME/$DAYTIME.tar.gz -T $DIFFDIR/$DAYTIME/file.list.diff sed -i "s/$/ $DAYTIME/" $DIFFDIR/$DAYTIME/file.list.diff echo "差异备份结束" else echo "没有变化,不需要差异备份!" rm -fr $UPDIR/$DAYTIME fi } #用来创建增量备份 function up() { [ ! -f $BACKUPDIR/time.all ] && all && rm -fr /tmp/back.pid && exit 0 cd $SRCDIR mkdir -p $UPDIR/$DAYTIME #用来做增量备份的参考文件是time.up find -newer $BACKUPDIR/time.up ! -type d > $UPDIR/$DAYTIME/file.list.up #如果文件内容为空,则不进行增量备份! if [ -s $UPDIR/$DAYTIME/file.list.up ] ;then #更新参考文件的时间 echo $DAYTIME > $BACKUPDIR/time.up tar -zcv -f $UPDIR/$DAYTIME/$DAYTIME.tar.gz -T /$UPDIR/$DAYTIME/file.list.up sed -i "s/$/ $DAYTIME/" $UPDIR/$DAYTIME/file.list.up echo "增量备份结束" else echo "没有变化,不需要增量备份" rm -fr $UPDIR/$DAYTIME fi } #要求交互式提出要求,是all,diff,up case $1 in all) all ;; diff) diff ;; up) up ;; *) echo "只接受all,diff,up" ;; esac #退出时,删除锁定文件 rm -fr /tmp/back.pid |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|