10年ほどConoHa VPS 2.0 を利用していて、CPU 2 core / メモリ 1GB / SSD 50GB のプランに 毎月1000円ほどを払い続けてきたのですが、必要性が薄くなってきたことと金銭的な事情からConoHaから撤退することにしました。
撤退するといってもVPSで動かしていたサービスを完全に移行するまではしばらく稼働させる必要があり、かつConoHa上の サーバーは早めに止めて課金を停止したいという事情から、 ConoHaのVPSで動かしていたサーバーをそっくりそのままローカルの FreeBSD bhyveの仮想化基盤上で動かすというV2V移行でConoHaから撤退します。
やることはConoHaのVPSの仮想ディスクをそのまま引っこ抜いて、ローカル仮想化基盤で起動するだけです。 しかし、ConoHaでは仮想ディスクのエクスポート機能が提供されていないため、別の方法で仮想ディスクをまるまる 引っこ抜く必要があります。
今回はVPSのブロックデバイスを直接読み込み、それをインターネット経由で転送するという多少強引な方法で仮想ディスクの エクスポートを行いました。 VPS上のサーバーのOSはFreeBSDです。
VPS側の操作はSSH経由ではなくコンソールから行います。稼働中のOS自身のディスクを読み込むので、読み込み中に極力書き込み が発生しないよう いちどサーバーを起動してから、シングルユーザーモードに落ちます。最初からシングルユーザーモードで起動 するのではなく、起動してからシングルユーザーモードに落ちるのはディスクイメージの転送のためネットワーク接続のある状態で シングルユーザーモードを利用するためです。
# shutdown now
シングルユーザーモードに落ちたら以下のコマンドで、吸い出し、圧縮、暗号化、転送を行います。
インターネット越しにディスクイメージを転送するので、暗号化して転送して転送します。PASSWORD
の部分は適当に16文字程度のパスワードを設定します。ディスクには空き領域もあるので高速に転送するため、圧縮して高速に転送できるようにします。暗号化されたデータは圧縮が効きにくいので、暗号化前に圧縮するのがポイント。
最後にncコマンドで受信側サーバーの9821番ポートにデータを送りつけます。
# dd if=/dev/vtbd0 bs=1M status=progress | \
zstd -T0 | \
openssl enc -aes-256-cbc -pbkdf2 -salt -pass pass:PASSWORD | \
nc -6 -N receiver.example.jp 9821
受信側は、送信と逆順で9821番ポートに送られたデータを受信、復号、伸長という順に処理してファイルに保存します。
pv
コマンドは、転送の進捗(圧縮データを伸長した実転送速度)を表示するために挟んでいるだけで必須ではありません。
なお、当然ですが受信側で以下のコマンドを先に実行しておいて、待ち受けている状態でVPS側でコマンドを実行して送信する必要があります。
$ nc -6 -l 9821 | \
openssl enc -d -aes-256-cbc -pbkdf2 -salt -pass pass:PASSWORD |\
zstd -dc | \
pv > conoha_vtbd0.raw
50GBの仮想ディスクイメージが無事に手元に転送されてきたことがわかります。
$ ls -lha conoha_vtbd0.raw
-rw-r--r-- 1 meta meta 50G Aug 6 23:55 conoha_vtbd0.raw
$ file conoha_vtbd0.raw
conoha_vtbd0.raw: DOS/MBR boot sector; partition 1 : ID=0xee, start-CHS (0x0,0,2), end-CHS (0x3ff,255,63), startsector 1, 104857599 sectors
ローカル仮想化基盤はFreeBSD bhyveベースで、vm-bhyveを使用しています。 このあたりは人によって環境が様々ですし、持ってきた仮想ディスクでVMを起動するだけなので説明は適当に。
以下のようなVMテンプレートが存在する前提で、VMを作成します。
loader="bhyveload"
cpu=1
memory=256M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
CPU 1コア、メモリ1GBのconohaという名前のVMを作成し、転送してきた仮想ディスクを割り当てます。
# vm create -t freebsd -c 1 -m 1G conoha
# cp conoha_vtbd0.raw /bhyve/conoha/disk0.img
VMを起動し、コンソールをアタッチします。
# vm start conoha; sleep 1; vm console conoha
無事に起動して、プロンプトが出ました。
FreeBSD/amd64 (conoha.example.jp) (ttyu0)
login:
ローカル仮想化基盤上で無事起動したら、ネットワーク設定を変更して手元のネットワークに沿ったIPアドレスに変更して再起動、無事にサーバー上で稼働していたサービスが正常に動いてることを確認して引っ越しは完了です。
ConoHaのVPSで稼働していたサーバーを、仮想ディスクをそのまま吸い出してローカルに持ってくるという方法で、ローカルの仮想化基盤に引っ越しました。
ConoHaのVPSはインターネット回線の速度が共有100Mbpsなので、50GBの仮想ディスクを転送するにはそれなりに時間がかかりました。以下のグラフはConoHaの管理画面で見ることができるネットワーク転送量です。