2010-02-08 73 views
2

我想让rsnapshot备份Linux机器上的本地磁盘SVN存储库。我知道我不能将它从文件系统备份下来,所以在每个快照之前,我正在使用'svnadmin hotcopy'进行复制。但是,每次我执行hotcopy时,生成的文件都有当前的时间戳,而不是与原始文件相同的时间戳。这意味着我无法执行rsnapshot提供的写入时复制式磁盘空间保存功能。如何在每次时间戳不同时使用rsnapshot备份SVN存储库?

我想到的一种解决方案是让脚本查看hotcopy($ DEST)中的所有文件,并根据文件$ SOURCE/x设置每个文件x的时间戳。我不知道是否有办法让rsync在Linux上执行此操作(我知道您可以在Windows上的Robocopy中执行该操作)但是,我确定可以使用find和touch来完成此操作。

建议如何做到这一点,或其他解决方案,欢迎。我宁愿不使用增量式svn转储,因为我希望当时每个时间点快照都是存储库的完整副本。

回答

0

原来上的所有文件改变时间戳并没有那么困难:

cd /var/local/backup/svn 
find . -exec touch -r /data/src/svn/\{\} \{\} \; 

这将确保存在于热复制备份的文件的时间戳具有相同的时间戳他们的父母,这意味着它们只应在更新原件时更新。

+1

这听起来很危险。如果有人在执行'svnadmin hotcopy'和执行'touch'之间对存储库进行了更改,那么这些文件的时间戳将无法准确地表示其内容。因此,在未来的备份中,您可能无法复制应该复制的文件。 – 2010-02-08 23:55:54

+0

由于我们每4小时进行一次滚动拷贝,因此在交通量非常低的存储库中,我认为这不是主要问题;但我同意你的看法,这是一个混乱,能够在hotcopy期间正确设置时间戳是一个更好的解决方案。 – crb 2010-02-09 09:58:39