SVN dump 中断主因是 /tmp 空间不足,解决关键是显式指定大容量临时目录并设置 TMP 环境变量;需验证生效、添加磁盘检查、禁用压缩或改用 hotcopy,并清理残留 svn-XXX 临时目录。

SVN dump 过程中断,常因临时目录(如 /tmp)空间不足——尤其当仓库较大、压缩或转储时产生大量中间数据,而系统默认 /tmp 通常挂载在小容量分区上。解决核心是**避开默认临时路径,显式指定足够空间的临时目录,并确保环境变量生效**。
确认并切换 dump 使用的临时目录
Subversion 的 svnadmin dump 在执行过程中(尤其是启用压缩或处理大文件时)会依赖系统临时目录,但不直接提供 --tmpdir 参数。它实际受以下两个环境变量控制:
- TMP:优先级最高,SVN 会首先检查该变量
-
TMPDIR:次优先级,若
TMP未设置则 fallback 到此
操作步骤:
- 准备一个有充足空间的目录,例如:
/data/tmp-svn(确保属主可读写) - 执行 dump 前,临时设置环境变量:
TMP=/data/tmp-svn svnadmin dump /path/to/repo > repo.dump - 或更稳妥地写成脚本形式,避免遗漏:
export TMP="/data/tmp-svn"<br>svnadmin dump /path/to/repo > repo.dump
验证临时目录是否真正生效
仅设环境变量还不够,需确认 SVN 确实用了它。可做一次轻量测试:
- 在目标临时目录下先清空:
rm -rf /data/tmp-svn/* - 运行一个极小的 dump(如只导出前 10 个版本):
svnadmin dump /path/to/repo -r 1:10 > /dev/null - 立即检查:
ls -la /data/tmp-svn/—— 若出现类似svn-XXXXXX的临时子目录,说明已成功接管
补充防护措施
为防止未来再因空间问题中断,建议组合使用以下做法:
- 在 dump 脚本开头加入磁盘空间检查(类似 MySQL 备份脚本逻辑),例如:
df -P /data/tmp-svn | awk 'NR==2 {if ($5+0 > 90) {print "ERROR: /data/tmp-svn >90% full"; exit 1}}' - 禁用自动压缩(除非必要):
svnadmin dump --incremental不带-q或外部 gzip,减少内存与临时 IO 压力 - 对超大仓库,改用
svnadmin hotcopy替代 dump —— 它是文件系统级拷贝,不依赖临时目录,且更快更稳定
清理残留临时文件
若 dump 已中断,/data/tmp-svn 或原 /tmp 中可能遗留未清除的临时目录(如 svn-abc123)。这些不会自动删除,需手动清理:
- 查找 SVN 相关临时目录:
find /tmp /data/tmp-svn -maxdepth 1 -type d -name "svn-*" -mtime +1 - 确认无正在运行的 svn 进程后,安全删除:
rm -rf svn-* - 注意:不要直接
rm -rf /tmp/*,以免误删其他服务关键临时文件

















