2009年12月22日 星期二

[Linux] Incremental Backup Shell Script

#!/bin/bash
#判斷下列目錄是否存在,如不存在則建立
[ -d /var/backup ] || mkdir /var/backup
[ -d /var/log/backup ] || mkdir /var/log/backup

#完全備份,先把該資料夾所有的acl寫入至一個檔案。檢查snapshot_file是否存在,
#如果存在則刪除,主要是不影響完全備份。tar 照相snapshot_file並
#建立且壓縮full-date.tar.gz的tarball,運用tee把過程寫入輸出至last-backup且
#輸入至backup-date.log。$?=0 為真
full (){ getfacl -R /home > /home/acls-`date +%F`
         [ -f /var/log/backup/snapshot_file ] && rm /var/log/backup/snapshot_file
         tar -cz -g /var/log/backup/snapshot_file -f /var/backup/full-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
         x=`echo $?`
         touch /var/log/backup/last-backup
       }

#增量備份,先把該資料夾所有的acl寫入至一個檔案。
#tar 比對之前的照相snapshot_file,比對後且重新照張相,並將比對出不一樣的檔案
#建立且壓縮incremental-date.tar.gz的tarball,運用tee把過程寫入輸出至last-backup且
#輸入至backup-date.log。$?=0 為真
incr (){ getfacl -R /home > /home/acls-`date +%F`
         tar -cz -g /var/log/backup/snapshot_file -f /var/backup/incremental-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
         x=`echo $?`
       }

#取得今天是星期幾,存於DOW內
DOW=`date +%a`

#判斷DOW,只有星期一才要完全備份,其餘工作天都使用增量備份
case "$DOW" in
Mon) full ;;
Tue) incr ;;
Wed) incr ;;
Thu) incr ;;
Fri) incr ;;
esac

#用ssh連線遠端同步
rsync -a /var/backup -e ssh root@10.120.14.117:/root/

# x!=0 為偽。兩個函式執行完tar的$?的值
if [ $x -ne 0 ] ; then
echo "" | mail -s "Backup Failed!" root
fi

exit 0
#

沒有留言:

張貼留言