繁体   English   中英

从linux samba共享中读取文件并进行缓存

[英]Reading file from linux samba share and caching

有2种类似的设置:

  1. Ubuntu 16.04服务器,其中有一个共享文件夹\\\\ linux \\ data和文件test.txt(Samba 4.3.9-Ubuntu)
  2. Windows Server 2012服务器,其中具有共享文件夹\\\\ win \\ data和文件test.txt

还有另一台PC(Win 7)和一个C#测试程序,它以上述循环方式从上述任一设置中读取文件内容:

  1. 读取文件,记住数据大小
  2. 等待500毫秒
  3. 再次读取文件(如果大小更改)-从文件末尾打印出大小以及少量内容,更新存储的大小
  4. 转到2。

现在,当我使用设置#1(共享)运行测试时-如果我在服务器上打开文件,则修改内容并保存-我可以立即在测试程序中看到反应-文件修改后的第一次循环迭代为我带来了新文件大小和新数据。

但是,当我使用设置#2(ubuntu共享)运行相同的测试时-在一段时间后,我看不到测试程序中修改后的大小或内容(该时间取决于我使用的读取文件内容的方法而有所不同)。 FileStream大约是10秒,而File.ReadAllBytes大约是30秒到10分钟。

带有设置2的有趣注释-如果我在Ubuntu中修改文件,然后转到测试PC(测试程序现在正在循环,试图获取更新的文件内容)并使用记事本打开共享文件-测试程序立即获得更新的内容。

在我看来,这就像是在测试机上进行客户端缓存。 我唯一能想到的是Win Server 2012使用SMB3和Ubuntu-SMB2_10,这以某种方式迫使客户端(测试读取器部分)以不同的方式运行。

我不是Linux专家,据我了解,无法在Ubuntu中启用SMB3协议(它可以作为SMB3客户端,但不能作为服务器)

因此,问题是如何强制客户端(Win 7)在不使用缓存的情况下进行读取,而不管服务器的类型和协议版本如何,或者,如果不可能的话-如何使用记事本模仿C#代码打开文件,这显然给了它一个踢并强迫所有读者获取最新内容。

找出在Linux samba配置(smb.conf)中禁用机会锁(oplocks)的方法。

禁用OpLocks后,客户端计算机上的测试程序无需缓存即可获取更新的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM