tar: Unexpected EOF in archive の解決方法

  • URLをコピーしました!

tar コマンドでアーカイブを展開するときに

tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

といったエラーが出ることがあります。
これは「アーカイブが途中で切れている」「読み取れるはずのデータが存在しない」ことを意味するエラーです。

この記事では、このエラーが出る原因と、確認・解決方法を解説します。

目次

主な原因

1. アーカイブファイルが壊れている

ダウンロードやコピーの途中でファイルが壊れたり、転送が不完全な場合に発生します。
特に scpwget で転送中に中断されたときに起こりやすいです。

2. 分割アーカイブの結合漏れ

大きなファイルを分割して保存した場合、結合が正しく行われていないと途中で EOF(ファイル終端)になります。

例:

backup.tar.gz.part1
backup.tar.gz.part2

を結合せずに展開しようとするとエラーが出ます。

3. 圧縮/非圧縮の取り扱いミス

tar に与えるオプションを間違えると EOF エラーになることがあります。
たとえば gzip 圧縮されているのに -z を付け忘れるケースです。

4. ディスク容量不足

展開途中でディスク容量が足りなくなると、ファイルの展開に失敗して EOF エラーが出ることもあります。

確認と解決方法

1. ファイルの整合性を確認する

ダウンロード元で公開されている チェックサム(MD5, SHA256 など)を確認します。

sha256sum archive.tar.gz

数値が一致しない場合は、ファイルが壊れているので再ダウンロードが必要です。

2. 分割ファイルの結合を確認する

分割されているファイルは cat で結合してから展開します。

cat backup.tar.gz.part* > backup.tar.gz
tar -xvzf backup.tar.gz

3. 圧縮形式に合わせたオプションを使う

  • gzip 圧縮: tar -xvzf file.tar.gz
  • bzip2 圧縮: tar -xvjf file.tar.bz2
  • xz 圧縮: tar -xvJf file.tar.xz
  • 非圧縮: tar -xvf file.tar

拡張子だけでなく、実際の形式を確認するには以下を利用します。

file archive.tar.gz

4. ディスク容量を確認する

df -h

もし //tmp がいっぱいなら、不要ファイルを削除してから再展開してください。

まとめ

tar: Unexpected EOF in archive は、

  • ファイル破損
  • 分割ファイルの結合漏れ
  • 圧縮形式の指定ミス
  • ディスク容量不足

といった原因で発生するエラーです。
焦らず、ファイルの完全性 → 分割結合 → オプション → 容量 の順に確認すれば解決できます。


💡 補足:
もし復元がどうしても必要で、壊れたアーカイブしか残っていない場合は tar --ignore-zeros オプションで途中まで展開できる可能性があります。ただし完全な修復はできないので、基本は元ファイルの再取得が最善です。

目次