サーバー移転を行う際、コンテンツデータの移動は避けて通れない作業です。

ファイルを1つずつFTPでダウンロードして新サーバーにアップロードし直す方法もありますが、ファイル数が多いと膨大な時間がかかります。
特に、画像ファイルやログファイルが大量にあるサイトでは、この方法では現実的ではありません。

そこでおすすめなのが、データをZIPに圧縮してrsyncコマンドでサーバー間を直接転送する方法です。
この記事では、Linuxコマンドを使ってサーバー移転時にデータを効率よく一括移動する手順を解説していきます。

サーバー移転時のデータ移動の流れ

まず、全体の流れを把握しておきましょう。

1. 移転元サーバーでコンテンツをZIPに圧縮する
2. rsyncコマンドで移転先サーバーへZIPファイルを転送する
3. 移転先サーバーでZIPファイルを解凍する
4. 必要に応じてディレクトリ名をリネームする

この手順であれば、ローカルPCを経由せずにサーバー間で直接データを移動できるため、大幅な時間短縮になります。

今回は、以下のようなディレクトリ構成を例に説明します。

移転元(旧サーバー)のドキュメントルート:/var/www/html
移転先(新サーバー)のドキュメントルート:/home/sample/www

手順1:移転元サーバーでデータをZIPに圧縮する

まず、TeraTermやSSHクライアントで移転元サーバーにログインし、ドキュメントルートの一階層上のディレクトリに移動します。

# cd /var/www

次に、zipコマンドでドキュメントルートのディレクトリを丸ごと圧縮します。

# zip -r html.zip html

zipコマンドの書式はこちらです。

zip [オプション] 作成するZIPファイル名 圧縮対象

-rオプションを付けることで、ディレクトリ内のファイルやサブディレクトリを再帰的にすべて圧縮してくれます。
このオプションを付け忘れると中身が空のZIPファイルになってしまうので注意しましょう。

ファイル数が非常に多い場合は、圧縮に時間がかかることがあります。
バックグラウンドで実行したい場合は、コマンドの末尾に&を付けてzip -r html.zip html &とすることもできます。

手順2:rsyncで移転先サーバーへ転送する

ZIPファイルが作成できたら、rsyncコマンドで移転先サーバーへ直接転送します。

# rsync -av /var/www/html.zip ユーザーID@移転先ホスト名:/home/sample

rsyncコマンドの書式はこちらです。

rsync [オプション] 転送元ファイルパス ユーザーID@ホスト名:転送先ディレクトリパス

主なオプションの意味は以下の通りです。

  • -a:アーカイブモード(パーミッションやタイムスタンプを保持して転送)
  • -v:転送の進捗状況を表示

コマンド実行後、移転先サーバーのユーザーパスワードを求められるので、正確に入力すれば転送が開始されます。

転送先はドキュメントルートではなく、その一階層上のディレクトリを指定しましょう。
今回の例では、/home/sample/wwwではなく/home/sampleに送ります。後の手順で解凍・リネームを行うためです。

データ容量が大きい場合は転送に時間がかかりますが、ローカルPCを経由するよりも圧倒的に速く完了します。

手順3:移転先サーバーでZIPを解凍する

転送が完了したら、移転先サーバーにSSHでログインし、ZIPファイルを解凍します。

まず、ZIPファイルがあるディレクトリに移動します。

# cd /home/sample

unzipコマンドでZIPファイルを解凍します。

# unzip html.zip

これで、/home/sample/htmlというディレクトリにコンテンツが展開されます。

手順4:ディレクトリ名をリネームする

移転元のドキュメントルートがhtmlで、移転先がwwwの場合は、ディレクトリ名を変更する必要があります。

# mv html www

mvコマンドでディレクトリ名をhtmlからwwwにリネームすれば、データ移動は完了です。

リネーム先のディレクトリ名が既に存在する場合は、上書きされずに中に格納されてしまいます。
既存のwwwディレクトリがある場合は、事前にリネームやバックアップをしてから作業を行いましょう。

作業完了後の確認とクリーンアップ

データ移動が完了したら、以下の点を確認しておきましょう。

Webサイトが正常に表示されるかブラウザで確認する
ファイルのパーミッション(権限)が正しいか確認する
不要になったZIPファイルを削除する

不要なZIPファイルは、移転元・移転先の両方で削除しておきましょう。

# rm /var/www/html.zip   ← 移転元
# rm /home/sample/html.zip ← 移転先

また、ファイルのパーミッションが移転元と異なっている場合は、chmodコマンドで適切に設定し直してください。

まとめ

今回は、サーバー移転時にデータをZIPに圧縮して一括移動する方法を紹介しました。

  • zip -rコマンドでドキュメントルートを丸ごと圧縮する
  • rsyncコマンドでサーバー間を直接転送する(ローカルPCを経由しない)
  • unzipコマンドで移転先サーバーに解凍する
  • 必要に応じてmvコマンドでディレクトリ名をリネームする

ローカルPCにダウンロードしてからアップロードし直す方法に比べて、大幅な時間短縮が期待できます。
サーバー移転の際は、ぜひこの手順を活用してみてください。