仮想化 · 4 min read · Dec 08, 2025
CentOS 6.3 (x86_64) における Xen を用いた仮想化 (パラ仮想化 & ハードウェア仮想化)
CentOS 6.3 (x86_64) における Xen を用いた仮想化 (パラ仮想化 & ハードウェア仮想化)
バージョン 1.0
著者: Falko Timme
Twitterでフォローしてください
このチュートリアルでは、CentOS 6.3 (x86_64) システムに Xen (バージョン 4.1.x) をインストールする手順を説明します。
Xen を使用すると、ホストオペレーティングシステム (dom0) の下に、ゲストオペレーティングシステム (*nix オペレーティングシステム、Linux や FreeBSD など) を作成できます。これらは「仮想マシン」または domU と呼ばれます。Xen を使用すると、アプリケーションを完全に独立した異なる仮想マシンに分離できます (例: メールサーバー用の仮想マシン、高トラフィックのウェブサイト用の仮想マシン、顧客のウェブサイトを提供する別の仮想マシン、DNS 用の仮想マシンなど)。これにより、同じハードウェアを使用しながらコストを削減でき、さらに重要なことに、より安全です。DNS サーバーの仮想マシンがハッキングされた場合でも、他の仮想マシンには影響を与えません。また、仮想マシンを一つの Xen サーバーから別のサーバーに移動することもできます。
ホスト OS (dom0) とゲスト OS (domU) の両方に CentOS 6.3 (x86_64) を使用します。
このハウツーは実用的なガイドとして意図されており、理論的な背景については説明していません。これらはウェブ上の他の多くの文書で扱われています。
この文書にはいかなる種類の保証もありません!これはこのようなシステムを設定する唯一の方法ではないことをお伝えしたいと思います。この目標を達成する方法はたくさんありますが、これは私が取る方法です。これがあなたにとって機能することを保証するものではありません!
1 予備ノート
このガイドでは、イメージベースの仮想マシンと LVM ベースの仮想マシンを設定する方法を説明します。
SELinux が無効または許可されていることを確認してください:
vi /etc/sysconfig/selinux| # このファイルはシステム上の SELinux の状態を制御します。 # SELINUX= は次の 3 つの値のいずれかを取ります: # enforcing - SELinux セキュリティポリシーが強制されます。 # permissive - SELinux は強制する代わりに警告を表示します。 # disabled - SELinux は完全に無効です。 SELINUX=disabled # SELINUXTYPE= 使用中のポリシーのタイプ。可能な値は: # targeted - 対象とされたネットワークデーモンのみが保護されます。 # strict - 完全な SELinux 保護。 SELINUXTYPE=targeted |
/etc/sysconfig/selinux を変更した場合は、システムを再起動してください:
reboot2 ネットワークブリッジの作成
仮想マシンが他のホストから物理システムのようにアクセスできるように、サーバーにネットワークブリッジを設定する必要があります。
これを行うために、bridge-utils パッケージをインストールします…
yum install bridge-utils… そしてブリッジを設定します。/etc/sysconfig/network-scripts/ifcfg-br0 ファイルを作成します (IPADDR、PREFIX、GATEWAY、DNS1、および DNS2 の値は /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルから取得してください); TYPE=Bridge を使用することを確認してください。TYPE=Ethernet ではありません:
vi /etc/sysconfig/network-scripts/ifcfg-br0| DEVICE="br0" NM_CONTROLLED="yes" ONBOOT=yes TYPE=Bridge BOOTPROTO=none IPADDR=192.168.0.100 PREFIX=24 GATEWAY=192.168.0.1 DNS1=8.8.8.8 DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System br0" |
/etc/sysconfig/network-scripts/ifcfg-eth0 を次のように変更します (BOOTPROTO、IPADDR、PREFIX、GATEWAY、DNS1、および DNS2 をコメントアウトし、BRIDGE=br0 を追加します):
vi /etc/sysconfig/network-scripts/ifcfg-eth0| DEVICE="eth0" #BOOTPROTO=none NM_CONTROLLED="yes" ONBOOT=yes TYPE="Ethernet" UUID="73cb0b12-1f42-49b0-ad69-731e888276ff" HWADDR=00:1E:90:F3:F0:02 #IPADDR=192.168.0.100 #PREFIX=24 #GATEWAY=192.168.0.1 #DNS1=8.8.8.8 #DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" BRIDGE=br0 |
ネットワークを再起動します…
/etc/init.d/network 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:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:460 (460.0 b) TX bytes:2298 (2.2 KiB)
eth0 Link encap:Ethernet HWaddr 00:1E:90:F3:F0:02
inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18455 errors:0 dropped:0 overruns:0 frame:0
TX packets:11861 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26163057 (24.9 MiB) TX bytes:1100370 (1.0 MiB)
Interrupt:25 Base address:0xe000
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:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2456 (2.3 KiB) TX bytes:2456 (2.3 KiB)
[root@server1 ~]#3 Xen のインストール
まず、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 pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse
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 pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse
[root@server1 ~]#何も表示されない場合、プロセッサはハードウェア仮想化をサポートしていません。これは、Xen でパラ仮想化のみを使用でき、ハードウェア仮想化は使用できないことを意味します。
CentOS 6 は RedHat 6 に基づいており、RedHat はバージョン 6 で Xen のサポートを終了したため、サードパーティのリポジトリから Xen を取得する必要があります。リポジトリを次のように有効にします:
yum install http://au1.mirror.crc.id.au/repo/kernel-xen-release-6-3.noarch.rpmXen をインストールするには、次のコマンドを実行します:
yum install kernel-xen xenこれにより、CentOS システムに Xen と Xen カーネルがインストールされます。
Xen カーネルでシステムをブートする前に、GRUB ブートローダーの設定を確認してください。/boot/grub/menu.lst を開きます:
vi /boot/grub/menu.lst最初にリストされているカーネルは、先ほどインストールした Xen カーネルである必要があります:
| [...] title CentOS (2.6.32.57-2.el6xen.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32.57-2.el6xen.x86_64 ro root=/dev/mapper/vg_server1-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=vg_server1/LogVol01 rd_LVM_LV=vg_server1/LogVol00 rd_NO_DM rhgb quiet initrd /initramfs-2.6.32.57-2.el6xen.x86_64.img [...] |
そのセクションを修正して、最初に Xen ハイパーバイザーがロードされるようにします。カーネル /vmlinuz… 行の最初の単語 kernel を module に置き換えます。次の行でも同様に、initrd /initramfs… 行の最初の単語 initrd を module に置き換えます。次に、root 行の後、最初の module 行の前に、次の行を追加します: kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin (CPU コアが 1 つ以上ある場合は、dom0_max_vcpus に 1 以外の数を指定できます)。最終的なカーネルセクションは次のようになります:
| [...] title CentOS (2.6.32.57-2.el6xen.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin module /vmlinuz-2.6.32.57-2.el6xen.x86_64 ro root=/dev/mapper/vg_server1-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=vg_server1/LogVol01 rd_LVM_LV=vg_server1/LogVol00 rd_NO_DM rhgb quiet module /initramfs-2.6.32.57-2.el6xen.x86_64.img [...] |
default の値を 0 に変更します (これにより、最初のカーネル (Xen カーネル) がデフォルトでブートされます):
| [...] default=0 [...] |
完全な /boot/grub/menu.lst は次のようになります:
| # grub.conf は anaconda によって生成されました # # このファイルに変更を加えた後、grub を再実行する必要はありません # 注意: /boot パーティションがあります。これは、 # すべてのカーネルと initrd パスが /boot/ に相対的であることを意味します。 例: # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/vg_server1-LogVol00 # initrd /initrd-[generic-]version.img #boot=/dev/sde default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32.57-2.el6xen.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin module /vmlinuz-2.6.32.57-2.el6xen.x86_64 ro root=/dev/mapper/vg_server1-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=vg_server1/LogVol01 rd_LVM_LV=vg_server1/LogVol00 rd_NO_DM rhgb quiet module /initramfs-2.6.32.57-2.el6xen.x86_64.img title CentOS (2.6.32-279.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=/dev/mapper/vg_server1-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=vg_server1/LogVol01 rd_LVM_LV=vg_server1/LogVol00 rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-279.el6.x86_64.img |
再起動する前に、libvirt と python-virtinst (後で Xen VM をインストールするために使用する virt-install ツールを含む) パッケージをインストールします:
yum install libvirt python-virtinstCentOS 6/RedHat 6 の libvirt パッケージには Xen のサポートがないため、Xen サポートを持つように再構築する必要があります。これを行うために、いくつかの前提条件を今インストールします:
yum groupinstall 'Development Tools'yum install python-devel xen-devel libxml2-devel xhtml1-dtds readline-devel ncurses-devel libtasn1-devel gnutls-devel augeas libudev-devel libpciaccess-devel yajl-devel sanlock-devel libpcap-devel libnl-devel avahi-devel libselinux-devel cyrus-sasl-devel parted-devel device-mapper-devel numactl-devel libcap-ng-devel netcf-devel libcurl-devel audit-libs-devel systemtap-sdt-devel libblkid-devel scrublibvirt のバージョンを確認しましょう:
rpm -qa | grep libvirt[root@server1 ~]# rpm -qa | grep libvirt
libvirt-client-0.9.10-21.el6_3.3.x86_64
libvirt-0.9.10-21.el6_3.3.x86_64
libvirt-python-0.9.10-21.el6_3.3.x86_64
[root@server1 ~]#バージョンは 0.9.10 ですので、適切な src.rpm パッケージを /root/src にダウンロードしてインストールします:
mkdir /root/src
cd /root/src
wget http://vault.centos.org/6.3/os/Source/SPackages/libvirt-0.9.10-21.el6.src.rpm
rpm -i libvirt-0.9.10-21.el6.src.rpm最後のコマンドは無視できる警告を表示します:
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root次に、libvirt ソースに Xen サポートをパッチします:
wget http://pasik.reaktio.net/xen/patches/libvirt-spec-rhel6-enable-xen.patch
cd /root/rpmbuild/SPECS
cp -a libvirt.spec libvirt.spec.orig
patch -p0 < ~/src/libvirt-spec-rhel6-enable-xen.patch新しい libvirt パッケージをビルドします:
rpmbuild -bb libvirt.specビルドプロセスの最後に、次のようなメッセージが表示されるはずです:
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-0.9.10-21.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-client-0.9.10-21.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-devel-0.9.10-21.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-lock-sanlock-0.9.10-21.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-python-0.9.10-21.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-debuginfo-0.9.10-21.el6.x86_64.rpm新しいパッケージが作成されたディレクトリ (/root/rpmbuild/RPMS/x86_64/) に移動します…
cd /root/rpmbuild/RPMS/x86_64/… そして新しい libvirt パッケージ (Xen サポート付き) を次のようにインストールします:
rpm -Uvh --force libvirt-0.9.10-21.el6.x86_64.rpm libvirt-client-0.9.10-21.el6.x86_64.rpm libvirt-python-0.9.10-21.el6.x86_64.rpmその後、システムを再起動します:
rebootシステムは新しい Xen カーネルで自動的にブートされるはずです。システムがブートした後、次のコマンドを実行して確認できます:
uname -r[root@server1 ~]# uname -r
2.6.32.57-2.el6xen.x86_64
[root@server1 ~]#これで本当に新しい Xen カーネルを使用しています!
次に、次のコマンドを実行して、Xen が起動しているかどうかを確認します:
xm listDomain-0 (dom0) がリストされるはずです:
[root@server1 ~]# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 1 r----- 18.9
[root@server1 ~]#xm コマンドの代わりに、これからは virsh コマンドを使用して Xen VM を管理します。これは libvirt を使用しているため、推奨される方法です。
virsh listは次のように表示されるはずです:
[root@server1 ~]# virsh list
Id Name State
----------------------------------------------------
0 Domain-0 running
[root@server1 ~]#新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。