Watch at Ease看見世界,讀懂生活。

技術 · 實用指南

tar 顯示「Unexpected EOF」?重試解壓前先證明封存檔完整

保留原始位元組,分開驗證壓縮層與 tar 結構,對照來源大小與雜湊,再決定替換或隔離救援。

原創插畫:.tar、.tar.gz 或 .tgz 副檔名只是提示,不能證明實際位元組或過濾器。
原創插畫:gzip 尾端含 CRC32 與 ISIZE;它驗證 gzip 成員,不等於逐一驗證 tar 成員。 Watch at Ease

「Unexpected EOF」表示讀取器在目前結構或成員完成前已耗盡收到的位元組。重複解壓無法製造遺失的尾端。

保留精確檔案,辨識壓縮與封存層,對照可信來源的大小與雜湊,再替換或只在副本救援。能解出部分檔案不代表完整。

再次嘗試前隔離精確位元組

將可疑封存檔複製或改名到證據路徑,記錄位元組數、雜湊、來源、取得命令、時間與完整錯誤。不要再覆蓋真正目的地。

若來自管線,保存兩端命令與退出狀態;缺少 pipefail 等記錄時,下游成功可能掩蓋上游中斷。

依證據辨識每一層

檢查檔案類型與開頭位元組,再分開測試聲稱的壓縮包裝。只有實際是 gzip 才用 gzip -t。

包裝層通過後,在副本或正確解壓器上執行 tar -tf,區分損壞 gzip 與內部 tar 過早結束。

向產生端證明完整性

從可信來源或產生端取得預期位元組數與雜湊,兩者對照後再把第二次下載視為修復。

串流複製要保存傳送與接收狀態、兩端大小和雜湊;退出碼 0 弱於位元組一致。

區分結束標記與遺失內容

tar 使用 512 位元組記錄,通常以零區塊結束。缺少慣例結尾與成員仍宣告更多資料時提前 EOF 不同。

--ignore-zeros 只能越過零區塊,不能補回遺失內容。若在成員中停止,後續視為遺失,已輸出檔案也只是暫存。

不覆蓋證據地替換或重取

重新下載或傳輸到新暫存檔,驗證正確層、預期大小與可信雜湊後才原子替換。

若來源是活動檔案系統,盡量凍結或建立快照;變動來源即使傳輸完整也可能邏輯不一致。

只在副本救援並定義退出條件

來源已不存在時,只在隔離目錄的副本處理。先列出可救成員,只解到新目錄,再依獨立清單驗證。

只有替代檔通過壓縮與 tar 測試、大小或雜湊對齊來源,且原流程成功才算完成;救援結果標記不完整。

原創插畫:中斷下載或管線可留下有效前綴與部分檔案,存在不等於驗收成功。
原創插畫:完成需層級測試通過、來源大小或雜湊一致,並重跑原工作流程。 Watch at Ease