我怎样才能让 Samba 立即关闭文件?

我怎样才能让 Samba 立即关闭文件?

自从我第一次购买 NAS 以来,我就一直遇到一个令人费解的文件消失问题,直到今天经过大量测试,我才知道到底发生了什么。我担心这个问题没有解决办法,但请至少拉把椅子坐下,听听我的悲惨经历。

首先,我运行的是 Windows 7 x64 和 QNAP TS-451,但我认为这两条信息都不相关——在适当的情况下,这应该发生在所有 NAS 和所有版本的 Windows 上。我的 NAS 文件系统是 ext4(带选项rw,usrjquota=aquota.user,jqfmt=vfsv0,user_xattr,data=ordered,nodelalloc,noacl),我通过 Samba(v4.0.21)网络驱动器访问 Windows 中的文件。

为了重现此问题,我创建了两个文件夹,分别名为 test1 和 test2,将 .exe 文件复制到 test1,快速剪切并粘贴文件到 test2,然后快速剪切并粘贴文件回 test1。当将文件粘贴回 test1 时,大多数情况下不会发生任何事情,文件只会保留在 test2 中。不幸的是,QNAP 无法使用这些说明重现我的问题(我猜他们做得不够快),所以他们把调查为什么会发生这种情况的责任完全留给了我。

似乎正在发生以下情况:我已经确定lsof,在 Windows 中打开文件夹时,会有一段短暂的时间,其中的文件未在 Windows 中打开,但在 NAS 上。我相信发生这种情况的原因是 Windows 打开文件以读取其图标,但 Samba 不会在 Windows 关闭文件时立即关闭文件。因此,当我尝试移动文件时,Windows 和 NAS 都允许这样做,但对该文件的引用仍保留在其原始位置,直到重新安装 NAS 文件系统(使用 确认stat <filename>);当我尝试将文件移回其原始位置时,什么也没有发生,因为在 NAS 上,它已经在那里了,而 Windows 只是在没有错误消息的情况下停滞不前。

当然,我很少想将文件移动到某个位置然后立即返回,但这个问题以其他方式表现出来——例如,尝试在文件在 NAS 上仍然打开的短暂时间内覆盖文件,不仅文件会在 Windows 中消失,而且在重新安装 NAS 文件系统之前,您无法再次写入该文件名。删除一个文件并尝试将另一个同名文件复制到该位置?同样的事情。最糟糕的是,这种行为完全破坏了 .par2 修复过程——QuickPar 修复了我的文件集,删除了原始的坏文件,尝试重命名新文件,然后,它们就消失了。

是否有任何文件系统选项、Samba 选项或其他常规方法可以一劳永逸地解决这个问题?事实上,它让我的 NAS 工作变成了一场噩梦。

相关内容