あらすじ
以前、ReaRを使ってさくらのVPSのクローンを作成する記事 さくらのVPSをReaRでクローンする を書きましたが、メモリが2GB程度ないと実行できないようでした。また同様なツールのMondo Rescueもメモリが少ないと起動すらしません。そこで今回は、コピー先でLive CDを起動して、ddでコピーする方法を試してみました。
以下の内容はMIRACLE LINUX 8での結果です。
Live CDの用意
今回は軽量なKNOPPIXを使用しました。KNOPPIX懐かしいですね。ダウンロードページよりCDバージョンのISOファイルをダウンロードします。CDなら700MBで済みます。
コピー先の準備
さくらのVPSのコントロールパネルにログインし、コピー先のVPSの画面を開いて「OS再インストール」を選択します。ISOイメージ→アップロードするを選択するとアップロード先の情報が表示されるので、指示された内容に従ってSFTPでKNOPPIXのISOファイルをアップロードします。アップロードが完了したらVPSを起動します。
KNOPPIXが起動したら以下の設定を行います。
- ネットワークの設定
- rootパスワードの設定
- sshサーバーの起動
1. ネットワークの設定
さくらのVPSは自動的にネットワークが設定されないので、手動で設定してあげる必要があります。nmtuiコマンドとかを使うと楽です。
2. rootパスワードの設定
passwd
(VPSのパケットフィルタでアクセス制限しておくことをおすすめします)
3. sshサーバーの起動
/etc/init.d/ssh start
コピー元から転送開始
続いてコピー元にログインして、ディスクイメージを転送します。
# dd if=/dev/vda bs=32k status=progress | ssh -C 192.168.0.1 dd of=/dev/vda bs=32k
コマンド解説
dd if=/dev/vda if=はコピー元のディスク。
bs=32k は転送時のブロックサイズ。(値によって転送効率が変わる)
status=progress 進行状況の表示。
ここまでがコピー元のサーバーに関係する部分です。of=が付いてないので標準出力に出力されますが、パイプによりsshコマンドに渡されます。sshのポートフォワーディング機能を利用して、ddコマンドに入力しています。
コピー先の部分
| ssh -C 192.168.0.1 接続先のサーバー(KNOPPIX) -Cは圧縮オプション。
dd of=/dev/vda of=はコピー先のディスク
転送が完了したらKNOPPIXは shutdown -h now コマンドなどで終了します。
コピー後の設定
1. ネットワークの設定
コピー先のVPSを起動すると、コピー元と同じように起動すると思います。ただしネットワークの設定が必要なため、nmtuiなどお好きな方法でネットワークの設定をします。
2. gptの修正
たとえばさくらのクラウド(20GB)からコピーした場合など、ディスクのサイズが違うため修正が必要です。
# gdisk /dev/vda
x、e、m、p、w で修正。
最後に
これでたくさん作りたいサーバーを簡単にクローンしたり、VPSへの移行、VPSからの移行が簡単にできますね。さくらのVPSは値段が安い反面、さくらのクラウドにある機能が削られてるので、このへんを使い分けていくとなかなかコストパフォーマンスがよいです。
以下、2023.8.18追記
追記:ローカルネットワークでクローンする
今まで説明してきた方法には一つ問題があります。それはグローバルIPアドレス同士でクローンを行った場合、インターネット越しに大量のトラフィックが発生する場合があります(実際はさくらのネットワーク内ですが)。さすがに数GBのデータを何度も送信していると、帯域制限を行われてしまう恐れがあります。さくらは割と緩い印象がありますが、ConoHaで同じことをやったら一発でポートをブロックされてしまいました。事前の通告もなくいきなり。
スイッチ を作成して、eth1とスイッチを接続すれば、ローカルネットワーク経由で転送ができます。
追記:異なるリージョン間をローカル接続する
さくらのVPSのスイッチは同じリージョン間でしか接続できません。リージョンを跨いだクローンを行いたい場合は、さくらのクラウドのブリッジ機能を使って、VPSのそれぞれのリージョンのスイッチを接続するという方法があります。詳しくは こちら に説明があるので参考にしてみてください。
実際にどのくらいのトラフィックが発生しているのか、ディスク容量20GB、ディスクの使用量3.7GBほどのディスクイメージを転送してみたところ、6.78GB 程でした。(転送元はVPSではなくクラウドのディスクです)
sshの-Cオプションで圧縮しているので、20GBのディスクでもそのまま20GBのトラフィックが発生するわけではありませんが、実際の使用量の倍もあるのは意外でした。