![寻找使用 RSYNC 的简单、快速增量备份算法](https://linux22.com/image/649327/%E5%AF%BB%E6%89%BE%E4%BD%BF%E7%94%A8%20RSYNC%20%E7%9A%84%E7%AE%80%E5%8D%95%E3%80%81%E5%BF%AB%E9%80%9F%E5%A2%9E%E9%87%8F%E5%A4%87%E4%BB%BD%E7%AE%97%E6%B3%95.png)
我正在运行一个简单的 bash 脚本,该脚本使用 rsync 每小时对我的 Web 服务器进行增量备份。我正在寻找一种有效的算法来删除适当的备份,以便最终保留:
- 24 小时内每小时备份
- 每日备份,为期一周
- 每周备份 1 个月
- 从那时起每月备份
我会根据空间耗尽的时间来确定何时删除每月备份。所以我们不担心这个。我还熟悉 rsync 的各种包装器,如 rdiff-backup 和 rsnapshot,但这些都不是必需的。我更喜欢尽可能自己编写代码,即使有时这意味着重新发明轮子。至少这样,如果我爆胎了,我知道如何修理它 :)
这是每小时运行的实际注释代码:
#if it's not Sunday and it's not midnight
if [ $(date +%w) -ne 0 ] && [ $(date +%H) -ne 0 ]; then
#remove the backup from one day ago and one week ago
rm -rf $TRG1DAYAGO
rm -rf $TRG1WEEKAGO
fi
#if it's Sunday
if [ $(date +%w) -eq 0 ]; then
#if it's midnight
if [ $(date +%H) -eq 0 ]; then
#if the day of the month is greater than 7
# we know it's not the first Sunday of the month
if [ $(date +%d) -gt 7 ]; then
#delete the previous week's files
rm -rf $TRG1WEEKAGO
fi
#if it's not midnight
else
#delete the previous day and week
rm -rf $TRG1DAYAGO
rm -rf $TRG1WEEKAGO
fi
fi
基本上来说:
If it's not Sunday and it's not 3am:
- delete the backup from one day ago
- delete the backup from one week ago
If it is Sunday:
If it is Midnight:
If the day of the month is greater than 7:
-delete the backup from one week ago
Else (if it's not Midnight)
- delete the backup from one day ago
- delete the backup from one week ago
这似乎可行,但我想知道是否有人可以提出更简单、更有效的算法,或者提供任何更好的方法来实现这一点。谢谢。
答案1
我想知道是否有人可以想出一种更简单、更有效的算法,或者提出任何更好的方法来实现这一目标的想法。
是的 - 使用 rdiff-backup、rsnapshot 或其他一些您不需要维护的选项。
我并不是在装糊涂。我知道你说你想写自己的代码。有时这里的正确答案并不是你想听到的。我为你写了这个答案,也为将来阅读你的问题并看到这个答案的成千上万的人写了这个答案。
如果存在成熟的、经过严格审查的、可以免费使用的解决方案来满足您的需要,那么采用其中一种解决方案而不是自己编写解决方案几乎总是最好的决定。