Используется dom0 как базовая ос, а domU как гостевая. Статья предназначена в качестве практического руководства, и она не охватывает теоретической части и всех возможных проблем/решений. ВНИМАНИЕ! Не даю гарантий что все это будет работать у вас. Также данная статья справидлива для большенства других Linux дистрибутивов, конечно при внесении некоторых изменений.
Примечания
В статье описано как создать виртуальные машины image-based, а также LVM-based. Сначала нужно убедитесься, что отключен SELinux или же что в нем сделаны необходимые изменения:
nano /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
Если изменяли /etc/sysconfig/selinux необходимо перезагрузиться:
reboot
Создание сетевого моста (Network Bridge)
Это нужно чтобы виртуальные машины были доступны с других хостов, как если бы они были физическими системами в сети. Установим пакет 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):
nano /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):
nano /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
Перезагружаем network:
/etc/init.d/network restart
Посмотрим ifconfig:
ifconfig
[[email protected] ~]# 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)
[[email protected] ~]#
Установка Xen
Сначала нужно проверть поддерживает ли процессор аппаратную виртуализацию:
egrep '(vmx|svm)' --color=always /proc/cpuinfo
Должно получиться что-то похожее:
[[email protected] ~]# 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
[[email protected] ~]#
Если ничего не отображается, то ваш процессор не поддерживает аппаратную виртуализацию. Это значит можно использовать только паравиртуализацию.
Дистрибутив CentOS 6 основан на RedHat Linux 6, в нем была прекращена поддержка Xen. Поэтому придется ставить Xen из сторонних репозиториев. Добавить репу можно следующим образом:
yum install wget
cd /etc/yum.repos.d/
wget http://www.crc.id.au/repo/kernel-xen.repo
Для установки Xen и Xen kernel:
yum install kernel-xen xen
Прежде чем загрузиться с новым ядром, нужно посмотреть настройки загрузчика GRUB. Открываем /boot/grub/menu.lst:
nano /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 загружался первым. В строчке kernel /vmlinuz… замените kernel на module. То же самое нужно сделать в следующей строке initrd /initramfs — заменить первое слово с initrd на module… Затем добавьте строку kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin после root и перед первой строкой module (если у процессора больше чем одно ядро, можно указать другое число для dom0_max_vcpus). Должно получиться что-то вроде:
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
Общаа картина должна выглядеть примерно так:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# 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 (инструмент virt-install для настройки Xen VM):
yum install libvirt python-virtinst
Пакет Libvirt из CentOS 6/RedHat 6 не поддерживает 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
Посмотрим версию libvirt:
rpm -qa | grep libvirt
[[email protected] ~]# 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
[[email protected] ~]#
Получается версия 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
Далее патчим:
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
[[email protected] ~]# uname -r
2.6.32.54-1.el6xen.x86_64
[[email protected] ~]#
Чтобы проверить запущен ли Xen (Domain-0 (dom0)):
xm list
[[email protected] ~]# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 1 r----- 18.9
[[email protected] ~]#
Для управления Xen, вместо команды xm будет использоваться команда virsh потому что пользуемся libvirt:
virsh list
[[email protected] ~]# virsh list
Id Name State
----------------------------------
0 Domain-0 running
[[email protected] ~]#
Паравиртуализация
Создадим первую виртуальную машину image-based в директории /var/lib/libvirt/images/ которая создалась при установки libvirt. Для создания Xen VM, в CentOS есть отличный инструмент под названием virt-install. Для его запуска:
virt-install --prompt --network bridge=br0 --virt-type=xen
--network bridge=br0 указывает на наш сетевой мост, который сделали ранее. Далее будет задано несколько вопросов. Назвавем первую виртуальную машину vm01, ОЗУ = 1024 и диск размером в 10 Гб. И сохраним ее в файл /var/lib/libvirt/images/vm01.img. Стоит еще отметить вопрос «What is the install URL?» — тут указываем ближайшее зеркало, чтобы можно было скачать все необходимые файлы для установки CentOS 6 в виртуальную машину.
После virt-install начнет установку (в текстовом режиме) на vm01. Через некоторое время появиться возможность использовать VNC или же продолжить в установку в текстовом режиме:

В следующем диалоге можно задать пароль для соединения VNC (рекомендуется):

Далее последует информация о подключении к VNC. Откройте VNC клиент, введите IP и нажмите на кнопку Connect. Готово:

Чтобы выйти из консоли vm01 после установки, нажмите CTRL+] или CTRL+5. Теперь должны вернуться в консоль dom0.
Запустите:
virsh console vm01
Теперь можно войти в систему на виртуальной машине, используя SSH клиент для подключения.
Команда покажет список запущенных VW:
virsh list
[[email protected] ~]# virsh list
Id Name State
----------------------------------
0 Domain-0 running
2 vm01 idle
[[email protected] ~]#
Для завершения работы vm01:
virsh shutdown vm01
Для запуска vm01:
virsh start vm01
Вот наиболее важные команды для Xen:
virsh start name — Запуск VM.
virsh shutdown name — Остановка VW.
virsh destroy name — Экстренно вырубить виртуальную машину, не выключая ее саму. Все равно что выключить питание из розетки.
virsh list — Показать список запущенных систем.
virsh console name — Войти на VW.
virsh help — Список команд.
Создание виртуальной машины LVM-Based (Паравиртуализация)
Пойдет речь о настройки виртуальных машин LVM-Based, а не машин использующих образы дисков. Последний вариант очень медленный и тяжелый, потому рассмотрим другой.
Будем использовать к примеру тот же дистрибутив CentOS 6 с настройкой LVM группы /dev/VolGroup00 у которой есть около 465GB. /dev/VolGroup00 состоит из двух логических томов 1) /dev/VolGroup00/LogVol00 2) /dev/VolGroup00/LogVol01 потребляющий около 104GB — остальные место не занято, соответвенно его можно использовать для создания томов под виртуальные машины:
vgdisplay
[[email protected] ~]# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 465.26 GiB
PE Size 4.00 MiB
Total PE 119106
Alloc PE / Size 26250 / 102.54 GiB
Free PE / Size 92856 / 362.72 GiB
VG UUID LCdZgy-jVrp-S92Q-RQeI-H87G-jiko-4fmaHF
[[email protected] ~]#
lvdisplay
[[email protected] ~]# lvdisplay
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID n5remv-KYEE-O0Ry-g2r6-OrUe-rjyV-x65rHu
LV Write Access read/write
LV Status available
# open 1
LV Size 4.88 GiB
Current LE 1250
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID CnvnGP-sDL8-OtBU-OzTT-VjZQ-ZIUo-yzISkX
LV Write Access read/write
LV Status available
# open 1
LV Size 97.66 GiB
Current LE 25000
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1
[[email protected] ~]#
Создадим виртуальную машину vm02 с томом /dev/VolGroup00/vm02. Например на VW должно выделяться 10 Гб:
lvcreate -L10G -n vm02 VolGroup00
Затем моно выполнить:
virt-install --prompt --network bridge=br0 --virt-type=xen
Получим ряд вопросов, стоит отметить «What would you like to use as the disk (file path)? — тут указываем путь /dev/VolGroup00/vm02.
Использование virt-manager для создания и управления VM
На декстопе Linux, вместо VNC или текстового инсталлятора, можно воспользоватся virt-manager. В примере будет использован десктопный дистрибутив Fedora 16, а VM с CentOS 6 — это vm06:
virt-install --prompt --network bridge=br0 --virt-type=xen --vnc --noautoconsole
Важными параметрами являются --vnc и --noautoconsole, которые позволяют подключаться к инсталлятору с virt-manager. Далее также ответим на несколько вопросов:
[[email protected] ~]# virt-install --prompt --network bridge=br0 --virt-type=xen --vnc --noautoconsole
Would you like a fully virtualized guest (yes or no)? This will allow you to run unmodified operating systems.
<-- no
What is the name of your virtual machine?
<-- vm06
How much RAM should be allocated (in megabytes)?
<-- 1024
What would you like to use as the disk (file path)?
<-- /var/lib/libvirt/images/vm06.img
How large would you like the disk (/var/lib/libvirt/images/vm06.img) to be (in gigabytes)?
<-- 10
What is the install URL?
<-- http://ftp.url
Starting install...
Retrieving file .treeinfo... | 798 B 00:00 ...
Retrieving file vmlinuz... | 7.5 MB 00:01 ...
Retrieving file initrd.img... | 59 MB 00:10 ...
Allocating 'vm06.img' | 10 GB 00:00
Creating domain... | 0 B 00:01
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
[[email protected] ~]#
Для установки virt-manager на десктоп с Fedora 16:
su
yum install virt-manager openssh-askpass
Далее из меню графического окружения рабочего стола, запускаем Virtual Machine Manager. При запуске скорее всего появится сообщение — Packages required for KVM usage, которое можно проигнорировать.
Для подключения VM с CentOS выбираем File > Add Connection… В качестве гипервизора выберите Xen, а затем проверьте соединение с удаленным хостом, выберите в выпадающем меню SSH, введите имя пользователя root и имя хоста, например server.example.com или его IP-адрес 192.168.0.100. Затем нажмите на Connect. Если это первое подключение к удаленному серверу Xen, нужно ввести Yes и нажать на кнопку OK, затем напечатать пароль администратора CentOS. В результате в списке должны увидеть статус „vm06 running“. Для запуска консоли нужно нажать кнопку Open.


Теперь устанавливаем CentOS как обычно это делается на физической системе. В конце установки, гостевая система потребует перезагрузки. В результате чего нужно будет запустить ее снова из virt-manager или командой:
virsh start vm06
После этого можно подключиться через virt-manager и настроить систему. Также для удобства, на гостевой системе можно установить OpenSSH.
Аппаратная виртуализация
Создание из консоли
Для начала нужно положить образ (например с CentOS 6.2) в DVDROM, или скачать iso образ устанавливаемого дистрибутива в директорию /var/lib/libvirt/images/ (должен быть там для virt-manager). Кроме того, можно создать файл ISO с DVDROM следующим образом:
dd if=/dev/cdrom of=/var/lib/libvirt/images/CentOS-6.2-x86_64-bin-DVD1.iso
Установка:
virt-install --prompt --network bridge=br0 --virt-type=xen --vnc --noautoconsole
[[email protected] ~]# virt-install --prompt --network bridge=br0 --virt-type=xen --vnc --noautoconsole
Would you like a fully virtualized guest (yes or no)? This will allow you to run unmodified operating systems.
<-- yes
What is the name of your virtual machine?
<-- vm03
How much RAM should be allocated (in megabytes)?
<-- 1024
What would you like to use as the disk (file path)?
<-- /var/lib/libvirt/images/vm03.img
How large would you like the disk (/var/lib/libvirt/images/vm03.img) to be (in gigabytes)?
<-- 10
What is the install CD-ROM/ISO or URL?
<-- /dev/cdrom (или указать на iso образ /var/lib/libvirt/images/CentOS-6.2-x86_64-bin-DVD1.iso)
Starting install...
Creating domain... | 0 B 00:01
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
[[email protected] ~]#
Вот и все! Теперь открываем virt-manager и в перед.
Также вместо того чтобы создавать виртуальную машину из консоли, можно создать ее через virt-manager.
Управление Xen из консоли
Управлять Xen можно с помощью команды virsh (virtual shell). Для подключение к шеллу:
virsh
Список доступных команд:
help
Показывает все запущенные VM:
list
Показывает все VM:
list --all
virsh # list --all
Id Name State
----------------------------------
0 Domain-0 running
- vm01 shut off
virsh #
Запуск:
start vm10
Остановка:
shutdown vm10
Экстренная остановка:
destroy vm10
Приостановить:
suspend vm10
Выйти из шелл:
quit
источник:http://itbuben.org/blog/Unix-way/2216.html
ссылка на материал: http://thin.kiev.ua/linux/39-linux/646-xen-to-centos-linux-.html
{jcomments on}