技术 · 实用指南
tar 报“Unexpected EOF”?重试解压前先证明归档完整性
保留原字节,分开验证压缩层与 tar 结构,对照来源的大小和校验值,再决定替换或隔离抢救。

“Unexpected EOF”表示读取器在当前结构或成员结束前就耗尽了收到的字节。重复解压不能制造缺失的尾部。
保留精确文件,识别压缩层和归档层,对照可信来源的大小与校验值,再替换或只在副本上抢救。能解出部分文件不代表归档完整。
再次尝试前隔离精确字节
把可疑归档复制或重命名到证据路径,记录字节数、校验值、来源或生产方、获取命令、时间和完整错误。不要再次覆盖真实目标。
若来自管道,保存两端命令和退出状态;没有 pipefail 等状态记录时,下游成功可能掩盖上游断线。
按证据识别每一层
检查文件类型和开头字节,再单独测试声称的压缩包装。只有实际为 gzip 时才用 gzip -t。
包装层通过后,在副本上或通过正确解压器运行 tar -tf,区分损坏的 gzip 成员与内部 tar 过早结束。
向生产方证明完整性
从可信来源或生产端取得预期字节数和校验值,二者都对照后再把二次下载当作修复。
流式复制要保存发送端和接收端状态、两端大小与哈希;命令退出 0 的证据弱于字节一致。
区分结束标记与缺失负载
tar 使用 512 字节记录,通常以零块结束。缺少惯例结束块与在头部或成员仍声明更多数据时提前 EOF 不同。
--ignore-zeros 只让 tar 继续越过零块,不能补齐缺失内容。若在成员中停止,后续都视为缺失,已输出文件也只是暂存。
替换或重新获取而不覆盖证据
重新下载或传输到新的临时文件,先验证正确层、预期大小和可信校验值,再原子替换可疑归档。
若生产方是活动文件系统,应尽量冻结或做快照;变化中的来源即使传输完整也可能逻辑不一致。
只在副本上抢救并定义退出条件
来源已不存在时,只在隔离目录的副本上工作。先列可恢复成员,只解到新目录,并用独立清单或来源记录逐个验证。
仅当替代文件通过压缩与 tar 测试、大小或校验值与来源一致且原消费流程成功时才完成。抢救结果必须标记不完整。
