svnadmin dump 后 SVN 访问错误

svnadmin dump 后 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

在我看来,备份脚本以某种方式添加了.gz在 repo 路径的末尾 ([...]Test2/Test3**.gz**)。进一步检查后,我注意到脚本中 .gz 扩展名周围有单引号。

有什么想法吗 ?

答案1

好的,我现在感到非常尴尬......似乎一切都还好,但是因为我有一个绝妙的想法,将备份保存在 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/ 移动备份文件夹解决了问题,但让我感到很愚蠢。

答案2

如果您进入 /var/svn/repos,备份档案是否列在那里?/var/svn/repos/Test2/Test3.gz 不应该存在;它只存在于 /home/hyperactive/public_html/svn

答案3

在脚本中-澄清:

存储库布局如下:

/var/svn/repos/CLIENT/REPOSITORY_NAME?您的示例中,Test2 是客户端,Test3 是存储库?不清楚。

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

for CLIENT in `ls -1 $SVN_REPOSITORIES_ROOT_DIR`
do

 echo 'dumping client: ' $CLIENT
 mkdir $BACKUP_DIRECTORY/$CLIENT

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

添加带有单引号的 '.gz' 以确保 .gz 被添加到 gzip 文件中,而不是变量 $REPOSITORY 的一部分

我自己运行了这个脚本 - 而且它运行良好。


旧答案

您是否已解压备份?

该行svnadmin dump $SVN_REPOSITORIES_ROOT_DIR$CLIENT/$REPOSITORY | gzip > $BACKUP_DIRECTORY$CLIENT/$REPOSITORY'.gz'转储 subversion 存储库,然后将其压缩为一个较小的文件。尝试运行unzip REPOSITORY.gz,您的文件夹结构就会显示出来。

相关内容