问题说明了一切:
如果 rsnapshot 或 rdiff-backup 在传输过程中中断会发生什么?
我知道 rsnapshot 会尝试以旋转的方式对您的系统进行完整快照,而 rdiff-backup 会进行差异备份,这将基于之前保存的文件。
那么:如果中途被打断会发生什么?
这会导致“不完整的快照”吗?
依赖于此快照的其他快照会被损坏吗?(当然不会,但是……?)
答案1
我的理解是...
rdiff-备份将在下次运行时检测未完成的增量。它将删除未完成的增量,以便备份位置与中断的备份尝试从未启动时相同。
快照稍微复杂一些,因为它的例程更加分步,并且根据sync_first
和use_lazy_deletes
选项的使用而有所不同。
- 如果您使用
sync_first
并被rsnapshot sync
打断,您可以简单地rsnapshot sync
再次运行以解决问题。如果您不小心rsnapshot <backup level>
在此时运行,最新的备份点将保持不完整并将通过轮换进行。 - 如果您不使用
sync_first
,那么您只能得到一个不完整的备份点,它是新旧版本文件的混合体。除非您手动反向旋转每个备份点,否则不完整的备份点将进行旋转。 - 在这两种情况下,运行
rsnapshot <backup level>
都会导致最旧的备份点丢失,除非use_lazy_deletes
启用。
请注意,sync_first
这use_lazy_deletes
会占用更多的磁盘空间。
提醒/免责声明:这应该是不言而喻的,但永远不要盲目相信互联网上其他人的建议。如果你打算使用 rdiff-backup 或 rsnapshot 来做某事任务关键型, 读每一个手册的字样和测试,测试,测试一切你自己!
答案2
这刚刚发生在我身上。我的外部驱动器在 rsnapshot 的增量备份过程中已满:
rsync: write failed on "<path>": No space left on device (28)
现在我想分享我从中学到的几件事。例如修复和限制这种情况对我造成不利影响的机会;)
恢复 Rsnapshot 中断的备份
我知道两种安全回滚的方法。
手动
- 删除最后一个目录(例如 daily.0)
- 重命名连续目录 (daily.1 -> daily.0, ...);可能的脚本1
- (再次)照常运行备份。
自动地
rsnapshot 没有暂停/停止和恢复功能(除了有限的“由于回滚计划而跳过“2),所以我们必须使用包装器来处理这些功能。
rsnapshot-once
3由 Philipp C. Heckel 编写的 rsnapshot 包装器用 PHP 编写,其功能如下:
- 无需修改 rsnapshot 的配置即可工作
- 确保每日、每周和每月任务仅运行一次在相应的时间段内,通过 cron(适合笔记本电脑)
- 回滚失败的备份(检查上次备份是否完整;如果没有,则删除最后一个目录并重命名连续的目录,例如 daily1. -> daily.0,...)
使用了一年后,我是一个快乐的用户:我openbase_dir
根据我的备份需要编辑了 php.ini,瞧,幸运的一天 ^_^ 比我以前基于原始 rsnapshot 的解决方案更顺畅、更安全。
注意:slm 从重复的问题中将我链接到这里:Rsnapshot 目标已满 - 如何安全地重新运行?