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