将Rsnapshot恢复到同一个驱动器

时间:2015-11-26 10:38:03

标签: rsync rsnapshot

有时,在使用Rsnapshot的大型rsync上,我们正在同步的NFS挂载将会丢失。

然后当你跑:

rnsapshot monthly

要恢复它,它的行为就好像这是一个全新的,将monthly.0转为monthly.1等等。

如果某些内容被中断,有没有办法使用rsync恢复rsnapshot monthly?那不会开始全新的备份吗?

2 个答案:

答案 0 :(得分:1)

答案是不是真的,而是。 rsnapshot作为批处理作业运行 - 通常由cron作业触发。除了备份本身之外,它不会在运行之间保持任何状态。如果您的NFS挂载在备份中间消失,过一会儿您将遇到某种IO错误,并且rsnapshot将放弃并因错误而死亡。备份将失败。下次在失败后运行它,它将像从头开始一样启动备份。

但是,如果您使用sync_first配置选项, link_dest选项,则rsnapshot可以更好地进行恢复。它会将已经传输的文件保留在原位并且不必再次传输它们,但是它必须再次检查源和目标是否以通常的rsync方式相同。 man page提供了一些详细信息。

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方法。

答案 1 :(得分:0)

我不使用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有更多细节