为何tar归档时不更新零字节文件的atime?如何解决该问题?
解决tar归档时空文件atime不更新的问题
方案1:归档前后手动更新空文件的访问时间
这是最直接的解决方式,用touch命令强制刷新空文件的atime。你可以在执行tar归档前,先定位目标目录下所有零字节文件并更新它们的访问时间:
# 替换为你的目标目录路径 find /your/target/dir -type f -size 0 -exec touch {} \; # 接着执行归档命令 tar -cvzf archive.tar.gz /your/target/dir
如果担心归档过程中遗漏,也可以在归档完成后再执行一次上述find+touch命令。
方案2:通过读取操作触发atime更新
tar处理空文件时可能不会触发实际读取动作,导致atime不更新。你可以先通过cat读取所有空文件(即使没有内容),强制触发atime更新:
# 读取所有空文件并丢弃输出 find /your/target/dir -type f -size 0 -exec cat {} \; > /dev/null # 再执行归档 tar -cvzf archive.tar.gz /your/target/dir
这个操作会让系统认为文件被访问过,从而更新atime。
备选方案:调整系统atime策略(需管理员权限)
多数现代Linux默认使用relatime策略,只有当atime早于mtime/ctime时才会更新。如果你有系统权限,可以将目标分区的挂载选项改为strictatime,这样任何文件访问(包括打开空文件)都会更新atime。但此改动会影响分区性能,非必要不推荐:
- 编辑
/etc/fstab中对应分区的挂载行,添加strictatime选项 - 重新挂载分区生效:
mount -o remount,strictatime /your/mount/point
内容的提问来源于stack exchange,提问作者Talles Brito
相关产品推荐
相关产品推荐

