任務目標 : 自動及同歩化完成異地備份所有使用者家目錄.
於Host OS(OpenSUSE11), 建立一指令稿(使用bash) backup.sh 存放於/root/bin/內, 工作內容是對/home目錄進行增量備份(incremental backup), 且必須滿足以下需求:
a) 指令稿內必須使用tar 指令進行備份.
b) 指令稿內必須使用(定義及呼叫)函式(function)
c) 於每週一時, 指令稿必須進行完整備份(full backup).
d) 自每週二至週五, 指令稿必須進行增量備份(incremental backup), 只備份當日有異動的部份資料.
e) 指令稿內以date找出備份當日的星期名稱(如 Sun,Mon,Tue,...), 以便能判斷出必須採用的備份方法.
f) 使用一快照檔案(/var/log/backup/snapshot_file), 以便進行 backup 時的依據.
g) 對產生的備份檔須符合以下格式:
* Full backup: /var/backup/full-YYY-MM-DD.tar.gz
* Differential backup: /var/backup/incremental-YYYY-MM-DD.tar.gz (YYY-MM-DD 是備份當日的格式 (如. 2009-12-18).
h) 若進行備份失敗, 該指令稿必須能發出 email 給 root@localhost. 主旨為"Backup failed !", email內容可不需要指定.
i) 於指令稿內使用rsync進行同歩Host OS(OpenSUSE11)的/var/backup目錄, push 到 Guest OS(SLES10)的 ~/backup目錄內,以實現異地備份任務.
j) 使用例行式排程於週一至週五18:30執行backup.sh.
k) 注意事項 :
* 預於2009/12/24進行驗收
* 請盡可能自己編寫(勿抄襲他人的). 若有問題請於班版提出.
祝 大家順利完成. Guru
#!/bin/bash
DOW=`date +%a` ->將日期顯示改為 Mon、..作為變數
[ -d /var/log/backup ] || mkdir /var/log/backup ->判斷 是否有此directory
[ -d /var/backup ] || mkdir /var/backup
#full (){ getfacl -R /home > /home/acls-`date +%F`
# tar -czvf /var/backup/backup-full-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
# touch /var/log/backup/last-backup
# x=`echo $?`
# }
->每次皆會參考 snapshot 作為複製檔案的依據,故進行Full 之前,先刪除snapshot檔來進行完全備份。
full (){ getfacl -R /home > /home/acls-`date +%F`
rm -rf /var/backup/snapshot_file
tar -czv -g /var/backup/snapshot_file -f /var/backup/backup-full-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
touch /var/log/backup/last-backup
x=`echo $?`
}
->增量備份,參考snapshot_file檔,來備份最新的檔案。
incr (){ getfacl -R /home > /home/acls-`date +%F`
tar -czv -g /var/backup/snapshot_file -f /var/backup/backup-incremental-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
x=`echo $?`
}
#diff (){ getfacl -R /home > /home/acls-`date +%F`
# find /home -type f -newer /var/log/backup/last-backup -print0 | tar --null -cvf /tmp/backup-diff-`date +%F`.tar -T - > /var/log/backup/backup-`date +%F`.log
# x=`echo $?`
# }
->利用case 來判斷 執行 Full or Incremental backup!
case "$DOW" in
Mon) full ;;
Tue) incr ;;
Wed) incr ;;
Thu) incr ;;
Fri) incr ;;
esac
if [ $x -ne 0 ] ; then
echo "" | mail -s "Backup failed !" root
fi
#########-------------Remote rsync backup--------#############(以下須手動執行)
# 1. input --> ssh-keygen -t dsa -N "" ->產生金鑰
# 2. Remote computer need--> mkdir ~/backup ->建立遠端備份目錄
#########------------------------Run---------------------#############(以下註解拿掉即可執行)
echo -n "Please input Remote IP address : "
read IP
# echo Please wait....
# sleep 2
# scp /root/.ssh/id_dsa.pub root@$IP:/root/.ssh/authorized_keys
->將剛產生的金鑰複製傳送到遠端電腦。之後登入,自動信任此帳戶!
echo Please wait....
sleep 2
->判斷如果,備份 執行成功,則複製傳送到遠端電腦,進行異地備份。
if [ $x -eq 0 ] ; then
rsync -azv /var/backup -e ssh root@$IP:~/backup
echo "Test Only^^ " | mail -s "Backup Succeed" root
fi
###############################################################
# if [ $x -eq 0 ] ; then
# echo "Test Only " | mail -s "Backup Succeed" root
# fi
## result : nl /var/log/backup/last-backup = = tar -tvf /backup-full .. .tar | nl
## in other to have /var/log/backup/last-backup file, modify your date to friday first !!
##---------------------Create-Cron ----------------##
## 以下提供兩種方法!
## touch /etc/cron.d/incre-cron
## echo '30 18 * * 1-5 root /root/bin/Incremental_backup.sh' >> incre-cron
# touch incre-cron
# echo '30 18 * * 1-5 root /root/bin/Incremental_backup.sh' >> incre-cron
# crontab incre-cron
###################################
標籤
- 上課實作 (7)
- 高級實作 (3)
- 雜貨店 (6)
- Exchange Server (3)
- grub組態設定 (1)
- IIS架站 (1)
- Juniper_SSG (4)
- L2 switch (2)
- L3 switch (4)
- Server2003 (6)
- Server2008 (5)
- Shell Script Programming (3)
- TCP/IP (1)
- Wirless_Aruba (4)
沒有留言:
張貼留言