You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NFS v3驱动器复制文件时保留ctime、mtime和atime

解决NFS v3服务器文件复制后时间戳不保留的问题

1. 修正cp命令的参数使用

默认cp不会保留源文件的时间戳,必须显式指定参数触发时间戳同步:

  • 使用cp -p ./i686-linux-gnu-ar /mnt/nfs:-p参数会保留文件的修改时间(mtime)、访问时间(atime)及权限属性
  • 若需完整保留文件属性(包括链接、递归结构等),用cp -a ./i686-linux-gnu-ar /mnt/nfs:-a等价于-dpR,是归档复制的标准参数

如果不指定这类参数,客户端不会向NFS服务器发送带源文件时间戳的SETATTR请求,服务器自然无法获取"Feb 20 2021"这类目标时间值。

2. 确认NFS服务器的SETATTR处理逻辑

若已使用cp -p但问题仍存在,需检查服务器端的SETATTR实现:

  • 确保正确解析NFS v3 SETATTR请求中的mtime字段(该字段包含源文件的修改时间戳)
  • 注意:ctime是文件系统自动维护的属性,它记录文件属性最后变更的时间,当通过SETATTR修改mtime时,ctime会自动更新为当前操作时间,这是POSIX标准规定的行为,无法强制保留源文件的ctime

3. 检查客户端NFS挂载选项

客户端挂载NFS时的部分选项会影响时间戳处理:

  • 避免使用noatime/nodiratime这类忽略时间戳更新的选项(主要影响atime,对mtime影响有限,但需确保挂载配置无冲突)
  • 确认挂载的是NFS v3:执行mount | grep nfs,查看输出是否包含nfsvers=3

4. 调试验证步骤

  • 客户端执行cp -p后,用stat命令对比源文件与NFS文件的时间戳:
    stat ./i686-linux-gnu-ar
    stat /mnt/nfs/i686-linux-gnu-ar
    
    重点核对Modify字段是否一致
  • 服务器端用tcpdump port 2049抓包,查看NFS协议的SETATTR请求,确认是否携带源文件的mtime时间戳

内容的提问来源于stack exchange,提问作者DotNetStar A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:45:42