前回 は、Linux KVMがどのような仮想マシン技術であるか、またLinux KVMを構成するソフトウェアとしてKVMカーネルモジュールとqemu-kvmがどのような関係かについて解説しました。今回は、リリースされたてホヤホヤのDebian GNU/Linux 6.0(Squeeze)を用いて、実際にLinux KVMで仮想マシンを動かす方法について解説します。
Debian GNU/Linux 6.0がリリースされました
本記事をご覧になっている方ならご存じの方も多いかと思いますが、老舗LinuxディストリビューションDebian GNU/Linuxの最新バージョン6.0がリリースされました。
Debian GNU/Linux 6.0はコアなユーザが多いLinuxディストリビューションです。特に安定性が重視されており、サーバ用途などでは安心して運用できる反面、開発が活発なオープンソースソフトウェアの場合、標準でパッケージ化されているソフトウェアのベースバージョンが多少古いということもあります。
例としてLinux KVMのバージョンを他のディストリビューションと比べてみると、2010年11月にリリースされたFedora 14にはQEMU 0.13相当が含まれているところで、今年に入ってからリリースされたDebian GNU/Linux 6.0のQEMUは0.12.5がベースとなっています。もちろん“ 普通に仮想マシンを実行する” だけであれば、大して気にならない程度の違いですが……。
もちろんDebian GNU/Linux 6.0が悪いと言うわけではありません。仮想化サポートの観点で言えば、Fedora 14やRed Hat Enterprise Linux 6ではXenのサポートが縮小されているのに対し、Debian GNU/Linux 6.0ではXen 4.0.0が標準でパッケージングされており、気楽にXen 4.0の世界にチャレンジできる数少ないディストリビューションとなっています。ほかにも、OpenVZなどの仮想化技術も標準でサポートされているなど、魅力的な面が多数あります。ディストリビューションも、自身の要求や特性を見極めて使い分けていくとよいでしょう。
図1 Debian GNU/Linux 6.0
Debian GNU/Linuxの情報や入手方法については、下記のサイトを参照してください。
Debian -- ユニバーサルオペレーティングシステム
URL:http://www.debian.org/
HTTP/FTPを使ってDebian CD/DVDイメージをダウンロードする
URL:http://www.debian.org/CD/http-ftp/index.ja.html
Linux KVMをインストールするコンピュータの構成例
今回、本記事を執筆するにあたりHewlett Packard社製Proliant ML115 G1を使用しました。主なスペックは下記の通りです。
表1 今回の使用マシン
ベースシステム Hewlett Packard Proliant ML115 G1
CPU Dual-Core AMD Opteron(tm) Processor 1210
メモリ 4GB
ハードディスク 160GB(Serial ATA接続)
これからLinux KVMにチャレンジしようとされている方の中には、新たにコンピュータを準備したり、お手持ちのコンピュータをLinux KVMの勉強用に整備したりされる方もいらっしゃるかと思います。そのような方のために、コンピュータの選定の目安について紹介しましょう。
中古で新たに勉強用のノートパソコンを調達する場合は、ThinkPad X60シリーズ(Core2 Duoモデル)などがお手軽で良いかと思います。これまでKVMやXenの動作実績が多数ありますので、安心して使えるモデルです。その他のコンピュータを選ばれる場合は、下記のような点に注意し選定すると良いでしょう。
プロセッサ
Linux KVM用のコンピュータとして、最も選定に注意が必要なコンポーネントはCPU です。
Intelのプロセッサの場合は、Core i以降、もしくはCore2 Duo/Quadを選択するとよいでしょう。これらのモデルであればIntel VTが利用可能です。現段階で新品として販売されているものでも、廉価なモデルにはIntel VTが付いていないものがありますので注意してください(Celeron、Pentiumラインなど) 。
AMDのプロセッサの場合、Athlon 64X2以降のプロセッサであればAMD-Vが搭載されていると考えてよいでしょう。また、Intel VTやAMD-Vを搭載プロセッサでも、新しい世代のほうが仮想マシンの実行が高速化されています。長く使うつもりであれば、できるだけ新しいプロセッサを選ぶようにしましょう。
CPUが仮想化対応かどうか確認する方法
お手持ちのプロセッサがIntel VT/AMD-Vに対応しているかは、Linuxのコマンドラインから下記のコマンドを実行することでも確認できます。
cat /proc/cpuinfo | grep flags
仮想化に対応したプロセッサで上記コマンドを実行すると、プロセッサの種類に応じてフラグが表示されるはずです。
vmx … Intel VTをサポートしたIntelプロセッサの場合
svm … AMD-VをサポートしたAMDプロセッサの場合
Intel製プロセッサの場合の例
$ cat /proc/cpuinfo | grep flags
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx smx est tm2 cx16 xtpr lahf_lm
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx smx est tm2 cx16 xtpr lahf_lm
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx smx est tm2 cx16 xtpr lahf_lm
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx smx est tm2 cx16 xtpr lahf_lm
AMD製プロセッサの場合の例
$ cat /proc/cpuinfo | grep flags
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy smv extapic cr8_legacy
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy smv extapic cr8_legacy
ただし、プロセッサが仮想化支援技術に対応しているにもかかわらず、BIOSやOSに問題があると、必要なフラグが表示されない場合もあります。仮想化対応かもしれないプロセッサ上で試した結果、フラグが表示されなかった場合でも、すぐには諦めず、後述するBIOSの設定確認やアップデート、場合によっては違うLinuxのLive CD等からブートし、試してみてください。
マザーボード
現在、新品として流通しているマザーボードのほとんどが仮想化支援機能に対応していると思われますが、残念ながら、どのマザーボードがに対応しているかを簡単に判別する方法はありません。マザーボードを新たに選択する場合は、Linux KVMの動作実績があるか、BIOSのアップデート内容などに仮想化支援機能の対応について記述があるか、などを確認の上選定するとよいでしょう。
また、仮想化支援機能に対応しているマザーボードでも、最新BIOSのアップグレードが必要だったり、BIOSの設定画面上で仮想化支援機能を「無効」から「有効」に設定変更しなければならない場合があります。
メモリ
仮想マシンを使用する場合は、ホストOSとゲストOSを同時実行させることになりますので、最低1GB程度は搭載しておきましょう。最近はメモリの価格が安くなっていますので、4~8GB程度搭載しておくと、個人ユーザであれば十分に仮想マシンを実行できるでしょう。
ハードディスク
仮想マシンを利用する場合は、複数のコンピュータのディスクイメージをハードディスク上に保存することになります。このため、できるだけ大容量のハードディスクのご利用をお勧めします。
最近は4096バイトセクタのディスクも存在しますが、仮想マシンの実行時にはランダムアクセスが多くなりがちですので、従来の512バイトセクタ製品を選ぶほうが無難です。予算に都合がつくのであれば、ランダムアクセスに強いSSDも検討してみてはいかがでしょうか。
そのほかの注意点
また、製品によっては仮想化支援機能が利用できない場合がありますので注意してください。以下のようなパターンがありがちです。
たとえば、ソニーの過去のVAIOシリーズでは、Core2プロセッサ搭載機でもIntel VTが無効化されているものがありました。同シリーズはBIOSアップデートにより有効化できるようになりましたが、新たにコンピュータを用意する場合は、できるだけ事前にLinux KVMの動作実績を確認した上で選ぶとよいでしょう。
ホストOSインストール時の留意事項
本稿ではDebian GNU/Linuxのインストール方法について細かくは解説しませんが、Linux KVMを利用するにあたり、インストール時に留意したい事項について、以下にまとめます。
amd64版をインストールする
Linux KVMを満足に動作させるためには、大きなメモリ空間が必要になります。このため、ホストOSは64ビット構成で構築しましょう。
Debian GNU/Linuxの場合、64ビット版はamd64と表示されているものになります。また、その他のLinuxディストリビューションでは、x86_64と表記されている場合があります。ホストOSとして利用するためにディストリビューションを入手する際には、これらの表記から64ビット版を選択してください。
ディスクの構成
Linux KVMを使う場合、ストレージとして、主に以下の方法が利用できます。
イメージファイル
ブロックデバイス(ディスク全体、もしくはパーティション)
論理ボリュームマネージャー(LVM)による論理ボリューム
残念ながらイメージファイルを利用した場合は性能が出にくいため、LVM(論理ボリュームマネージャー)を使って作成したLV(論理ボリューム)を仮想マシンに割り当てることをお勧めします。今回は、以下のイメージでファイルシステムを作成しました。
表2 インストール時のディスクレイアウト
パーティション 利用用途 容量
sda1 ルートファイルシステム(/) 32GB
sda2 スワップ領域として利用 4GB
sda3 未使用(のちにLVMの物理ボリュームとして利用) 120GB
残り領域は、一通りOSのインストールが終わった後にsda3としてパーティションし、LVMの物理ボリューム(PV)として利用するようにしました。
残り領域をLVMの物理ボリュームとして利用する
# fdisk /dev/sda
# reboot
# pvcreate /dev/sda3
# vgcreate pool /dev/sda3
最終的なディスクレイアウト
Device Boot Start End Blocks Id System
/dev/sda1 1 3891 31249408 83 Linux
/dev/sda2 3891 4377 3906560 82 Linux swap / Solaris
/dev/sda3 4377 19457 121131360+ 8e Linux LVM
Xデスクトップ環境
仮想マシンマネージャー(virt-manager)を利用できるよう、Xデスクトップ環境をインストールしておくことをお勧めします。
Xenはインストールしない
仮想化ソフトウェアのひとつであるXenをインストールするとLinux KVMは利用できなくなりますので、インストールしないようにしてください。XenをインストールしてしまいLinux KVMが利用できない場合は、XenがロードされないようGRUBの設定ファイル(/etc/default/grub)を書き換え、/usr/sbin/update-grubを実行する必要があります。
Linux KVM関連パッケージの導入と設定
物理マシンにDebian GNU/Linux 6.0をインストールしたら、aptitudeコマンドを使用して、以下の要領でvirt-manager、qemu-kvm、halをインストールします。その他の必要なパッケージは、依存関係によって自動インストールされます。
# aptitude install virt-manager qemu-kvm hal
また、libvirtグループに、仮想マシンの管理権限を持つべきUNIXユーザを追加します。ここで登録したユーザは、libvirtベースの管理ソフトウェアである仮想マシンマネージャー(virt-manager)を通して、Linux KVMの仮想マシンを管理できるようになります。
# adduser hasegaw libvirt
ユーザ `hasegaw' をグループ `libvirt' に追加しています...
ユーザ hasegaw をグループ libvirt に追加
完了。
ネットワークの設定
Linux KVMで動作する仮想マシンをネットワークに接続する方法として、主に以下の4つのパターンがあります。
ブリッジ接続(物理マシンと同じように、直接ネットワークに接続する)
NAT接続(物理マシンに割り当てられたIPアドレスを共有する)
NATを使わないルーティング(物理マシン内に独立したネットワークセグメントを作成し、ルーティングで接続する)
ホストオンリー(物理マシン内のみのネットワークとし、外部ネットワークとは接続しない)
このうち、もっともよく使う方法はブリッジ接続とNAT接続でしょう。ここでは、ブリッジ接続とNAT接続の方法について簡単に触れておきたいと思います。
ブリッジ接続の場合
Linux KVMの仮想マシンをネットワークに接続したい場合、仮想マシンをネットワークに直に接続した状態としたいケースが多いと思います。このような接続方法を「ブリッジ接続」と呼びます。ブリッジ接続では、ゲストOSに独立したIPアドレスを割り当てられるため、サーバとしての利用に向いています。
図2 ブリッジ接続(ネットワーク論理構成)
図3 ブリッジ接続(ホスト内のネットワーク構成)
仮想マシンをブリッジ接続する場合には、Linuxを実行する物理マシンでブリッジインターフェースを有効化しておく必要があります。
以下は、物理ネットワークインターフェースeth0と接続されたブリッジ インターフェースbr0を作成する場合の設定例です。IPアドレスをeth0ではなくbr0に設定し、bridge_portsの指定で物理ネットワークインターフェース名を指定している点がポイントです。
物理マシンの/etc/network/interfacesの例
# The loopback network interface
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.0.2
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.254
bridge_ports eth0
設定を終えOSを再起動した後にbrctl showコマンドを実行すると、下記のような出力が得られるはずです。
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.001b7837f6c8 no eth0
pan0 8000.000000000000 no
NAT接続の場合
ノートパソコンで出先のネットワークに接続する場合など、接続先ネットワークを切り替える場合には、NAT接続がおすすめです。NAT接続を利用する場合は、ホストOSとなるLinuxをルーターに見立てて接続します。仮想マシン上で動作するゲストOSから送信されたパケットは、NAT(Network Address Translation)によって、送信元アドレスがホストOSのIPアドレス(図の場合は192.168.0.2)に付け替えられてネットワーク上のサーバに送信されます。
NAT接続では、IPアドレスが1つしか割り当てられないような状況下でも、ホストOSとゲストOSの両方から外部ネットワークに接続できるメリットがあります。各自の開発用PC内で開発/テスト用のゲストOSを動かしたい場合などに有用ですが、サーバの仮想化には向きません。
図4 NAT接続(ネットワーク論理構成)
図5 NAT接続(ホスト内のネットワーク構成)
Debian GNU/Linux 6.0環境では、default(ブリッジ名:virbr0)というNAT用ネットワークが作成されていますので、とくに追加で設定する必要はありません。
仮想マシンのマネージャーの利用
GNOME環境から仮想マシンマネージャー(virt-manager)を起動するには、[ アプリケーションメニュー] →[ システムツール] →[ 仮想マシンマネージャー]を選択します。もしくは、シェル上からvirt-managerを起動してください。
図6 仮想マシンマネージャーの起動
図7 仮想マシンマネージャー
仮想マシンの作成
続いて、仮想マシンマネージャー上で新しい仮想マシンを作成する方法について紹介しましょう。仮想マシンのディスクは、先に作成したLVMから切り出して利用するため、仮想マシンの作成前に、新しい論理ボリュームを作成しておきます。
# lvcreate -L8G -n vm169 pool
Logical volume "vm169" created
論理ボリュームの準備ができたら、仮想マシンマネージャーのウインドウで「localhost (QEMU)」という部分を右クリックし、ポップアップメニューから「新規(N)」を選択するとウイザードが開始されます。さっそく、ゲストOSとしてDebian GNU/Linux 6.0をインストールしてみましょう。
図8 仮想マシン名の設定とインストール元メディアの選択
仮想マシン名、およびインストール元メディアの種類の選択です。今回は仮想マシン名を「vm169」 、インストール元メディアとしてISOファイルを使用するためLocal install media (ISO image or CDROM)を選択しました。
図9 インストール元メディアの選択
インストールに使用するOSメディアの入力です。Use ISO imageを選択し、あらかじめダウンロードしたdebian-6.0.0-amd64-netinst.isoファイルを指定しました。また、OSのバージョンとしてLinux, Debian Squeeze(Debian GNU/Linux 6.0のコードネーム)を選択しています。
図10 仮想CPU数、メモリ容量の選択
ここでは割り当てるメモリの容量、および仮想CPUの数を指定します。今回はデフォルト値から変更しませんでしたが、要件に合わせて割当量を指定します。
図11 仮想ディスクの設定
仮想マシンに接続するストレージの設定です。ここでは、あらかじめ作成した論理ボリュームvm169を使用するため、/dev/pool/vm169を指定しました。
図12 ネットワークの設定(NAT接続する場合)
仮想マシンの構成の最終確認、および接続先ネットワークについての設定です。Advanced options直下に仮想ネットワークの選択肢があり、最初は 'default':NAT となっているかと思います。この状態では、NAT接続となり、仮想マシンはホストOSが持つIPアドレスを利用して外部ネットワークと通信します。
図13 ネットワークの設定(ブリッジ接続する場合)
ホストOSが接続されたネットワークと同じネットワークに接続したい場合は、上記の要領で仮想マシンを接続するブリッジ名を指定します。
図14 仮想マシン、実行開始!
ここまでの作業を完了すると、仮想マシンが作成され、パワーオンできる状態となります。OSのインストールは、物理マシンでも、仮想マシンでも、ほぼ同じように行えます。
仮想マシンの実行と停止
仮想マシンを起動したり停止したりするには幾つかの方法があります。仮想マシンマネージャー上から仮想マシンの状態を変更したい場合は、対象の仮想マシンを右クリックし、表示されたポップアップから操作します。
図15 仮想マシンを右クリックし表示されたポップアップメニュー
apt-getコマンドを用いたソースファイルの入手
Debian GNU/Linuxの利点のひとつとして、ディストリビューション標準のパッケージ管理コマンドを使って、パッケージのソースファイルをダウンロードできる点が挙げられます。以下に、Linux KVMを構成するqemu-kvmおよびKVMカーネルモジュールのソースコードを入手する方法について解説します。なお、事前に/aptの設定(/etc/apt/sources.list)でdeb-srcの指定が必要です。詳しくはディストリビューションのドキュメントなどを参照してください。
qemu-kvm
qemu-kvmのパッケージのソースコードを取得します。下記コマンドを実行すると、カレントディレクトリにqemu-kvmのソースファイルが保存され、またそれらを展開したディレクトリが作成されます。
$ apt-get source qemu-kvm
《中略》
$ ls -1d qemu-kvm*
qemu-kvm-0.12.5+dfsg
qemu-kvm_0.12.5+dfsg-5.diff.gz
qemu-kvm_0.12.5+dfsg-5.dsc
qemu-kvm_0.12.5+dfsg.orig.tar.gz
Linuxカーネル
Linux KVMカーネルモジュールのソースコードはLinuxカーネルのソース中に含まれていますので、Linuxカーネルのパッケージを入手します。
Linuxカーネルのソースコードはユーザの手でよくコンパイルにされるもののため、apt-get sourceではなくとも、aptitudeコマンドでダウンロードできるようになっています。
# aptitude install linux-source-2.6
《中略》
# ls -1d /usr/src/*
/usr/src/linux-source-2.6.32.tar.bz2
$ tar xvjf /usr/src/linux-source-2.6.32.tar.bz2
《Linuxソースが展開される》
オープンソースカンファレンス 2011 Tokyo/Springのご案内
2011年3月5日(土)に早稲田大学(西早稲田キャンパス63号館、61号館)で開催される「オープンソースカンファレンス2011 Tokyo/Spring」にて、仮想化友の会によるブース出展のほか、セミナー「かそうかとものかい こいばな」を開催します。このセミナーでは、Linux KVM等の仮想マシンソフトウェアで利用できるドライバインターフェース「virtio」の仕組みや実装について、本連載の著者である長谷川 猛氏が解説予定です。興味をお持ちのお方は、詳細について下記URLをご覧ください。
オープンソースカンファレンス2011 Tokyo/Spring - オープンソースの文化祭!
URL:http://www.ospn.jp/osc2011-spring/
次回予告
今回はDebian GNU/Linux 6.0でLinux KVMを体験するまでの流れを紹介しました。これまでLinux KVMについてご存じなかった方や、まだ試したことがない方にとっては、実際に動かしてみたりスクリーンショットを見ることで、Linux KVMやシステム仮想マシンのイメージがずいぶんと沸いたのではないでしょうか?
次回からは、より具体的に仮想マシンソフトウェアの中身について解説します。まずはCPUの仮想化がどのように実現されているのか解説します。お楽しみに。