サーバー間でデータを転送する際、サーバーに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
で取得する方法も考えられます。想定していた方法でうまくいかない場合は、別のアプローチを試すことのがやっぱり大事だな、と再確認した次第でした。
コメントを残す