
任何人都有任何可以執行每日/每週/每年備份腳本的 bash 腳本,我可以將其與 cron 一起使用。
基本上它會將備份放入 3 個資料夾中。每日備份只會有本週的備份檔。每週備份資料夾中只有本月的每週備份文件,而月備份資料夾則包含每年的備份文件。
謝謝!
答案1
答案2
不——但是做起來非常簡單。 OTOH 根據您提供的資訊來回答您的問題絕非易事。
當然,從 crontab 而不是 bash 腳本控制備份類型(每日/每週/每年)和目標要簡單得多(儘管這可能只是向 has 腳本發送不同的參數)。
備份本質上並不重要——能夠恢復您的資料非常重要 - 因此,要使您的備份具有任何價值,那麼它必須採用允許您恢復它的格式。我們不能告訴你:
1) Which backup format is appropriate for your data
2) what backup tools you have on your system which are scriptable
3) what restore tools you are likely to have access to if you suffer a complete system failure
4) whether you need to support multi-volume / media changes in your backup
例如 tar 和 compress 幾乎普遍可用 - 但它不是很強大。 CPIO 更強大,但不包含壓縮支援。
答案3
警告:在 5 分鐘內破解並未經測試(我沒有安裝 Bash)。
#!/bin/bash
#Usage: $0 [Yearly,Monthly,Weekly]
set PROTECTEDFILES = "/etc /usr/home /usr/local/etc"
set BACKUPDIR = "/usr/backups"
set BACKUPTAR = backup-`hostname -s`-`date "+%F"`.tgz
tar czf $BACKUPDIR/$1/$BAKCUPTAR $PROTECTEDFILES
在 crontab 中:
0 0 1 1 * root /root/sbin/my_backup Yearly
0 0 1 * * root /root/sbin/my_backup Monthly
0 0 * * 6 root /root/sbin/my_backup Weekly
答案4
我編寫了一個腳本,用於輪換一個資料夾中的所有備份,每天保留 X 次、每週 Y 次和每月 Z 次備份。
我將所有備份都保存到資料夾中
/root/backup/YYYYMMDD
每天。
然後,我有以下旋轉腳本:
#!/bin/bash
echo > /root/keep.txt
#writing dates of the backups that should be kept to the array
for i in {0..7}; do ((keep[$(date +%Y%m%d -d "-$i day")]++)); done
for i in {0..4}; do ((keep[$(date +%Y%m%d -d "sunday-$((i+1)) week")]++)); done
for i in {0..12}; do
DW=$(($(date +%-W)-$(date -d $(date -d "$(date +%Y-%m-15) -$i month" +%Y-%m-01) +%-W)))
for (( AY=$(date -d "$(date +%Y-%m-15) -$i month" +%Y); AY < $(date +%Y); AY++ )); do
((DW+=$(date -d $AY-12-31 +%W)))
done
((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
for i in {0..5}; do
DW=$(date +%-W)
for (( AY=$(($(date +%Y)-i)); AY < $(date +%Y); AY++ )); do
((DW+=$(date -d $AY-12-31 +%W)))
done
((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
#writing the array to file keep.txt line by line
for i in ${!keep[@]}; do echo $i >> /root/keep.txt; done
#delete all files that not mentioned in keep.txt
cd /root/backup
ls -1 /root/backup/ | sort /root/keep.txt /root/keep.txt - | uniq -u | xargs rm -rf
rm /root/keep.txt
這將保留 7 個每日備份、4 個每週備份、12 個每月備份和 5 個每年備份。
我已經得到了大部分邏輯這個話題