任何人都有任何bash脚本,每天/每周/每年的备份脚本,我可以使用cron。
基本上它会把备份到3个文件夹。 每日备份将只有本周的备份文件。 每周备份将只有本月的每周备份文件和月份备份文件夹将每年备份文件。
谢谢!
看看这些工具:
您可能会发现这些工具可以满足需求,并且不需要脚本。 我也使用脚本,但他们是在特定情况下。 如果你想要其他人做的例子,两个人已经在这里发布了他们的备份脚本。
ServerFault已详尽地介绍了备份。 如果您正在尝试制定备份策略,则build议您search该网站。 如果您无法find回答的特定问题,您可以在单独的问题中提出这个问题。
不 – 但是它做的很微不足道。 OTOH远不是微不足道的根据你所提供的信息来回答你的问题。
当然,从crontab而不是bash脚本控制备份types(每天/每周/每年)和目的地要简单很多(尽pipe这可能只是将一个不同的参数发送到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
如焦油和压缩几乎普遍可用 – 但它不是很健壮。 CPIO更强大,但不包含压缩支持。
警告:在5分钟内一起黑客入侵并且未经testing(我没有安装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
你可以使用Duplicity来达到这个目的。 与stream行的rsnapshot和rdiff-backup相比,它仍然是积极开发的。
唯一的缺点是,你不能创build每日,每周和每月的备份,但可以创build一个更简单的组合,如“每日,每周”或“每周,每月”或“每日,每月”等。
为此,我推荐这个包装脚本: https : //github.com/zertrin/duplicity-backup ,它显着简化了configuration。
我已经编写了将所有备份轮换到一个文件夹中的脚本,每天保持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次的备份。
我已经掌握了这个主题的大部分逻辑