如何刷新远程文件内容

如何刷新远程文件内容

我有一个 Ubuntu 14.04 LTS 开发系统,它通过 Samba 共享一些文件夹(samba 2:4.3.9+dfsg amd64)。我在不同的 Ubuntu 系统上安装了这样的共享 ( mount -t cifs -o uid=$UID,gid=$(id -g),domain=DEVHOST,username=guest //DEVHOST/share /mnt/share)。大部分情况下一切都很好。但有时,当我在开发系统上编辑文件(通过 Vim)时,更改不会反映在客户端上,即客户端在相当长的一段时间内看到旧文件内容。

ll显示文件修改日期尚未更新。但是,会显示同一目录中新创建的文件。但现有文件的文件内容仍然没有更新。通过,我在文件末尾less看到了额外的空字节 ( ),其数量与编辑后文件大小增加的数量一样多。^@

我想我看到了一个陈旧的缓存。如何指示客户端从远程 Samba 服务器重新加载文件?在桌面上,我会尝试通过F5Nautilus 进行刷新,但我是通过 SSH 登录到客户端的。

注意:这不是一个永久性的问题;客户端重新启动后,一切再次正常工作(至少在一段时间内)。我只是想知道是否有比强制卸载/重新安装,甚至重新启动客户端更好的修复方法。欢迎任何可能是根本原因的提示。

答案1

欢迎任何可能是根本原因的提示。

我曾经遇到过类似的问题。事实证明,其中一位主机没有准确的时钟。在所有主机上启用ntp可以纠正该问题。

如何指示客户端从远程 Samba 服务器重新加载文件?

您的文件是否通过运行重新加载和更新env stat $FILE?我怀疑不是。

是否通过释放文件上的任何机会锁 (oplock) 在客户端上更新文件?
man mount.cifs

The CIFS protocol mandates (in effect) that the client should not
cache file data unless it holds an opportunistic lock (aka oplock) 
or a lease. Both of these entities allow the client to guarantee         
certain types of exclusive access to a file so that it can access its   
contents without needing to continually interact with the server.

我发现我的 windows7 盒子和 Google Drive 之间存在同步问题,直到我退出 gvim 副本(仅关闭缓冲区并没有解锁文件并更新 Google Drive)。如果您在 DEVHOST 上使用 vim 编辑文件然后关闭 vim,问题是否仍然存在于客户端?

正如@StephenHarris 的评论中提到的,编辑mount上面的命令并尝试添加-o cache=none

man mount.cifs

cache=
    Cache mode. See the section below on CACHE COHERENCY for details. 
    Allowed values are:
    ·   none: do not cache file data at all
    ·   strict: follow the CIFS/SMB2 protocol strictly
    ·   loose: allow loose caching semantics
    The default in kernels prior to 3.7 was "loose". 
    As of kernel 3.7 the default is "strict".

相关内容