tar
コマンドでアーカイブを展開するときに
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
といったエラーが出ることがあります。
これは「アーカイブが途中で切れている」「読み取れるはずのデータが存在しない」ことを意味するエラーです。
この記事では、このエラーが出る原因と、確認・解決方法を解説します。

主な原因
1. アーカイブファイルが壊れている
ダウンロードやコピーの途中でファイルが壊れたり、転送が不完全な場合に発生します。
特に scp
や wget
で転送中に中断されたときに起こりやすいです。
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
オプションで途中まで展開できる可能性があります。ただし完全な修復はできないので、基本は元ファイルの再取得が最善です。