サーバー間でデータを転送する際、サーバーにssh接続し、tarコマンドで圧縮し、scpコマンドで転送、その後再びtarコマンドで解凍する、という方法を取ることがあると思います。
scpコマンドで転送後、tarコマンドで解凍した際にエラーが発生し、結局はtarを使わずにディレクトリ毎scpコマンドで転送することでエラー回避をした、という方法を共有します。
目次
tarコマンドのエラー:アーカイブ中に予期せぬ EOF があります
今回、WordPress の移転に伴い旧サーバーから新サーバーへWordPressデータを転送する必要がありました。
WordPress の移転はプラグインを使う方法や、FTPでダウンロード&アップロードする方法も可能ですが、安心・確実・効率の面から旧サーバーから新サーバーへ転送する方法が望ましいと考えます。
wp-content, wp-admin, wp-includes等を含む、WordPressディレクトリ一式をtarコマンドで圧縮し、ファイルをscpコマンドで新サーバーへ転送した後、転送先の新サーバー上で再度tarコマンドで解凍したところ、以下のエラーが発生しました。
「tar アーカイブ中に予期せぬ EOF があります」
今まで複数のWordPressの移転をscpコマンドを使って行ってきましたが、このエラーは初めて。なんだろうと思いながら調べてみると、同じ現象でハマった方が記事にしてくれています。
- tarコマンドで「アーカイブ中に予期せぬ EOF があります」が表示された場合の対応。 – Qiita
- インフラエンジニアのメモ : [アーカイブ中に予期せぬ EOF があります]というエラー
- 【Linux】エラーメッセージ「tar: アーカイブ中に予期せぬ EOF があります」 – Muni Bus
gunzipコマンド、tarオプション変更などやってみるも変わらず
このエラーを解決するために、上記に紹介されていた方法を試してみました。
まずはtarで正しく圧縮できているか確認するという方法。改めて圧縮し正しく圧縮が完了したことを確認。再度転送して解凍します。が、同じエラーでした。
次に、gunzipコマンドで解凍した後に、tarコマンドで展開するという方法。gunzipコマンドを実行したところ同様のEOFエラーが表示されました。
gzip: ファイル名.tar.gz: unexpected end of file
最後に、tarコマンドで圧縮時にvオプションを外すという方法。このvオプションというのはコマンド処理の詳細を表示するというオプションです。やってみましたが、これも変わらずエラーでした。
ということで、上記の方法では解決できず。
ディレクトリを直接scpコマンドで転送することで成功
最終的に、tarコマンドで圧縮せずに、WordPressディレクトリ一式をそのままscpコマンドで転送したところ、これがうまくいきました。おそらく、圧縮または解凍時に予期せぬEOFが発生していたんでしょうね。ディレクトリ全体を転送することで、ファイルへの影響が避けられて、エラーせずに新サーバーへ転送することができました。
数千〜数万ファイルを転送するのってファイル転送漏れがありそうで怖いので、安全に転送するためにtarで1つのファイルに圧縮&解凍していたのですが、逆にこういうエラーがあるんだなと勉強になりました。
エラーが起きたら別の方法を
今回の経験から、WordPressまるごとのように比較的大きめのデータを転送する場合など、ディレクトリ全体を直接scpで転送することでエラーを回避できることがわかりました。
今回はscpで転送しましたが、rsyncを使って複製する方法や、wgetで取得する方法も考えられます。想定していた方法でうまくいかない場合は、別のアプローチを試すことのがやっぱり大事だな、と再確認した次第でした。







コメントを残す