技术答疑 · 实用指南
tar提示“读取时文件改变”?先核对路径再隐藏警告
找出准确路径、保留原始状态,区分目录变化与应用数据变化。能读取归档或隐藏警告,不等于备份可以还原。

GNU tar的“file changed as we read it”需要逐路径检查,不能直接断定整个归档无用或完全无害。创建、追加或更新时,退出码1表示文件发生变化,归档不是该文件集的精确副本。改变备份任务处理方式之前,先保留这些证据。
1. 记录路径,分清输入与输出
保留准确命令、GNU tar版本、工作目录、源根目录、排除规则、归档目的地、时间及完整错误输出。tar返回后立即获取它的退出状态;后续命令或管道的最后一个进程可能掩盖它。也保留压缩器与I/O失败。警告指向文件还是目录“.”,对应的后续问题不同。
将归档目的地与输入树对照。如果输出建在树内,受控重跑时移到独立目的地,并核对该包含的输入仍在。即使输出文件被排除,创建它仍可能改变父目录。不要仅为消除警告,把已审文件集换成shell通配符;这可能改变隐藏文件的选择。
2. 区分数据变化和文件系统行为
询问数据负责人该路径包含可丢弃缓存、活动日志、静态资源,还是关键应用状态。没有允许丢弃的政策,不要排除所有日志、锁文件或名字像临时文件的项目。警告指向目录时,检查目录活动及文件系统或容器层,不要假设全部子文件都改变。若认为稳定的来源仍持续报错,保留版本和最小复现。
fuse-overlayfs原问题384说明简单诊断有边界:报告者在排除子项时仍让根目录产生警告,之后缩减成一段改变所见目录时间戳的小程序。取回的记录中该问题仍未关闭。这个历史案例支持检查文件系统层,不证明当前容器原因相同,也没有提供通用修复。
3. 取得一致来源后再接受重跑
对静态资源安排安静、已审的暂存来源,tar读取期间不要更新。运行中的数据库应遵循自己的备份文档,不能假设复制目录就够。PostgreSQL当前文件备份指南要求普通复制时关停服务器,或使用正确一致且包含所需WAL的快照。跨卷快照需协调;仅禁止连接或反复实时复制不等价。
从获准的来源创建不同名称的归档,保留重跑输出和状态。按所需清单检查成员,包括隐藏文件和预期排除项。适用时与稳定来源比较,并在隔离位置还原代表性内容。列出文件不能证明应用恢复;有状态数据还要执行应用规定的还原检查。替代品通过要求之前保留原归档。
4. 把隐藏警告作为单独策略
GNU tar把--warning=no-file-changed定义为消息控制;--ignore-failed-read改变读取失败对完成状态的影响,范围比隐藏单条消息更广。二者都不会让变化的数据一致或补回遗漏。检查已安装版本文档和实际状态,不要直接照搬旧Windows、容器或tar版本的变通方法。
只有准确路径及允许的变化已经解释、所需内容存在可用、其他失败仍可见时才接受警告。不要用|| true把所有非零改成功、丢弃全部错误输出,或认为包装脚本的零等于可还原。数据关键、原因不明或还原失败时,保留未解决状态,升级调查来源或应用备份方法。
