svnadmin verify 是验证 svn 版本库底层数据完整性的核心命令,直接校验 db/revs/、db/revprops/ 等文件的结构与内容一致性,需停服执行,成功输出“verified revision x”,失败则提示 db_runrecovery 或校验不匹配。

svnadmin verify 是验证 SVN 版本库底层数据完整性的核心命令,不是“检查是否能连上”,而是直接读取 db/revs/、db/revprops/ 和 db/current 等文件,逐块校验修订版本的结构、元数据和内容一致性。定期执行它,能在数据损坏早期暴露问题(比如磁盘坏道、意外断电后未刷盘),避免等到提交失败或客户端报错才被动处理。
明确验证范围与触发时机
该命令只验证已提交的修订版本(即 HEAD 到 0 的所有 revs/ 和 revprops/ 文件),不检查未提交事务(transactions/)或工作副本。建议在以下场景后立即运行:
- 服务器经历非正常关机或磁盘 I/O 错误告警
- 批量导入/迁移操作完成
- 每月固定维护窗口(如每月第一个周末凌晨)
- 重大升级(如
svnadmin upgrade)前后
执行前必须确认三件事
- 服务已停用:确保
svnserve或 Apache 的mod_dav_svn已停止,无人正在提交或更新,否则可能因文件被占用而跳过部分校验 - 路径指向仓库根目录:命令格式为
svnadmin verify /path/to/repo,不能指向conf/、hooks/或db/子目录 - 使用与仓库格式兼容的 svnadmin 版本:若仓库是老格式(如
db/format内容为2或3),需用对应旧版svnadmin(如 1.6.x)执行;新版可能直接报 “Unknown FS format”
观察输出判断结果
成功时仅输出每版号(如 * Verified revision 0. … * Verified revision 9012.),无报错即表示全部通过。常见失败信号包括:
-
E160029: DB_RUNRECOVERY:Berkeley DB 数据库严重损坏,需svnadmin recover -
Checksum mismatch或Invalid revision file:某个.rev或.revprop文件内容损坏或截断 - 卡在某版本号不再前进:通常对应
revs/下该编号文件不可读(如二进制乱码、空文件)
自动化脚本示例(Linux)
可写入 crontab 实现定期巡检:
# 每月1日 3:00 执行验证,并记录结果 0 3 1 * * /usr/bin/svnadmin verify /var/svn/myproject >> /var/log/svn-verify.log 2>&1 && echo "$(date): verify OK" >> /var/log/svn-verify.log || echo "$(date): verify FAILED" >> /var/log/svn-verify.log
配合日志轮转,保留最近90天记录,便于回溯异常时间点。
验证通过≠绝对安全,需配套动作
即使 verify 成功,也建议每季度做一次 svnadmin dump 全量备份(尤其对关键项目),因为:
-
verify不检测逻辑错误(如误删分支、提交了敏感信息) - 它无法发现
authz权限配置错误或钩子脚本失效 - 若仓库使用 BDB 后端,长期运行仍存在隐性索引腐化风险,FSFS 格式更推荐
本质上,svnadmin verify 是版本库的“听诊器”,定期使用它,比等崩溃后再抢救成本低得多。











