Subversion的WebDAV 模式就是Subversion和Apache2集成后的运行模式,Debian下这一模式的实现可以参考
或者
只需注意这两个文档的最后添加用户的地方都存在一点小问题,添加第二个用户的时候不需要有参数-c了,而且在Debian环境下,其实没有htpasswd2而只有htpasswd这个命令。
我们假定Subversion的WebDAV 在Debian下已经配置成功,访问地址是实际库采用FSFS数据存储结构,放置在/var/svnlib下。
我们要动态备份/var/svnlib到/back/svnlib_bak,/back是不同于/var的独立磁盘分区,这样才有更高的安全度。
在Debian下有subversion的备份工具,安装subversion时是不自动安装的,需要单独安装,安装命令
#apt-get update
#apt-get install subversion-tools
|
这样在系统中就有了svn-fast-backup,svn-backup-dumps ,svn-hot-backup 等命令,放置在/usr/bin下面了。
我们的动态备份就是在每次提交后自动的进行增量备份,这样可以保障在/var/svnlib出故障后,可以迅速的通过拷贝/back/svnlib_bak下的数据重建版本库,甚至可以直接在apache下通过设置让/back/svnlib_bak作为临时版本库。
我们将涉及subversion的钩子脚本功能(相关内容参考)
按要求在/var/svnlib/hooks/下创建了post-commit文件,其内容如下:
#!/bin/sh
# 增量备份本版本库到指定目录,在目标目录保存本版本库的最新16个备份
# (svn-fast-backup -k 16)中的-k 16来实现,你可以设置你需要的数量
# 需要系统安装subversion-tools工具包,将使用其中的svn-fast-backup
# 工具。
# 编写: xdsnet
# 日期:2007.09.14
# 本文件应该有运行权限
# 定义备份源和目标,需要保证文件权限,如果是通过http的WebDav访问,
# 权限为www-data
FORBACK=$1 #备份版本库路径
BACKBASE='/back/svnlib_bak/'
BACKEND='_bak'
TOBACK=${BACKBASE}`basename ${FORBACK}`${BACKEND} #备份位置
if [ -d ${TOBACK} ];then
/usr/bin/svn-fast-backup -k 16 -q ${FORBACK} ${TOBACK}
else
mkdir -p ${TOBACK}&&/usr/bin/svn-fast-backup -k 16 -q ${FORBACK} ${TOBACK}
# 目录不存在则创建目录成功后备份
fi
|
修改这个文件的所有者为www-data,并添加运行权限
#chown www-data.www-data /var/svnlib/hooks/post-commit
#chmod +x /var/svnlib/hooks/post-commit
|
保证/back目录www-data是可写的或者预先建立BACKBASE='/back/svnlib_bak并使之允许www-data是可写的。
这样所有的配置就完成了,在下次有版本提交的时候,程序会自动的在/back/svnlib_bak下建立一个名为
“svnlib-版本号”的目录,该目录是最新的/var/svnlib的一个快照。而且在/back/svnlib_bak下最多有16个(这是程序脚本中定义的,你可以设置)诸如“svnlib-版本号”的目录,它们是版本号最高的16个。
-------------------------------------------
可能有人要问为什么这叫动态备份,如果版本库很大是不是很浪费空间?
其实不用怕,因为svn-fast-backup会自动搜索备份目标下的相同文件,它们其实只保存了一份,其它都是对应的相当于硬链接的文件,不额外增加
太多磁盘空间占用,这样实际上每个版本备份仅仅是增加了必须的,因版本改变产生的变化(包括文件的,也包括操作的历史记录等)。
参考:
阅读(2177) | 评论(0) | 转发(0) |