仮想化 · 4 min read · Nov 30, 2025
CentOS 6.2 における Xen を用いた仮想化 (準仮想化 & ハードウェア仮想化)
CentOS 6.2 における Xen を用いた仮想化 (準仮想化 & ハードウェア仮想化)
バージョン 1.0
著者: Falko Timme
Twitter でフォローしてください
このチュートリアルでは、CentOS 6.2 (x86_64) システムに Xen (バージョン 4.1.2) をインストールする手順を説明します。
Xen を使用すると、ホストオペレーティングシステム (dom0) の下に、ゲストオペレーティングシステム (*nix オペレーティングシステム、Linux や FreeBSD など) を作成できます。これらは「仮想マシン」または domU と呼ばれます。Xen を使用すると、アプリケーションを異なる仮想マシンに分離でき、これらは互いに完全に独立しています (例: メールサーバー用の仮想マシン、高トラフィックのウェブサイト用の仮想マシン、顧客のウェブサイトを提供する別の仮想マシン、DNS 用の仮想マシンなど)。これにより、同じハードウェアを使用しながらコストを節約でき、さらに重要なことに、より安全です。DNS サーバーの仮想マシンがハッキングされても、他の仮想マシンには影響を与えません。また、仮想マシンを一つの Xen サーバーから別の Xen サーバーに移動することもできます。
ホスト OS (dom0) とゲスト OS (domU) の両方に CentOS 6.2 (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" NM_CONTROLLED="yes" ONBOOT=yes HWADDR=00:1E:90:F3:F0:02 TYPE=Ethernet #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 eth0" UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 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:17 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:1196 (1.1 KiB) TX bytes:2794 (2.7 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:4554 errors:0 dropped:0 overruns:0 frame:0
TX packets:3020 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6249612 (5.9 MiB) TX bytes:254928 (248.9 KiB)
Interrupt:25 Base address:0x6000
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:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1304 (1.2 KiB) TX bytes:1304 (1.2 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 wgetyum 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.54-1.el6xen.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM initrd /initramfs-2.6.32.54-1.el6xen.x86_64.img [...] |
そのセクションを修正して、最初に Xen ハイパーバイザーがロードされるようにします。カーネル /vmlinuz… 行の最初の単語 kernel を module に置き換えます。同様に、次の行でも最初の単語 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.54-1.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.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM module /initramfs-2.6.32.54-1.el6xen.x86_64.img [...] |
default の値を 0 に変更します (これにより、最初のカーネル (Xen カーネル) がデフォルトでブートされます):
| [...] default=0 [...] |
完全な /boot/grub/menu.lst は次のようになります:
| # grub.conf generated by anaconda # # このファイルに変更を加えた後、grub を再実行する必要はありません # 注意: /boot パーティションがあります。これは、 # すべてのカーネルと initrd パスが /boot/ に対して相対的であることを意味します。 例: # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/VolGroup00-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.54-1.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.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM module /initramfs-2.6.32.54-1.el6xen.x86_64.img title CentOS (2.6.32-220.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM initrd /initramfs-2.6.32-220.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-devellibvirt のバージョンを確認しましょう:
rpm -qa | grep libvirt[root@server1 ~]# rpm -qa | grep libvirt
libvirt-client-0.9.4-23.el6_2.4.x86_64
libvirt-0.9.4-23.el6_2.4.x86_64
libvirt-python-0.9.4-23.el6_2.4.x86_64
[root@server1 ~]#バージョンは 0.9.4 ですので、適切な src.rpm パッケージを /root/src にダウンロードしてインストールします:
mkdir /root/src
cd /root/src
wget http://vault.centos.org/6.2/os/Source/SPackages/libvirt-0.9.4-23.el6.src.rpm
rpm -i libvirt-0.9.4-23.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.4-23.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-client-0.9.4-23.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-devel-0.9.4-23.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-lock-sanlock-0.9.4-23.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-python-0.9.4-23.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-debuginfo-0.9.4-23.el6.x86_64.rpm新しいパッケージが作成されたディレクトリ (/root/rpmbuild/RPMS/x86_64/) に移動します…
cd /root/rpmbuild/RPMS/x86_64/… そして新しい libvirt パッケージ (Xen サポート付き) を次のようにインストールします:
rpm -Uvh --force libvirt-0.9.4-23.el6.x86_64.rpm libvirt-client-0.9.4-23.el6.x86_64.rpm libvirt-python-0.9.4-23.el6.x86_64.rpmその後、システムを再起動します:
rebootシステムは新しい Xen カーネルで自動的にブートされるはずです。システムがブートした後、次のコマンドを実行して確認できます:
uname -r[root@server1 ~]# uname -r
2.6.32.54-1.el6xen.x86_64
[root@server1 ~]#これで本当に新しい Xen カーネルを使用しています!
次に、次のコマンドを実行して
xm listXen が起動しているかどうかを確認します。Domain-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 ~]#新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。