技術 · 實用指南
tar 顯示「Unexpected EOF」?重試解壓前先證明封存檔完整
保留原始位元組,分開驗證壓縮層與 tar 結構,對照來源大小與雜湊,再決定替換或隔離救援。

「Unexpected EOF」表示讀取器在目前結構或成員完成前已耗盡收到的位元組。重複解壓無法製造遺失的尾端。
保留精確檔案,辨識壓縮與封存層,對照可信來源的大小與雜湊,再替換或只在副本救援。能解出部分檔案不代表完整。
再次嘗試前隔離精確位元組
將可疑封存檔複製或改名到證據路徑,記錄位元組數、雜湊、來源、取得命令、時間與完整錯誤。不要再覆蓋真正目的地。
若來自管線,保存兩端命令與退出狀態;缺少 pipefail 等記錄時,下游成功可能掩蓋上游中斷。
依證據辨識每一層
檢查檔案類型與開頭位元組,再分開測試聲稱的壓縮包裝。只有實際是 gzip 才用 gzip -t。
包裝層通過後,在副本或正確解壓器上執行 tar -tf,區分損壞 gzip 與內部 tar 過早結束。
向產生端證明完整性
從可信來源或產生端取得預期位元組數與雜湊,兩者對照後再把第二次下載視為修復。
串流複製要保存傳送與接收狀態、兩端大小和雜湊;退出碼 0 弱於位元組一致。
區分結束標記與遺失內容
tar 使用 512 位元組記錄,通常以零區塊結束。缺少慣例結尾與成員仍宣告更多資料時提前 EOF 不同。
--ignore-zeros 只能越過零區塊,不能補回遺失內容。若在成員中停止,後續視為遺失,已輸出檔案也只是暫存。
不覆蓋證據地替換或重取
重新下載或傳輸到新暫存檔,驗證正確層、預期大小與可信雜湊後才原子替換。
若來源是活動檔案系統,盡量凍結或建立快照;變動來源即使傳輸完整也可能邏輯不一致。
只在副本救援並定義退出條件
來源已不存在時,只在隔離目錄的副本處理。先列出可救成員,只解到新目錄,再依獨立清單驗證。
只有替代檔通過壓縮與 tar 測試、大小或雜湊對齊來源,且原流程成功才算完成;救援結果標記不完整。
