KVM

KVM (Kernel-based Virtual Machine) — про­грамм­ное реше­ние, обес­пе­чи­ва­ю­щее вир­ту­а­ли­за­цию в сре­де Linux на плат­фор­ме x86, кото­рая под­дер­жи­ва­ет аппа­рат­ную вир­ту­а­ли­за­цию на базе Intel VT (Virtualization Technology) либо AMD SVM (Secure Virtual Machine).

Thank you for reading this post, don't forget to subscribe! 

Каж­дая вир­ту­аль­ная маши­на име­ет своё соб­ствен­ное вир­ту­аль­ное аппа­рат­ное обес­пе­че­ние: сете­вые кар­ты, диск, видео­кар­ту и дру­гие устройства.

Про­вер­ка под­держ­ки про­цес­со­ром виртуализации
# egrep '(svm|vmx)' /proc/cpuinfo
Пустой вывод у дан­ной коман­ды, озна­ча­ет отсут­ствие под­держ­ки аппа­рат­ной вир­ту­а­ли­за­ции. Если же коман­да про­из­ве­ла вывод фла­гов про­цес­со­ра, есть смысл начать уста­нов­ку kvm

Уста­нов­ка и запуск

# yum install kvm virt-manager libvirt

# /etc/init.d/libvirtd start

Про­вер­ка загруз­ки моду­лей kvm:

# lsmod | grep kvm

kvm_intel 54394 0
kvm 317504 1 kvm_intel

Уста­нов­ка необ­хо­ди­мых компоненты:

# yum install bridge-utils

Настрой­ка сете­во­го интер­фей­са хоста:

# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-bridge0

# nano /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
NAME="System eth0"
HWADDR=00:0C:29:41:7D:7A
BRIDGE=bridge0
NM_CONTROLLED="no"
TYPE="Ethernet"

# nano /etc/sysconfig/network-scripts/ifcfg-bridge0

DEVICE=bridge0
TYPE=Bridge
UUID=efd81173-7ad1-4dc6-84c7-18f133073f75
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.45
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
DOMAIN=kamaok.org.ua
IPV6INIT=no
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
NAME="System bridge0"

Пере­за­пус­ка­ем сете­вой сервис:

# service network restart
Про­ве­ря­ем нали­чие создан­но­го интерфейса

# brctl show

bridge name bridge id STP enabled interfaces
bridge0 8000.000c29417d7a no eth0
virbr0 8000.000000000000 yes

Сеть Default cоз­да­ет­ся при уста­нов­ке и выби­ра­ет­ся по умол­ча­нию для сете­во­го интер­фей­са вир­ту­аль­ной маши­ны во вре­мя уста­нов­ки через virt-install или гра­фи­че­ский Virtual Manager. Для досту­па вир­ту­аль­ных машин к основ­ной сети исполь­зу­ет­ся NAT. Ска­жем так: для хостин­га пары-трой­ки вир­ту­аль­ных машин в локаль­ной сети удоб­нее исполь­зо­вать мост с основ­ным интер­фей­сом (bridge0); а для более слож­ной сете­вой струк­ту­ры (напри­мер Linux-роу­тер с DMZ) логич­нее будет настро­ить вир­ту­аль­ную сеть с нуля. Кста­ти, настра­и­ва­ет­ся эта сеть здесь /etc/libvirt/qemu/networks/default.xml

Про­смат­ри­ва­ем спи­сок вир­ту­аль­ных сетей.

# virsh net-list

Name State Autostart Persistent
--------------------------------------------------
default active yes yes

# brctl show

bridge name bridge id STP enabled interfaces
bridge0 8000.000c29417d7a no eth0
vnet0
virbr0 8000.525400be1523 yes virbr0-nic

Теперь отклю­ча­ем дефолт­ный virbr0

# virsh net-destroy default

# virsh net-list

Name State Autostart Persistent

Теперь отклю­ча­ем дефолт­ный virbr0

# virsh net-undefine default

# brctl show

bridge name bridge id STP enabled interfaces
bridge0 8000.000c29417d7a no eth0

# /etc/init.d/libvirtd restart

Созда­ем вир­ту­аль­ную маши­ну- Centos6(64bit)
# virt-install -n Centos64 --ram 1024 --arch=x86_64 --vcpus=1 --cpu host --check-cpu --os-type linux --os-variant=rhel6 --boot cdrom,hd,menu=on --disk /vms/centos64/centos64.img,size=10,bus=virtio --network=bridge:bridge0,model=virtio --graphics vnc,listen=0.0.0.0,keymap=ru,password=123456 --noautoconsole --watchdog default,action=reset --virt-type=kvm --autostart --cdrom=/home/iso/CentOS-6.4-x86_64-minimal.iso

Созда­ем вир­ту­аль­ную маши­ну- Debian7(32bit)
# virt-install -n Debian7 --ram 1024 --arch=i386 --vcpus=1 --cpu host --check-cpu --os-type linux --boot cdrom,hd,menu=on --disk /vms/debian70/debian70.img,size=8,bus=virtio --network=bridge:bridge0,model=virtio --graphics vnc,listen=0.0.0.0,keymap=ru,password=123456 --noautoconsole --watchdog default,action=reset --virt-type=kvm --autostart --cdrom=/home/iso/debian-7.1.0-i386-netinst.iso

Созда­ем вир­ту­аль­ную маши­ну- FreeBSD92(32bit)

# virt-install -n Freebsd92 --ram 1024 --arch=i386 --vcpus=1 --cpu host --check-cpu --os-variant=freebsd8 --boot cdrom,hd,menu=on --disk /vms/freebsd92/freebsd92.img,size=10,bus=virtio --network=bridge:bridge0,model=virtio --graphics vnc,listen=0.0.0.0,keymap=ru,password=123456 --noautoconsole --watchdog default,action=reset --virt-type=kvm --autostart --cdrom=/home/iso/FreeBSD-9.2-RELEASE-i386-disc1.iso

При­ме­ча­ние: если исполь­зу­ем LVM-раз­дел под виртуалку,тогда раз­мер дис­ка не указываем

Т.е вме­сто

--disk /vms/centos64/centos64.img,size=10
будет,например

--disk path=/dev/myvggroup/centos64

Т.к уже при созда­нии LVM-раз­де­ла мы ука­за­ли его размер

Напри­мер, lvcreate -L 10737418240b -n centos64 myvggroup

Выпол­ня­ем коман­ду на уста­нов­ку новой ВМ, затем под­клю­ча­ем­ся по vnc (через TightVNC или UltraVNC)к хост-сер­ве­ру для про­дол­же­ния уста­нов­ки ОС. Для того, что­бы узнать порт для под­клю­че­ния, выполняем:

# netstat -nltp | grep qemu

tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 2809/qemu-kvm

При уста­нов­ке новой ВМ, порт vnc-сер­ве­ра уве­ли­чит­ся на 1. При уда­ле­нии ВМ, порт осво­бож­да­ет­ся, и затем выда­ет­ся новой ВМ. То есть, номер пор­та послед­ней ВМ не обя­за­тель­но самый боль­шой из 590X
Что­бы узнать, на каком пор­ту vnc вир­ту­ал­ка с опре­де­лен­ным назва­ни­ем, вводим:

# virsh vncdisplay <VMName>

# virsh vncdisplay Centos64
:0

где VMName — имя ВМ, :0 — номер по поряд­ку пор­та, начи­ная с 5900, то есть под­клю­чать­ся надо на порт 5900-> про­грам­ме UltraVNC :5900

Место хра­не­ния кон­фи­гу­ра­ци­он­ных фай­лов вирт.машин
/etc/libvirt/qemu/
Т.е для изме­не­ния настро­ек вирт.машины,например Centos64

# nano /etc/libvirt/qemu/Centos64.xml

К при­ме­ру, мож­но ука­зать ста­ти­че­ский порт vnc для кон­крет­ной ВМ, что­бы все­гда под­клю­чать­ся к нуж­но­му порту
<graphics type='vnc' port='5914' autoport='no' listen='0.0.0.0' passwd='123456'>
<listen type='address' address='0.0.0.0'/>
</graphics>

Теперь у этой ВМ порт vnc будет — 5914. Не забудь­те пере­за­гру­зить libvirtd для при­ме­не­ния изме­не­ний. Саму ВМ тоже сле­ду­ет пере­за­гру­зить. Поэто­му изме­няй­те кон­фи­гу­ра­ци­он­ный файл ВМ пока она выклю­че­на, далее выпол­няй­те service libvirtd reload, затем стар­туй­те ВМ

После изме­не­ния вруч­ную конф.файла необ­хо­ди­мо выполнить
# virsh define /etc/libvirt/qemu/<VMName>.xml
Одна­ко удоб­нее такое изме­не­ние делать через ути­ли­ту virsh
# virsh edit <VMName>
Она авто­ма­том откро­ет редак­тор настро­ен­ный в систе­ме по умол­ча­нию, а по окон­ча­нии редак­ти­ро­ва­ния сохра­нит конфигурацию.Можно делать и при рабо­та­ю­щей вир­ту­ал­ки, но изме­не­ния всту­пят в силу после ее перезапуска.

Основ­ной кон­фи­гу­ра­ци­он­ный файл QEMU
# virsh edit <VMName>
Про­вер­ка доступ­ных вари­ан­тов ОС

# virt-install --os-variant list | less

Справ­ка по коман­дам virsh

# virsh help

Про­смотр состо­я­ния всех вирт.машин

# virsh list --all

Запуск кон­крет­ной виртуалки

# virsh start <VMName>

Завер­ше­ние рабо­ты вирт.машины(гладкое)(у меня кор­рект­но не работает)

# virsh shutdown <VMName>

При­ну­ди­тель­ное завер­ше­ние рабо­ты ВМ ( отклю­че­ние питания)

# virsh destroy <VMName>

Уда­ле­ние вирт.машины

# virsh undefine <VMName>

Добав­ле­ние вир­ту­ал­ки в автозагрузку

# virsh autostart <VMName>

Уда­ле­ние вир­ту­ал­ки из автозагрузки

# virsh autostart --disable <VMName>

Про­смотр номе­ра пор­та для VNC подключения

# virsh vncdisplay <VMName>

Про­смотр номе­ра пор­та для VNC подключения(альтернатива)

# virsh dumpxml <VMName> | grep vnc

Обнов­ле­ние инфор­ма­ции о машине

# virsh define /etc/libvirt/qemu/<VMName>.xml

Редак­ти­ро­ва­ние фай­ла кон­фи­гу­ра­ции в редак­то­ре по умолчанию

# virsh edit <VMName>

Сохра­не­ние кон­фи­гу­ра­ции в файл

# virsh dumpxml > VMName.xml

Запу­стить коман­ду в qemu мониторе

# virsh qemu-monitor-command <VMName> help --hmp

Созда­ние вирт.машины из фай­ла .xml

# virsh create configuration_file.xml

Полу­че­ние инфор­ма­ции о вир­ту­аль­ной машине

# virsh dominfo Freebsd92

Id: 1
Name: Freebsd92
UUID: dd309d4a-f5c1-7478-9a08-45859dd4c5f8
OS Type: hvm
State: running
CPU(s): 2
CPU time: 22982.1s
Max memory: 2072576 KiB
Used memory: 2072576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0

Полу­че­ние инфор­ма­ции о узле(хост-ноде)

# virsh nodeinfo

CPU model: x86_64
CPU(s): 4
CPU frequency: 2494 MHz
CPU socket(s): 2
Core(s) per socket: 2
Thread(s) per core: 1
NUMA cell(s): 1
Memory size: 2948916 KiB

Полу­че­ние инфор­ма­ции о вир­ту­аль­ных процессорах

# virsh vcpuinfo Freebsd92

VCPU: 0
CPU: 2
State: running
CPU time: 11160.9s
CPU Affinity: yyyy

VCPU: 1
CPU: 0
State: running
CPU time: 10100.3s
CPU Affinity: yyyy

После уда­ле­ния виртуалки(undefine) необ­хо­ди­мо про­ве­рить, что­бы не оста­лось кон­фи­гов это вир­ту­ал­ки в /etc/libvirt/qemu и сим­воль­ной ссыл­ки в /etc/libvirt/qemu/autostart/

Так­же необ­хо­ди­мо вруч­ную уда­лить файл вирт.машины .img

(место хра­не­ния фай­ла зада­ет­ся пара­мет­ром —disk при созда­нии виртуалки)

Управ­ле­ние вир­ту­аль­ны­ми маши­на­ми уда­лен­но­го сер­ве­ра с удоб­ным гра­фи­че­ским интер­фей­сом (исполь­зуя virt-manager)

Отсю­да кача­ем и уста­нав­ли­ва­ем X Server для Windows

http://sourceforge.net/projects/xming/

Запус­ка­ем этот сер­вер на Windows

2. В настрой­ках PuTTY вклю­чить «Enable X11 Forwarding»

В момент под­клю­че­ния к уда­лен­но­му сер­ве­ру Xming дол­жен быть уже запущен.

3.На хост-сер­ве­ре с CentOS для SSH вклю­чить X11 Forwarding, для это­го отре­дак­ти­руй­те файл sshd_config:

# nano /etc/ssh/sshd_config

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

# /etc/init.d/sshd restart
Уста­нав­ли­ва­ем virt-manager на хост-сервере:

# yum install virt-manager

Еще один компонент

# yum install xorg-x11-xauth

Что­бы окна отоб­ра­жа­лись без крякозябр

# yum install liberation-sans-fonts

После это­го надо пере­зай­ти по SSH к уда­лен­но­му сер­ве­ру. Xming дол­жен быть запущен.
Запус­ка­ем гра­фи­че­скую ути­ли­ту управ­ле­ния вир­ту­аль­ны­ми машинами

# virt-manager

Полу­ча­ем ошиб­ку типа

process 18935: D-Bus library appears to be incorrectly set up; failed to read machine uuid:
Failed to open "/var/lib/dbus/machine-id": No such file or directory
See the manual page for dbus-uuidgen to correct this issue.
D-Bus not built with -rdynamic so unable to print a backtrace
Aborted

Реше­ние

# dbus-uuidgen --ensure
После чего коман­да отра­ба­ты­ва­ет кор­рект­но и запус­ка­ет­ся окно virt-manager