2012-02-13

UbuntuでKVM仮想マシンを作成する

Linux でホストされた Pukiwiki や Drupal でメモや日誌などを記録することをよくするが、これらのデータはテキストファイルや HTML ファイルに比べて可搬性が無いという問題点がある。

OS やシステムのアップグレードでソフトウェアが動作しなくなることもあるし、取っておいたバックアップから復元するのも非常に大変である。そもそもソフトウェアのインストールやセットアップのやり方を忘れていたり、やり方をメモしておいてもやたら面倒だったり、ソフトウェアの最新バージョンでは動作しなかったり、個人的なカスタマイズを行っていたりするからだ。

この種のソフトウェアでデータを記録する場合には仮想マシンでホストするべきであった。そうすれば仮想マシンを持ち運ぶだけでデータの復元は簡単にできる。バックアップの方法に悩まなくてもすむ。この記事では Ubuntu で KVM 仮想マシンを作成し、それを持ち運ぶ方法を説明する。

libvirt を用いた KVM 仮想マシンの作成

libvirt (libvirt: The virtualization API) は KVM や Xen といった仮想マシンのバックエンド(ハイパーバイザと呼ばれる)を用いた仮想マシンの作成・管理の共通 API を提供するライブラリである。libvirt を用いると同一のコマンドやアプリケーションで異なったハイパーバイザによる仮想マシンを操作できる。

まずマシン環境が KVM 仮想化をサポートしているかをチェックする必要がある。

$ sudo aptitude install cpu-checker
$ sudo kvm-ok

これで KVM acceleration can be used と表示されればよい。表示されない場合は BIOS をチェックして VT-x を有効にしなければならない(VT-d は必須では無い)。/dev/kvm が存在しないという表示が出るかもしれないが、これは kvm をインストールすれば作成されるので気にしなくてよい。

ここでは Ubuntu で libvirt を用いて KVM 仮想マシン (Debian GNU/Linux) を作成する方法を説明する。まずインストール:

$ sudo aptitude install kvm virtinst

これにより用意されるグループ libvirtd に加えられて virsh などによる仮想マシンの特権的操作が可能になる。グループを有効にするためにいったんログアウトしてログインする必要がある。万一グループに加えられてなければ、adduser yourname libvirtd を実行してグループに自分を加える必要がある。

作成:

$ cd working-dir
$ curl -LO 'http://ftp.jaist.ac.jp/pub/Linux/Debian-CD/current/i386/iso-cd/debian-6.0.4-i386-netinst.iso'
$ qemu-img create -f qcow2 example.img 16G
$ sudo virt-install --name=example --ram=1024 --vcpus=2    \
                    --cdrom=debian-6.0.4-i386-netinst.iso  \
                    --os-variant=virtio26
                    --disk='path=example.img,format=qcow2' \
                    --graphics='type=vnc,listen=0.0.0.0'

これにより仮想マシンが作成されてブートしインストーラが起動する。インストールを続行するには Ubuntu ホストに VNC で接続すればよい。

なお、作成された仮想マシンの設定は /etc/libvirt/qemu/example.xml というファイルに保存される。

(不明なこと: 上記でテキストで無い GUI ベースのインストーラを用いると VNC 画面でマウスとマウスポインタがずれるという不具合が生じる。これは上記 XML ファイルを編集して仮想マシンを「タブレット」として設定すれば防げるらしいが、インストーラをいったん中止して設定ファイルを書き換え、インストーラを再び起動する方法がよくわからない。)

libvirt により管理されている KVM 仮想マシンの操作

仮想マシンの強制終了

$ virsh destroy example

仮想マシンの起動

$ virsh start example

仮想マシンの登録破棄

$ virsh undefine example

仮想マシンのリストアップ

$ virsh list --all

libvirt により管理されている KVM 仮想マシンの持ち運び

仮想マシン example の構成要素はイメージファイルと設定 XML ファイルの2つのみである。

$ cd working-dir
$ ls
example.img
$ virsh dumpxml > example.xml
$ rsync -avzh example.img example.xml your.target.host:target-working-dir

持ち運び先での復元方法:

$ ssh your.target.host
$ cd target-working-dir
$ ls
example.img example.xml
$ vi example.xml
( <source file="..."/> の行を編集し、正しいイメージファイルのパスを記述する )
$ virsh define example.xml

これにより、/etc/libvirt/qemu/example.xml が作成される。あとは virsh を用いて起動や管理を行えばよい。

libvirt により管理されている KVM 仮想マシンの複製

同一ホストにおける仮想マシンの複製は持ち運びと同様であるが、uuid と名前を変更する必要があるだろう。

$ ssh your.target.host
$ cd working-dir
$ ls
example.img
$ cp example.img branch.img
$ virsh dumpxml example > branch.xml
$ vi branch.xml
( <name>example</name> の行を編集し、名前を変更する )
( <uuid>...</name> の行を編集し、uuid を変更する。uuid は uuidgen で生成できる )
( <source file="..."/> の行を編集し、正しいイメージファイルのパスを記述する )
$ virsh define branch.xml

(2012/5/18 追記) 仮想マシンをブリッジに接続して外部に見えるようにする方法について記事を書いた: Septième Sens: Ubuntu で KVM 仮想マシンをブリッジ接続する

(2015/1/10 追記) aptitude install kvm でインストールできないケースがある。aptitude install qemu-kvm の方が適切だろう: Septième Sens: Ubuntu で Vagrant 最新版を使って KVM を起動する

0 件のコメント:

コメントを投稿