こんにちは、ECCUBERの杉山です。
今回は、前回の続き(OS)の移行について取り上げたいと思います。

全体の大きな流れは、次の通りです。

  1. 移行先サーバーの用意
  2. データのコピー
  3. 移行先サーバーでの設定
  4. 移行先サーバーを起動

前回の記事はこちらになります。まだ、読まれていない方は、ご一読頂けますと幸いです。
https://ec-cuber.jp/news-column/column76/

本日は、2.データのコピーからお伝えしたいと思います。

2.データのコピー

データのコピーでは、移行元のサーバーと接続しデータを取得します。
今回は、移行元のサーバーとの接続はsshで行います。
移行元ではsshでの接続を許可している前提です。
移行先のサーバーは、ネットワークに接続済で移行元のサーバーへアクセスできる状態とします。

移行元サーバーでは、接続のためにいくつかの設定します。

移行先サーバーからsshで接続

移行先サーバーから移行元サーバーへsshでの接続を可能にします。移行元サーバーでの/etc/hosts.allowやsshdの設定を確認します。

最初は、移行先サーバーでは鍵ファイルがありませんし、レスキューモードなので、利用できるコマンドは十分ではありません。
移行元サーバ-のssh環境を確認しながらsshで接続できるようにします。
レスキューモード上でsshdを起動するよりも、移行先→移行元へsshで接続する方が容易ではないかと思います。
移行先サーバーでsshを実行して、移行元サーバーへ接続します。

②移行元サーバーでdumpコマンドを準備

移行元サーバーでdumpコマンドが実行可能なことを確認しておきます。

which dump 

dumpコマンドが存在することを確認します。無い場合はインストールしておきましょう。

移行先サーバーからdumpデータを取得

移行先サーバでsshを実行し、移行元サーバーへ接続、dumpコマンドを実行し、その結果をパイプを通してddコマンドで移行先サーバーへ格納します。

ssh -p “ポート番号“ -i “鍵ファイル” “接続id”@”移行元サーバー” /sbin/dump -0u -f – “対象パーティション”(例:/dev/vda1)| dd of=”出力ファイル”(例:/mnt2/boot_yyyymmdd.dump)

※2行になっていますが、1度のコマンドで実行します。
※dumpコマンドで”-f – “と指定しているのは、dumpを標準出力へ出力しています。

ポート番号 移行元サーバーでのssh接続用ポート番号
鍵ファイル ssh接続用鍵ファイル
接続id移行元サーバーのログインid
dumpコマンドの実行権限があるユーザを指定
移行元サーバ 移行元サーバのIPアドレス
対象パーティション 移行元サーバでdumpするパーティションを指定
出力ファイル 移行元での出力先を指定(レスキューモードの領域は消える可能性があるので、マウントしているディスクを指定します)

bootパーティションは比較的容量が小さいと思いますので、先に実行し、dumpできることを確認しておきます。
bootパーティションが取得できたら、同様にrootパーティションを取得します。
rootパーティションは大きな容量となることがありますので、格納先のディスク容量を事前に確認しておきましょう。

例えば、100Mbpsの通信路で、120GBをdumpすると単純計算で

120×1024×8/100/3600sec= 2.73h

3時間近く掛かります。

④dumpデータを復元

移行先サーバーでrestoreコマンドを実行します。

※/mnt2にディスクがマウントされているものとします。
rootパーティションのdumpファイルを復元します。

cd /mnt2
restore  -r -T /mnt2 -f “rootパーティションdumpファイル名”

※rootファイルシステムの復元では、容量により時間が掛かることがあります。

これで、データの移行は終わりました。
この後、移行先のディスクから起動できるように設定します。

3.移行先サーバーでの設定

さて、最後の難関「3.移行先サーバーでの設定」です。

データの移行は終わりましたが、移行元と移行先でデータは全く同じでは有りません。
違いは、サーバー環境です。
修正が必要なのは、ネットワークとディスク情報です。

移行データは/mnt2配下に格納されています。
システムを起動する時は、/mnt2配下がシステムのルートディレクトリになります。

①ネットワーク設定

CentOS6.7で、ネットワークの情報は、/etc/systemconfig/network-scriptsにあります。
修正対象のファイルは、/mnt2/etc/systemconfig/network-scriptsにあるifcfg-eth0 です。
ここでは、自身のIPアドレス、ネットワークゲートウェイ、DNSサーバのIPアドレス等を設定します。

今、レスキューモードで起動していますが、ネットワークは利用できる状態になっていると思います。
(sshも実行できたはずなので)

であれば、今のネットワーク情報を参考にできます。

/etc/systemconfig/network-scripts/ifcfg-eth0 にあるので、
このファイルを参考にして、/mnt2 配下のファイルを修正します。
復元したファイルの値は、コピー元のサーバーの値なので、現在、使用している値に書き換えます。

②fstabの修正

ディスク情報もコピー元とは異なりますので、新しい値で修正します。
修正するファイルは/mnt2/etc/fstab です。この中のUUIDを修正します。
起動するディスクは、/mnt2へマウントしているディスクなので、このディスクのUUIDを確認します。
blkid コマンドで表示されるUUIDを/mnt2/etc/fstabへ反映します。

③grubの修正

起動用ディスクの情報も修正します。修正するファイルは、/mnt2/boot/grub/grub.conf です。
”root=UUID”で指定されているUUIDを、rootのUUIDで書き換えます。

④ブートローダーの書き込み

新しいディスクの場合ブートローダーが書き込まれていません。
この状態では起動できないため、ブートローダーを書き込みます。

ブートローダーの書き込みのためには、grub-install コマンドを実行する必要があるのですが、初期の状態ではgrub-installが利用できないことが有ります。
この場合、一度レスキューモードを終了し、もう一度レスキューモードを開始します。
この時、「continue」で進むと、先ほど復元したディスクが、/mnt/sysimage へマウントされます。

この状態では、/mnt2をマウントする必要は有りません。
/mnt/sysimage がそれに当たります。復元が全て終わっているので、/mnt/sysimage 配下には全てそろっているはずです。

そこで、chroot します。

chroot /mnt/sysimage

これで、grub-install を実行できるはずです。

grub-install /dev/vda 

これで、ブートローダーが書き込まれました。

やるべきことは、これでおしまいです。

新しいシステムのディスクへパーティションを作成し、コピー元からデータを復元し、新しいシステム用のハードウェア情報を記述し、起動(ブート)するための準備ができました。

移行先サーバーを起動

後は、システムを再起動してみましょう。

上手く起動すればOKです。
もし、うまく起動できなくても、同じ手順でレスキューモードから起動し、
マウントされている内容を確認し、修正して再起動してみましょう。

私も、何回か繰り返して、システムが起動しました。
ここまで読んでいただいてありがとうございました。
皆さんが幸せになることを祈ります。
では、またの機会に。

本日は、ありがとうございました。

さて、
弊社はシステムインテグレータで、ECサイト構築のプロフェッショナルですが、ただ構築するだけでなく、「売上を上げてナンボ」の名の下に、収益を上げるECサイト構築します。
構築後の広告・キャンペーン等のプロモーション、各施策まで踏み込み、お客さまとともに収益向上の実現に向けて全力サポートをお約束します。
まずはお気軽に何でも以下までご相談ください。
ECサイト構築について
まずはお気軽に何でもご相談ください。
▼問合せフォームから相談してみる。
https://ec-cuber.jp/contact-us/
▼メールで相談してみる。
  sales_ec@ids.co.jp
▼電話で直接相談してみる。
  03-6386-3652
▼EC-CUBERは、総合的なECソリューションをご提供するEC-CUBEのプロフェッショナル集団です!
https://ec-cuber.jp/service/