【解决】挂载NFS服务时,不同共享客户端间的数据不同步
2024-09-03 14:13:30
问题现象
当您用台 ECS 挂载同一个 NFS 文件系统,在 ECS-A 上 append 写文件,在 ECS-B 用 tail -f 观察文件内容的变化。在 ECS-A 写完之后,在 ECS-B 看到文件内容变化会有 10-30 秒的延时。然而相同的场景下,如果直接在 ECS-B 上打开文件(比如 vi )却是立即可以看到更新的内容的。
原因
该现象与 mount
的选项以及 tail -f
实现相关。
用户使用的mount命令为:mount -t nfs4 /mnt/
对于在 ECS-B 上以这一方式 NFS mount 的文件系统,默认情况下 kernel 对文件和目录的属性维护了一份metadata 缓存,文件和目录属性(包括许可权、大小、和时间戳记)缓存的目的是减少 NFSPROC_GETATTR 远程过程调用(RPC)的需求。
tail -f 的实现是 sleep + fstat 来观察文件属性(主要是文件大小)的变化,然后读入文件并输出。可见,tail -f 是否能实时输出文件内容主要取决于 fstat 的结果,由于 metadata cache 的存在,fstat 轮询到的并不是实时的文件属性。因此,即使在 NFS 服务器端文件已经更新了,但 tail -f 却没法知道文件已经改动了,于是输出就会出现延时。
解决方法
使用 mount 的 noac 选项可以 disable 文件和目录属性的缓存。
mount -t nfs4 -o noac /mnt/
最新文章
- 已解决:Strict Standards: Only variables should be passed by reference in
- 七个结构模式之桥接模式(Bridge Pattern)
- Spring4学习笔记-AOP
- java中的日期转换
- sqlserver数据库触发器和存储过程案例学习
- Chipscope 仿真VmodCAM IIC程序
- git push冲突解决
- JS 添加千分位,测试可以使用
- Java源代码分析与生成
- Python获取Origin官网视频
- 好的组件,无须太复杂 – KISSY Slide 组件简介
- S3C6410嵌入式应用平台构建(三)
- java常用内存设置
- Java面试系列之HashMap大扫盲汇总
- 每天学点SpringCloud(九):SpringCloud最常用配置详解
- Python date,datetime,time等相关操作总结
- Codeforces1037G A Game on Strings 【SG函数】【区间DP】
- asp.net mvc url应用
- Java 程序员必须收藏的资源大全
- [19/04/17-星期三] Java的动态性_反射(Reflection)机制
热门文章
- Android apps for “armeabi-v7a” and “x86” architecture: SoC vs. Processor vs. ABI
- (转)MyBatis传入多个参数的问题
- spring cloud 服务容错保护 - Hystrix
- 【数据结构与算法】单链表操作(C++)
- Linux时间日期类,压缩和解压类
- PowerBuilder学习笔记之14用户自定义对象
- pandas 学习 第十一篇:处理缺失值
- lightGBM gpu环境配置
- Oracle For Linux 恢复日记 霆智X8III
- protoc文件生成cs文件