考察如下的备份脚本:
#!/bin/bash
# NAME : backup.sh
# 2006-03-24 Ver 1.0 Osmond
#
# 请根据您的需要修改如下变量的值
BACKUPDIR=/backups/dat # 备份文件存放的目录
BACKUPLISTDIR=/backups/list # 要备份目录的文件列表
BACKUPLOGDIR=/backups/logs # 存放上次完全备份时间文件的目录
TARPATH="/bin/tar" # tar 的完整路径
TARCOMPRESS="-z" # 压缩算法("-z"|"-j"|"")
BACKUPKEEPDAYS=28 # 保留多少天的备份
MAILUSER="smartraining.cn@gmail.com" # 设置备份管理员的 E-mail
COMPUTER=$(hostname -s) # 本机的机器名称
SmarTraining 工作室 » 使用 tar 备份http://www.proxyserve.net/index.php?q=aHR0cDovL3NtYXJ0cmFp...
# 若备份目录不存在,则创建之
[ ! -e "/backups/dat" ] && mkdir -p /backups/dat
[ ! -e "/backups/list" ] && mkdir -p /backups/list
[ ! -e "/backups/logs" ] && mkdir -p /backups/logs
PATH=/usr/local/bin:/usr/bin:/bin
DOW=`date +%w` # 周几 [0-6]
DATE=`date +%F` # 日期 YYYY-MM-DD
case $TARCOMPRESS in # 根据压缩方法指定 tar 文件后缀
"-z") suffix=".gz" ;;
"-j") suffix=".bz2" ;;
*) suffix="" ;;
esac
# 生成备份文件名的变量
BACKUP_FULL="/$BACKUPDIR/full-backup_$COMPUTER-$DATE.tar$suffix"
BACKUP_INC="/$BACKUPDIR/inc-backup_$COMPUTER-$DATE.tar$suffix"
# 生成 tar 命令及参数的变量
TAR="$TARPATH $TARCOMPRESS -cvpf"
# 生成备份日志文件名的变量
BACKUP_FULL_LOG="/$BACKUPLOGDIR/full-backup_$COMPUTER-$DATE.log"
BACKUP_FULL_ERR="/$BACKUPLOGDIR/full-backup_$COMPUTER-$DATE.err"
BACKUP_INC_LOG="/$BACKUPDIR/inc-backup_$COMPUTER-$DATE.log"
BACKUP_INC_ERR="/$BACKUPDIR/inc-backup_$COMPUTER-$DATE.err"
# 生成完全备份和增量备份的列表文件名的变量
BACKUP_FULL_LIST=$BACKUPLISTDIR/fulldirlist
BACKUP_INC_LIST=$BACKUPLISTDIR/incfilelist
if [ $DOW == "0" -o $1 == "init" ]
then
# 周日进行完全备份
echo -e "\n====== $DATE (FULL) ======\n" > $BACKUP_FULL_LOG
echo -e "\n====== $DATE (FULL ERR) ======\n" > $BACKUP_FULL_ERR
$TAR $BACKUP_FULL -T $BACKUP_FULL_LIST >>$BACKUP_FULL_LOG 2>>$BACKUP_FULL_ERR
# 将错误日志作为内容,备份日志作为附件发送给管理员
cat $BACKUP_FULL_ERR | mutt -s "Backup LOG -- $COMPUTER" -a $BACKUP_FULL_LOG $MAILUSER
else
# 周1-6进行增量备份
echo -e "\n====== $DATE (INC) ======\n" > $BACKUP_INC_LOG
echo -e "\n====== $DATE (INC ERR) ======\n" > $BACKUP_INC_ERR
cp /dev/null $BACKUP_INC_LIST
# 生成增量备份的文件列表
while read dirname
do
find $dirname -mtime -1 -print >> $BACKUP_INC_LIST
done < $BACKUP_FULL_LIST
$TAR $BACKUP_INC -T $BACKUP_INC_LIST >>$BACKUP_INC_LOG 2>>$BACKUP_INC_ERR
cat $BACKUP_INC_ERR | mutt -s "Backup LOG -- $COMPUTER" -a $BACKUP_INC_LOG $MAILUSER
fi
# 清理备份文件和备份日志文件
find $BACKUPDIR $BACKUPLOGDIR -mtime +$BACKUPKEEPDAYS -exec rm -f {} \;
为了使用上面的脚本,需要执行如下步骤:
1、 编辑文件 /root/bin/back up.sh 并添加执行权限
# vi /root/bin/backup.sh
# chmod +x /root/bin/backup.sh
2、创建完全备份目录列表文件
# vi /backups/list/fulldirlist
请根据您的需要决定此文件的内容,例如:
/etc
/var
/usr/local
/home
/root
3、 安排cron备份任务
# crontab -e
若每天 0:20 执行脚本,则 crontab 为:
20 0 * * * /root/bin/backup.sh
您可以根据自己的需要进行调整。
4、若当前不是周日,执行脚本进行首次完全备份
# /root/bin/backup.sh init