我有一台在 Vmware ESXi 上运行的 Windows 2008 R2 X64 服务器。最初它在 Hyper-V 上运行,但后来我将 VHD 转换为 VMDK 并迁移到 ESXi。我还安装了 VMware Tools。此服务器是我们的 TeamCity 持续集成服务器,执行我公司开发的软件包的夜间构建。自迁移以来,有时构建过程应删除的某些文件会因“该文件正在被另一个进程使用”而无法删除。我们尝试使用 CMD del 命令删除文件。有时它有效,有时无效。我启动了进程监视器,将发生故障的目录的路径作为 PATH 过滤器(PATH 包含 C:\work )。我看到大量 vmtoolsd.exe Createfile、FileSystemControl 和 CloseFile 操作快速连续地重复发生。有人听说过 Vmware 工具导致 Windows 客户机上的文件系统锁定吗?
当它真正发生时我还无法用 procmon 捕获它,但我计划尝试一下。
此外,由于空间不足,该目录 C:\work 被重新创建,方法是将其重命名为 C:\work-old,添加第二个虚拟磁盘 E:\,并将磁盘安装到目录 C:\work ,然后将 C:\work-old 的内容复制到新安装的 C:\work。我看到 Vmware Tools 不断在 C:\work 上执行 FSCTL_Get_Reparse_Point。
更新: 我昨晚禁用了 VMware tools 服务,但问题仍然出现。我认为 C:\work 目录(实际上是作为目录安装到 C:\work 的 E: 驱动器的共享)正在被 2 个远程主机同时访问,这可能导致第一个主机锁定该目录。在我将 E: 安装到工作目录之前,这种情况从未发生过,是否存在文件锁定和作为目录安装的卷的已知问题?
答案1
事实证明,问题不是由 VMware Tools 引起的。更可能是 Windows Application Experience 服务导致了此问题,但我不确定。我最终通过添加虚拟磁盘并创建新共享,然后指向构建以查看此共享解决了该问题。如果构建步骤为该共享留下一个打开的句柄,则不会影响不再引用该共享的后续步骤(以前所有操作都是从同一个共享完成的,因此如果有一个打开的句柄,文件操作将失败)。