svnadmin转储后的SVN访问错误

我正在寻找一种方法来备份我们所有的SVN存储库,并遇到这种情况: http : //www.darcynorman.net/2006/04/05/automatically-backing-up-multiple-subversion-repositories/

因为我们的存储库是在一个客户端/项目目录结构中组织的,所以我把脚本改成了:

#!/bin/sh SVN_REPOSITORIES_ROOT_DIR="/var/svn/repos/" BACKUP_DIRECTORY="/home/hyperactive/public_html/svn/" for CLIENT in `ls -1 $SVN_REPOSITORIES_ROOT_DIR` do echo 'dumping client: ' $CLIENT mkdir $BACKUP_DIRECTORY/$CLIENT for REPOSITORY in `ls -1 $SVN_REPOSITORIES_ROOT_DIR/$CLIENT` do echo 'dumping repository: ' $REPOSITORY svnadmin dump $SVN_REPOSITORIES_ROOT_DIR$CLIENT/$REPOSITORY | gzip > $BACKUP_DIRECTORY$CLIENT/$REPOSITORY'.gz' done 

运行后(它成功完成了备份),我在每个要备份的存储库上出现以下错误:

 <m:human-readable errcode="2"> Could not open the requested SVN filesystem </m:human-readable> 

我看着Apache的错误日志,这是我发现:

 (20014)Internal error: Can't open file '/var/svn/repos/Test2/Test3.gz/format': No such file or directory, referer: http://10.4.2.254/svn/Test2 

我看到它的方式,不知怎的,备份脚本在repopath(Test2 / Test3 ** .gz **)的末尾添加了.gz 。 进一步cheking之后,我注意到在脚本中围绕.gz扩展名的单引号。

有什么想法吗 ?

好吧,我现在感觉非常尴尬…似乎一切都好,但是因为我有一个聪明的想法,将备份保存在public_html /目录结构与存储库完全相同,并有一个在Apache conf文件,不知何故.gz文件被视为存储库。

为了澄清,我有以下结构的备份:

 public_html/ svn/ CLIENT/ PROJECT.gz 

…和这个存储库的一个:

 /var/svn/repos/ CLIENT/ PROJECT/ 

在一个Apache conf文件中我有:

 <Location /svn> DAV svn [...] 

当浏览器导航到/ svn时,我遇到了指定的错误。 重命名或从public_html移动备份文件夹/解决了这个问题,让我感到很蠢。

如果您下载到/ var / svn / repos,那么列出的备份存档? /var/svn/repos/Test2/Test3.gz不应该像这样存在; 它只存在于/ home / hyperactive / public_html / svn

在脚本中 – 澄清:

知识库的布局如下:

在/ var / SVN /回购/ CLIENT / REPOSITORY_NAME? Test2是客户端,Test3是你的例子中的存储库? 目前尚不清楚。

删除这些文件夹应该解决这个问题(我build议在实际运行rm之前移动它们)

 for CLIENT in `ls -1 $SVN_REPOSITORIES_ROOT_DIR` do echo 'dumping client: ' $CLIENT mkdir $BACKUP_DIRECTORY/$CLIENT 

在哪里完成循环? 它没有被添加到问题 – 我假设它在文件的末尾。

添加单引号的'.gz'是为了确保.gz被添加到gzip文件中,而不是variables$ REPOSITORY的一部分

我给脚本自己运行 – 它运行良好。


老答案

你解压缩了备份吗?

该行svnadmin dump $SVN_REPOSITORIES_ROOT_DIR$CLIENT/$REPOSITORY | gzip > $BACKUP_DIRECTORY$CLIENT/$REPOSITORY'.gz' svnadmin dump $SVN_REPOSITORIES_ROOT_DIR$CLIENT/$REPOSITORY | gzip > $BACKUP_DIRECTORY$CLIENT/$REPOSITORY'.gz'转储Subversion版本库,然后将其压缩成一个较小的文件。 尝试运行unzip REPOSITORY.gz和您的文件夹结构将显示。