避免 Windows 文件共享中出现“文件锁定以供读取”问题

避免 Windows 文件共享中出现“文件锁定以供读取”问题

我们的构建环境将最新版本发布到预定义位置的 Windows 文件共享上。当远程用户打开并维护该只读文件共享上的文件夹和文件时,我们会遇到文件锁定问题,这会导致我们的构建中断。有什么技术可以帮我们解决这个问题吗?

我想过

  • DFS-R
  • 分支缓存
  • 仅启用 WebDav 并禁用 SMB(可以吗?)

但到目前为止,这些候选解决方案似乎都不太合适。

为了澄清起见,假设“最新构建”的路径是 \server\share\path\Latest,并且只有构建服务器具有写访问权限。有人在“最新”文件夹中的某个位置打开了命令提示符或 msi 文件。现在构建服务器已完成,需要清除文件夹中的所有内容,然后再复制所有新构建的部分。没办法。

如果 SMB 共享具有符号链接支持或某些类似 NTFS 的交易概念或能够重命名类似 HFS 的“开放”目录 - 但没有。

而将所有二进制文件放入 Sharepoint Document 文件夹(如其他地方所建议的那样)似乎也是一个糟糕的主意,因为数据量太大。我宁愿选择仅支持 WebDAV 的共享,它像文件系统一样挂载,但行为却像网站。

答案1

您的意思是他们实际上在编辑这些文件,或者这是一种实际上没有人使用这些文件但文件上有文件锁的情况?

如果他们确实在使用这些文件(或者在他们出去吃甜甜圈时在编辑器中打开了文件),那么您可能不希望以任何方式打开这些文件,除非使用以只读副本打开它们的应用程序,否则您可能会损坏文件。您说文件共享是只读的。那么他们做了什么不允许多次以只读方式打开文件?您也没有提到您的构建过程是什么,所以也许这是特定于该工作流程的?

最好的解决方案可能是尝试将构建环境与开发环境隔离。制定一个开发流程,从存储库中签出所有源,并在专用服务器和专用共享上构建它们,远离开发人员接触的任何内容。这样,您就不必担心开发人员更改某些内容或破坏您的构建流程,构建流程也不必担心在工作过程中发生任何更改。

答案2

如果您使用 Linux 文件服务器,smb.conf 中的这 3 个选项可能会有用。

strict locking = no
blocking locks = no

# from man page: Be careful about disabling locking either globally or in a specific service, as lack of locking may result in data corruption. You should never need to set this parameter.
locking = no

但是要使用它们,您需要为没有上述内容的可写客户端提供单独的共享,我认为这意味着警告不适用。

相关内容