※弊社記事はたぶんにPRが含まれますので
話半分で受け取ってください。

リニューアルした「さくらのVPS」の新プランにサーバを移行した

 先日、さくらのVPSがリニューアルしましたが、新プランの恩恵を受けるためには新たにサーバを契約し直す必要があるようです。正確には、旧プランのままでもメモリは増えますが、HDD容量はそのままとなります。
 「移行作業めんどくさいし、そのままでも良いかなぁ」なんて思いつつ、しかしどうしてやっぱり、畳と妻とサーバは新しい方がテンション上がるに決まっている! というわけで、この機会に新プランに移行することにしました。

 今回、サーバを移行するに当たって、rsyncを使用することにしました。サーバはdebian6(squeeze)です。「さくらのVPS」の512プランから新1Gプランに移行しました。

移行作業

 移行作業の手順は以下のような感じです。

  1. 新・旧両サーバにrsyncをインストールする
  2. 旧サーバで動いているapacheやpostfixなどのサービスを停止
  3. rsyncで旧サーバからデータをまるっとコピー
  4. 新サーバでupdate-grub
  5. 新サーバ再起動
  6. DNSを新サーバに向ける

 また、コード中、新サーバでの作業は「user@new」、旧サーバでの作業は「user@old」としています。

rsyncをインストール

 まず最初に、新・旧両サーバにrsyncをインストールします。ただ単にインストールするだけなので、簡単です。

# apt-get install rsync

旧サーバのサービスを停止する

 データのコピーを始める前に、旧サーバで動いているサービスを停止します。apacheとかmysqlとか。うちの場合は、nginx、postfix、mysql、php-fpmと言ったところを停止しました。sshは停止すると接続出来なくなるので、そのままに。

user@old # /etc/init.d/nginx stop

rsyncを実行する

 旧サーバでrsyncを実行して、新サーバにファイルをコピーします。コード中の「xxx.xxx.xxx.xxx」は新サーバのIPアドレスに置き換えて下さい。

user@old # rsync -rtlzvogpHAX --delete --exclude /dev/ --exclude /etc/network/ --exclude networks --exclude hosts --exclude /proc/ --exclude /boot/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ssh_host_* --exclude fstab --block-size=4096 -e ssh / xxx.xxx.xxx.xxx:/

GRUBをアップデート

 コピーが完了したら新サーバでupdate-grubを実行します。

user@new # update-grub

新サーバを再起動する

 特に説明無し。

user@new # shutdown -r now

DNSのAレコードを新サーバに向ける

 これも特に説明無し。

 この移行作業によって変わるのは、IPアドレスくらいのものだと思います。アカウントや設定などはほとんど全て、新しいサーバに引き継がれます。

落ち穂拾い

iptablesについて

 /etc/network を除外しているので、/etc/network/if-pre-up.d/下にスクリプトを置いてiptablesの自動起動設定を行っている場合は、設定し直す必要があります。設定方法は以下を参照のこと。

 iptables-persistent なるパッケージを導入すると、スクリプトを書かなくてもよくなるみたいですぞ。

update-grubについて

 ぶっちゃけよくは分かっていないのですが、再起動前に update-grub を実行しなかった場合、「/bin/sh: c: not found」などなどのエラーが出てきて、うまく起動出来ませんでした。

 ですが、rsyncを実行する際、オプションに「–exclude /boot/」を追加してbootディレクトリをコピーの対象外にした場合は update-grub を実行しなくてもそのまま起動しました。
 以下は、bootディレクトリをコピーの対象外にした場合のコマンドです。

user@old # rsync -rtlzvogpHAX --delete --exclude /dev/ --exclude /etc/network/ --exclude networks --exclude hosts --exclude /boot/ --exclude /proc/ --exclude /boot/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ssh_host_* --exclude fstab --block-size=4096 -e ssh / xxx.xxx.xxx.xxx:/

 「たぶんそういうことなんだろうなぁ」と思うところはあるのですが、うまく説明出来る気がしないので、説明を省略するのであります。

参考

関連する記事