仮想化 · 4 min read · Jan 12, 2026
Ubuntu 12.04 LTS における KVM を使用した仮想化
Ubuntu 12.04 LTS における KVM を使用した仮想化
バージョン 1.0
著者: Falko Timme
Twitterでフォローしてください
このガイドでは、Ubuntu 12.04 LTS サーバー上で仮想マシンを作成および実行するために KVM をインストールして使用する方法を説明します。イメージベースの仮想マシンと論理ボリューム (LVM) を使用する仮想マシンの作成方法を示します。KVM は Kernel-based Virtual Machine の略で、ハードウェア仮想化を利用します。つまり、ハードウェア仮想化をサポートする CPU(例: Intel VT または AMD-V)が必要です。
これがあなたにとってうまくいくことを保証するものではありません!
1 前提条件
ここでは、ホスト名 server1.example.com および IP アドレス 192.168.0.100 のマシンを KVM ホストとして使用しています。
このチュートリアルのすべての手順を root 権限で実行するため、チュートリアル内のすべてのコマンドの前に文字列 sudo を付けるか、次のようにして今すぐ root になります。
sudo su2 KVM と vmbuilder のインストール
まず、CPU がハードウェア仮想化をサポートしているかどうかを確認します。これが当てはまる場合、次のコマンドを実行します。
egrep '(vmx|svm)' --color=always /proc/cpuinfo何かが表示されるはずです。例えば、次のようになります。
root@server1:~# egrep '(vmx|svm)' --color=always /proc/cpuinfo
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 nopl extd_apicid
pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv
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 nopl extd_apicid
pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv
root@server1:~#何も表示されない場合、プロセッサはハードウェア仮想化をサポートしていないため、ここで停止する必要があります。
KVM と vmbuilder(Ubuntu ベースの仮想マシンを作成するためのスクリプト)をインストールするには、次のコマンドを実行します。
apt-get install ubuntu-virt-server python-vm-builder kvm-ipxeその後、現在ログインしているユーザー(root)を libvirtd グループに追加する必要があります。
adduser `id -un` libvirtd
adduser `id -un` kvm新しいグループメンバーシップが有効になるためには、ログアウトして再度ログインする必要があります。
KVM が正常にインストールされたかどうかを確認するには、次のコマンドを実行します。
virsh -c qemu:///system list次のような出力が表示されるはずです。
root@server1:~# virsh -c qemu:///system list
Id Name State
----------------------------------
root@server1:~#エラーが表示される場合は、何かがうまくいかなかったことになります。
次に、仮想マシンが他のホストから物理システムのようにアクセスできるように、サーバーにネットワークブリッジを設定する必要があります。
これを行うために、bridge-utils パッケージをインストールします…
apt-get install bridge-utils… そしてブリッジを構成します。/etc/network/interfaces を開きます。
vi /etc/network/interfaces変更前の私のファイルは次のようになります。
| # このファイルは、システムで利用可能なネットワークインターフェースと、それらを有効にする方法を説明します。詳細については interfaces(5) を参照してください。 # ループバックネットワークインターフェース auto lo iface lo inet loopback # プライマリネットワークインターフェース auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4 |
これを次のように変更します。
| # このファイルは、システムで利用可能なネットワークインターフェースと、それらを有効にする方法を説明します。詳細については interfaces(5) を参照してください。 # ループバックネットワークインターフェース auto lo iface lo inet loopback # プライマリネットワークインターフェース auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 192.168.0.100 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off |
(ネットワークに適した設定を使用していることを確認してください!)
ネットワークを再起動します…
/etc/init.d/networking restart… そして次のコマンドを実行します。
ifconfigこれでネットワークブリッジ (br0) が表示されるはずです。
root@server1:~# ifconfig
br0 Link encap:Ethernet HWaddr 00:1e:90:f3:f0:02
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:29 errors:0 dropped:0 overruns:0 frame:0
TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1934 (1.9 KB) TX bytes:2844 (2.8 KB)
eth0 Link encap:Ethernet HWaddr 00:1e:90:f3:f0:02
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:44613 errors:0 dropped:0 overruns:0 frame:0
TX packets:23445 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:63663064 (63.6 MB) TX bytes:1792940 (1.7 MB)
Interrupt:41 Base address:0xa000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
virbr0 Link encap:Ethernet HWaddr 2a:4a:49:13:de:8f
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
root@server1:~#最初の仮想マシンを起動する前に、システムを再起動することをお勧めします。
rebootこれを行わないと、/var/log/libvirt/qemu/ ディレクトリ内の仮想マシンログに open /dev/kvm: Permission denied のようなエラーが表示される可能性があります。
3 イメージベースの VM の作成
これで最初の VM - イメージベースの VM を作成できます(トラフィックが多く、VM に対して多くの読み書き操作が予想される場合は、LVM ベースの VM を使用してください。イメージベースの VM はハードディスク IO に負荷がかかります)。
仮想マシンを /var/lib/libvirt/images/ ディレクトリに作成したいと思います(libvirt-qemu ユーザーがそのディレクトリに対して読み取り権限を持っていないため、/root ディレクトリには作成できません)。
作成したい各 VM のために新しいディレクトリを作成します。例えば、/var/lib/libvirt/images/vm1、/var/lib/libvirt/images/vm2、/var/lib/libvirt/images/vm3 などです。各 VM には ubuntu-kvm というサブディレクトリがあり、明らかに /var/lib/libvirt/images/vm1 にはそのようなディレクトリが 1 つしか存在できません。例えば、/var/lib/libvirt/images/vm1 に 2 番目の VM を作成しようとすると、ubuntu-kvm already exists というエラーメッセージが表示されます(–dest=DESTDIR 引数を使用して vmbuilder を実行しない限り):
root@server1:/var/lib/libvirt/images/vm1# vmbuilder kvm ubuntu -c vm2.cfg
2009-05-07 16:32:44,185 INFO Cleaning up
ubuntu-kvm already exists
root@server1:/var/lib/libvirt/images/vm1#VM を作成するために vmbuilder ツールを使用します。(vmbuilder についての詳細はここで学べます。)vmbuilder はテンプレートを使用して仮想マシンを作成します。このテンプレートは /etc/vmbuilder/libvirt/ ディレクトリにあります。まず、コピーを作成します。
mkdir -p /var/lib/libvirt/images/vm1/mytemplates/libvirt
cp /etc/vmbuilder/libvirt/* /var/lib/libvirt/images/vm1/mytemplates/libvirt/次に、VM のパーティショニングに進みます。vmbuilder.partition というファイルを作成します…
vi /var/lib/libvirt/images/vm1/vmbuilder.partition… そして、希望するパーティションを次のように定義します。
| root 8000 swap 4000 --- /var 20000 |
これは、サイズ 8000MB のルートパーティション (/) と 4000MB のスワップパーティション、20000MB の /var パーティションを定義します。— 行は、次のパーティション (/var のこの例) が別のディスクイメージにあることを示します(つまり、これはルートとスワップ用の 1 つのディスクイメージと /var 用の 1 つのディスクイメージを作成します)。もちろん、好きなパーティションを定義することができます(ルートとスワップも定義する限り)、そしてもちろん、それらは 1 つのディスクイメージにすることもできます - これは単なる例です。
VM に openssh-server をインストールしたいと思います。各 VM に一意の OpenSSH キーが割り当てられるように、VM を作成するときに openssh-server をインストールすることはできません。したがって、VM が最初に起動したときに実行される boot.sh というスクリプトを作成します。これにより、openssh-server(ユニークなキーで)をインストールし、ユーザー(私は VM のデフォルトユーザー名 administrator を使用し、デフォルトパスワード howtoforge を使用します)に初回ログイン時にパスワードを変更させます。
vi /var/lib/libvirt/images/vm1/boot.sh| # このスクリプトは、仮想マシンが最初に起動したときに実行されます。 # root として実行されます。 # ユーザーアカウントの期限切れ passwd -e administrator # openssh-server をインストール apt-get update apt-get install -qqy --force-yes openssh-server |
ユーザー名 administrator をデフォルトのログイン名に置き換えることを確認してください。
(詳細については、こちらを参照してください: https://help.ubuntu.com/community/JeOSVMBuilder#First%20boot)
(こちらに記載されているように「初回ログイン」スクリプトを定義することもできます: https://help.ubuntu.com/community/JeOSVMBuilder#First%20login)
次に、
vmbuilder kvm ubuntu --helpを見て、利用可能なオプションについて学びます。
最初の VM、vm1 を作成するために、VM ディレクトリに移動します…
cd /var/lib/libvirt/images/vm1/… そして vmbuilder を実行します。例えば、次のようにします。
vmbuilder kvm ubuntu --suite=precise --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --ip=192.168.0.101 --gw=192.168.0.1 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0ほとんどのオプションは明白です。–part は、作業ディレクトリに対して相対的なパーティション詳細を含むファイルを指定します(そのため、vmbuilder を実行する前に VM ディレクトリに移動する必要がありました)、–templates はテンプレートファイルを保持するディレクトリを指定します(これも作業ディレクトリに対して相対的です)、–firstboot は初回起動スクリプトを指定します。–libvirt=qemu:///system は KVM にこの VM を利用可能な仮想マシンのリストに追加するよう指示します。–addpkg は、VM 作成中にインストールしたい Ubuntu パッケージを指定できます(上記の理由から、openssh-server をそのリストに追加しないで、代わりに初回起動スクリプトを使用することをお勧めします)。–bridge はブリッジネットワークを設定します。第 2 章で br0 ブリッジを作成したため、ここでそのブリッジを指定します。
–mirror 行では、公式の Ubuntu リポジトリを指定できます。例えば、http://de.archive.ubuntu.com/ubuntu のように。–mirror を省略すると、デフォルトの Ubuntu リポジトリ(http://archive.ubuntu.com/ubuntu)が使用されます。
–ip スイッチに IP アドレスを指定する場合は、–gw スイッチを使用して正しいゲートウェイ IP も指定してください(そうしないと、vmbuilder はネットワーク内の最初の有効なアドレスであると仮定する可能性がありますが、正しくない場合があります)。通常、ゲートウェイ IP は /etc/network/interfaces で使用するものと同じです(第 2 章を参照)。
ビルドプロセスには数分かかる場合があります。
その後、/etc/libvirt/qemu/ に VM の XML 構成ファイルが見つかります(=> /etc/libvirt/qemu/vm1.xml):
ls -l /etc/libvirt/qemu/root@server1:/var/lib/libvirt/images/vm1# ls -l /etc/libvirt/qemu/
total 8
drwxr-xr-x 3 root root 4096 May 21 13:00 networks
-rw------- 1 root root 2082 May 21 13:15 vm1.xml
root@server1:/var/lib/libvirt/images/vm1#ディスクイメージは、VM ディレクトリの ubuntu-kvm/ サブディレクトリにあります。
ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/root@server1:/var/lib/libvirt/images/vm1# ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/
total 604312
-rw-r--r-- 1 root root 324337664 May 21 13:14 tmpE4IiRv.qcow2
-rw-r--r-- 1 root root 294715392 May 21 13:15 tmpxvSVOT.qcow2
root@server1:/var/lib/libvirt/images/vm1#新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。