将Rsnapshot恢复到同一驱动器



有时,在使用Rsnapshot的大型rsync上,我们正在同步的NFS装载会下降。

然后当你运行:

rnsapshot monthly

要恢复它,它将表现得好像这是一个全新的,将monthly.0旋转到monthly.1,依此类推

如果出现中断,有没有办法使用rsnapshot monthly恢复rsync?这不会启动一个全新的备份吗?

答案是不是真的,但有点。rsnapshot作为批处理作业运行,通常由cron作业触发。它不会将运行之间的任何状态与备份本身分开。如果您的NFS装载在备份过程中丢失,过一段时间后,您将遇到某种IO错误,rsnapshot将放弃并因错误而终止。备份将失败。下次在故障后运行时,它将像从头开始一样启动备份。

但是,如果使用sync_first配置选项,而不是link_dest选项,rsnapshot将更好地进行恢复。它将保留已传输的文件,不必再次传输,但必须以通常的rsync方式再次检查源和目标是否相同。手册页对此提供了一些详细信息。

link_dest方法的情况并非如此,对于大多数错误,它会删除已完成的工作并重新开始。具体来说,在出现错误link_dest时,会执行类似这样的"回滚":

ERROR: /usr/bin/rsync returned 255 while processing sam@localhost:..
WARNING: Rolling back "localhost/"
/bin/rm -rf /tmp/rs-test/backups/hourly.0/localhost/
/bin/cp -al /tmp/rs-test/backups/hourly.1/localhost 
    /tmp/rs-test/backups/hourly.0/localhost
touch /tmp/rs-test/backups/hourly.0/
rm -f /tmp/rs-test/rsnapshot-test.lock

如果您还没有使用它,并且可以使用它(显然有些非UNIX系统不能),请使用sync_first方法。

我不使用rsnapshot,但我已经在rsync上[在perl]中]编写了自己的等效包装器,并且我进行delta备份,所以我遇到了类似的问题。

要解决创建"伪完整备份"的问题,基本思想是:

while 1
    rsnapshot remote_whatever/tmp
    if (rsnapshot_was_okay) then
        mv remote_whatever/tmp remote_whatever/monthly_whatever
        break
    endif
end

上述mv应该是原子的,即使在NFS上也是如此。

我刚刚在这里回答了一个类似的问题:https://serverfault.com/questions/741346/rsync-directory-so-all-changes-appear-atomically/741420#741420有更多详细信息

最新更新