我正在尝试提交到 SVN 服务器。在服务器上,Subversion 存储库已挂载到 NFS。提交时,我收到以下错误消息:
svn: Can't get exclusive lock on file '/svn/repo/db/transactions/7802-2.txn/rev-lock': No locks available
这曾经是可行的,并且没有任何软件升级/更改。但是 NFS 服务器之前确实崩溃过,所以它可能已“损坏”(如果这在这里适用的话)
答案1
这里有几种可能性:
- 执行 SVN 更新的用户帐户可能没有存储库目录的更新权限
- 存储存储库的 NFS 文件系统可能已满
- 锁守护进程(lockd)可能没有在 NFS 服务器上运行。
更新:更新问题后,我怀疑是 #3。确保 lockd 设置为在 NFS 服务器重新启动时启动。
答案2
确保您的 NFS 服务器支持锁;您可能需要在 NFS 服务器上启用其他进程来实现此目的;请参阅rpc.lockd(8)和rpc.statd(8)。
此外,如果您的 NFS 服务器最近重新启动,则 NFS 挂载可能会失效,甚至部分失效。请尝试卸载并重新挂载 NFS 挂载。
编辑:根据您的其他问题,看起来你的 NFS 服务器从崩溃中恢复后 lockd 没有启动。
答案3
其中提到了许多替代方案谷歌搜索你上面提到的术语。
提到的几个选项是:磁盘已满,权限问题,“挂起”或“卡住”的 svnserve 进程,以及挂起的事务......您可能需要尝试多个这些不同的问题才能查看您的情况到底是什么问题。
听起来你正在使用 bsddb SVN 后端?你可能想尝试将你的存储库迁移到 fsfs 后端(几年来一直是默认后端)。根据我的经验以及我认识的许多其他人的经验,它比 bsddb 更可靠。不过,你可能想研究它如何与 NFS 交互——我还没有在 NFS 上使用过它。
您可能要考虑的另一个选择是不再使用 NFS 上的 SVN,而是在本地存储 SVN 存储库的服务器上通过 SSH 运行它。这就是我们用 fsfs 后端完成所有 SVN 工作的方式,我不记得上次遇到 SVN 存储库问题是什么时候了。
肖恩
答案4
我在这里也遇到了类似的问题,我的问题是 vagrant 的 NFS 挂载造成的。根据上面 Tel Janin 所说的,我sudo service rpcbind restart
在主机操作系统上重新启动了 rpcbind。这挂起了我的虚拟机。我重新启动了虚拟机,结果出现了一个神秘的 NFS 错误failed to start with result 'dependency'
。不过它确实起作用了,我现在很开心。