我正在寻找一种方法来备份我们所有的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和您的文件夹结构将显示。