目標:
於server1(自己的主機), 建立一指令稿(使用bash) backup.sh 存放於/root/bin/內,
工作內容是對/home目錄進行差異式備份(differential backup), 且必須滿足以下需求:
a) 指令稿內必須使用tar 指令進行備份.
b) 於每週五時, 指令稿必須進行完整備份(full backup).
c) 於每週一至週四, 指令稿必須進行差異式備份(differential backup), 只備份full backup後有異動的部份資料.
d) 指令稿必須能找出備份當日的星期名稱(如Mon,Tue,Wed,...), 以便能判斷出必須採用的備份方法.
e) 使用一參考檔案(/var/backup/last-backup), 以便進行 full backup 後的郵戮時間點, 作為 differential backup 啟始點的依據.
f) 對產生的備份檔須符合以下格式:
* Full backup: /var/backup/backup-full-YYY-MM-DD.tar.bz2
* Differential backup: /var/backup/backup-diff-YYYY-MM-DD.tar.bz2. 其中YYYY-MM-DD 是備份當日的格式 (如. 2011-09-29).
g) 若進行備份失敗, 該指令稿必須能發出 email 給 root@server1. 主旨為"Backup failed !", email內容可不需要指定.
h) 於指令稿內使用rsync進行同歩server1的/var/backup目錄, push 到 server2的 /home/bkman/backup目錄,
以實現異地備份任務.(bkman 為該帳戶的home folder. 且server2為測試主機)
i) 使用例行式排程於週一至週五晚上22:30執行backup.sh.
j) 假設你backup資料的安全存量為四周, 此script能自動刪除超過一個月的backup 資料.
Server1:
#!/bin/sh
#WrittenBy YuningLau
#Full Backup Funtion
full()
{
touch /var/backup/last-backup
rm -rf /var/backup/backup_full_"$date28".tar.bz2
tar -cjvf /var/backup/backup_full_`date +%F`.tar.bz2 /home
}
#Differential Backup Funtion
diff()
{
rm -rf /var/backup/backup_diff_"$date28".tar.bz2
find /home -type f -newer /var/backup/last-backup -print0 | tar --null -cjvf /var/backup/backup_diff_`date +%F`.tar.bz2 -T -
}
#Name parameters to see which day today is :
today=`date +%u`
date28=`date --date='28days ago' +%F`
#Remove backup files over 4 weeks
rm -rf /var/backup/backup_*_"$date28".tar.bz2
#Exam which type to backup
case "$today" in
[5])
full
;;
[1234])
diff
;;
esac
#Exam the backup is complete or not
#If fail, send notification to root
#If sucess, push to backup server(server2)
if [ $# -ne 0 ]
then
mail -s "Backup Failed!!!" root@es11-s1
else
rsync -ave ssh -6 --delete /var/backup root@es11-s2:/home/bkman
fi
exit 0
- scp id_rsa.pub root@[server2 IPv6 Addr.]:/root/server1.pub
於文件末端新增一筆:
30 22 * * 1-5 root bash /root/bin/backup.sh
Server2:
- useradd –m bkman
- passwd bkman
- cat server1.pub >> /root/.ssh/authorized_keys