GeekFactory

int128.hatenablog.com

物理マシンを仮想マシンに移行する手順のまとめ

Linux KVM(Kernel-based Virtual Machine)の物理マシンを仮想マシンに移行する手順をまとめました。すでにある物理マシンを仮想マシンに移行する場合を考えます。仮想マシンを実行するための環境はハイパーバイザと呼びます。

ディストリビューションに依存しますが、基本的にはカーネルを取り替えるだけで動きます。

カーネル

KVMを実現するには下記の2つが必要です。ディストリビューションによっては標準で用意されています。

両者はハイパーバイザの/bootに入れておくとよいです。KVMの起動時にカーネルを指定できるので、仮想マシンカーネルイメージが入っていなくても大丈夫です。

kvm -kernel /boot/kvm.current/vmlinuz -append root=/dev/vda

ちなみに、ハイパーバイザカーネルは下記の設定で作れます。

--- Virtualization
[*]   Kernel-based Virtual Machine (KVM) support
[*]     KVM for Intel processors support (NEW)
[ ]     KVM for AMD processors support (NEW)

--- Networking support
[*] 802.1d Ethernet Bridging

--- Network device support
[*]   Universal TUN/TAP device driver support

ゲストカーネルは下記の設定で作れます。ディスク、ネットワーク、コンソールは実際のデバイスではなくvirtioを選ぶと性能向上が見込めます。ゲストカーネルでは必要ないオプションを無効にしておきましょう。

--- Paravirtualized guest support
[ ]   Xen guest support
[*]   KVM paravirtualized clock
[*]   KVM Guest support

--- Block devices
[*]   Virtio block driver (EXPERIMENTAL)

--- Network device support
[*]   Virtio network driver (EXPERIMENTAL)

Character devices  --->
[*] Virtio console

ディスク

物理マシンのパーティションをそのまま流用できます。特別な変換は必要ありません。ハイパーバイザからパーティションが読めるだけで十分です。物理マシンのパーティションが/dev/sda1であれば、

kvm -drive file=/dev/sda1,if=virtio

のように指定します。

仮想マシンのディスクはLVM上に作成しておくとよいです。QEMUイメージにすると、仮想マシンから物理マシンに戻す場合にパーティションへの書き戻しが必要になります。LVMボリュームであれば仮想マシンでも物理マシンでも起動できます。

ネットワーク

物理マシンの設定は一切変更しなくて大丈夫です。ハイパーバイザでブリッジを作成して結合します。仮想的なハブを作ってLANケーブルで接続する感じです。

KVMの起動時にネットワークカードを指定します。下記のように指定すると、ハイパーバイザ上にtap0という仮想的なLANポートが作成されます。tap0は仮想マシンNICにつながっています。

kvm -net nic,model=virtio -net tap,ifname=tap0

物理ネットワークeth0とtap0を接続するため、ブリッジhub0を作成します。

brctl addbr hub0
brctl addif hub0 tap0
brctl show

コンソール

VNCで接続するのがお手軽です。必要ないときはVNC接続を切っておけるので。

kvm -vnc :0

virtioコンソールも使用できます。stdioが使えるらしいのですが、私の環境ではうまく動きませんでした。下記のように指定すると、SSH越しでもコンソール画面が表示されました。

kvm -curses -virtioconsole stdio