KVM

Материал из ALT Linux Wiki

См.тж. Настройка_сети_в_KVM и Создание профиля KVM

Команды для управления QEMU-KVM

virsh -c qemu:///system list --all #листинг
virsh -c qemu:///system start vsrv1 #пуск
virsh -c qemu:///system shutdown vsrv1 #shutdown
virsh -c qemu:///system destroy vsrv1 #выключить по питанию
virsh -c qemu:///system undefine vsrv1 #удалить (конифг тоже удаляется)
virsh -c qemu:///system autostart vsrv1 #добавить в автозагрузку
virsh -c qemu:///system autostart --disable # удалить из автозагрузки
virsh -c qemu:///system qemu-monitor-command win2008std-32bit help --hmp  # запустить команду в qemu мониторе
virsh -c qemu:///system define /etc/libvirt/qemu/mirror.xml # обновить информацию о виртуальной машине.

Чтобы постоянно не вводить -c qemu:///system можно добавить:

export LIBVIRT_DEFAULT_URI=qemu:///system

Расположение основных конфигов

  • /etc/libvirt/qemu.conf - основной конфиг qemu. Тут задаём параметры vnc сервера.
  • /etc/libvirt/qemu/ - папка для хранения конфигов, в том числе и виртуальных машин.

Создание VPS

VPS можно создавать с разными виртуальными девайсами. Можно использовать по умолчанию, а можно использовать virtio. Последние считаются наилучшим вариантом для Windows OS. Поэтому ВСЕГДА стараемся сделать так как надо. Если не получается - то тогда как обычно. Для новой системы со сразу установленными значениями virtio в конфиге необходимо в процессе установки добавить драйверы. Качаем iso с драйверами:

wget http://alt.fedoraproject.org/pub/alt/virtio-win/latest/virtio-win-0.1-65.iso

(ссылка верна на 17 сентября 2013 г., в дальнейшем можно заглянуть на http://alt.fedoraproject.org/pub/alt/virtio-win/latest/ и скачать имеющийся там virtio-win-*.iso)

Создание VPS Windows с поддержкой virtio

  • создаем LVM раздел нужного размера:
/sbin/lvcreate -L 10G -n win2008 main
  • coздаем конфиг VPS:
virt-install --connect=qemu:///system -n test_win2008 -r 1024 --boot cdrom --disk path=/dev/main/test_win2008,bus=virtio \
  --disk path=/vz/template/virtio-win-1.1.16.vfd,device=floppy --cdrom=/var/lib/vz/template/SW_DVD5_Windows_Svr_DC_Ent_Std_2008_Russian_32bit_MLF_X14-26782.ISO \
  --network bridge:breth0,model=virtio --graphics vnc,password=123,listen=0.0.0.0 --os-type=windows --os-variant=win2k8 --arch=i686 --cpu host -v --autostart

где:
-n test_win2008 - имя VPS
-r 1024 - к-во выделяемой памяти
-v использовать аппаратную виртуализацию
--arch=i686 - используемая архитектура
--cpu host - передает в VPS все возможности процессора хостовой системы. Применять с осторожностью, т.к. при переносе на другой сервер при отличии винда может ругаться.

NB Для полного списка задаваемых параметров смотрим VIRT-INSTALL(1)

Также подключаем флоппи диск с драйверами для virtio. При установке система не увидит жесткий диск, на который будет устанавливаться, и нужно выбрать драйвер для диска с флопика. Там же располагаются драйвера для сетевой карты.

  • Windows Server 2003 и Windows XP Нажимаем F6 и ставим драйвера.
  • Windows 2008 Доходим до окна разбивки дисков и выбираем "Загрузить Драйвер".

Создание VPS без virtio

Windows 2008 32bit на LVM:

/sbin/lvcreate -L 10G -n win2008 main

virt-install --connect=qemu:///system -n win2008 -r 1024 --disk path=/dev/main/win2008 --cdrom=/mnt/images/windows2008.ISO --accelerate \
  --vnc --noautoconsole -v --network bridge:breth0 --os-type=windows --vcpus=1 --noapic --os-variant=win2k8 --arch=i686

ALT Linux x86_64 на LVM :

/sbin/lvcreate -L10G -n altlinux main

virt-install --connect qemu:///system --name altlinux --ram 512 --disk path=/dev/main/altlinux --network=bridge:breth0 --vnc --os-type=linux \
  --os-variant=rhel6 --cdrom /mnt/images/altlinux-x86_64.iso --accelerate --noautoconsole  --vcpus=1 --arch=x86_64

FreeBSD 8.1 на LVM :

/sbin/lvcreate -L20G -n freebsd main

virt-install --connect qemu:///system --name freebsd --ram 512 --disk path=/dev/main/freebsd --network=bridge:breth0 --graphics vnc,password=rootSD,listen=0.0.0.0 \
  --os-type unix --os-variant=freebsd8 --cdrom /var/lib/vz/template/FreeBSD-8.1-RELEASE-i386-disc1.iso --accelerate --noautoconsole  --vcpus=1 --arch=i686

После запуска команды создания VPS, смотрим через netstat какой номер порта добавился в список открытых портов и подключаемся через VNC к хардноде к этому порту (например vncviewer test.domain.com:5902 ) и вводим пароль указанный в строке "vnc,password="

Удаление VPS

Выполняем остановку и удаление VPS в KVM:

virsh -c qemu:///system destroy test_vps #выключить по питанию
virsh -c qemu:///system undefine test_vps #удалить (конифг тоже удаляется)

И удаляем раздел LVM:

/sbin/lvremove /dev/main/test_vps

Управление ресурсами

Нужно настроить cgroups. В случае systemd это уже должно быть сделано автоматом.

Проверить наличие в /etc/libvirt/qemu.xml

cgroup_controllers = [ "cpu", "devices", "memory", "cpuset", "blkio" ]
cgroup_device_acl = [
    "/dev/null", "/dev/full", "/dev/zero",
    "/dev/random", "/dev/urandom",
    "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
    "/dev/rtc", "/dev/hpet", "/dev/net/tun",
]

Назначить нужные ресурсы через:

$ virsh schedinfo --set cpu_shares=1024 alt_guest
$ virsh blkiotune alt_guest --weight 1024

Проброс PCI-устройств внутрь домена

В /etc/libvirt/qemu.conf активируем

 relaxed_acs_check = 1

Получение нужной информации о NIC

# lspci -vn 
...
0e:00.0 0200: 14e4:1659 (rev 21)
        Subsystem: 103c:7031
        Physical Slot: 3
        Flags: fast devsel, IRQ 17
        Memory at fdff0000 (64-bit, non-prefetchable) [size=64K]
        [virtual] Expansion ROM at d0100000 [disabled] [size=64K]
        Capabilities: [48] Power Management version 2
        Capabilities: [50] Vital Product Data
        Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
        Capabilities: [d0] Express Endpoint, MSI 00
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [13c] Virtual Channel <?>
        Capabilities: [160] Device Serial Number 00-19-bb-ff-fe-ce-87-dc
        Capabilities: [16c] Power Budgeting <?>
        Kernel modules: tg3

# lspci -t
-[0000:00]-+-00.0
           +-02.0-[09-12]--+-00.0-[0a-11]--+-00.0-[0b-0d]----00.0-[0c]----08.0
           |               |               +-01.0-[0e-10]----00.0
           |               |               \-02.0-[11]--
           |               \-00.3-[12]--
           +-03.0-[06-08]----00.0
           +-04.0-[13-15]--
           +-05.0-[16]--
           +-06.0-[17-19]--
           +-07.0-[1a]--
           +-10.0
           +-10.1
           +-10.2
           +-11.0
           +-13.0
           +-15.0
           +-16.0
           +-1c.0-[02-03]----00.0-[03]----00.0
           +-1c.1-[04-05]----00.0-[05]----00.0
           +-1d.0
           +-1d.1
           +-1d.2
           +-1d.3
           +-1d.7
           +-1e.0-[01]--+-03.0
           |            +-04.0
           |            +-04.2
           |            +-04.4
           |            \-04.6
           +-1f.0
           \-1f.1

Отвязываем устройство от HN

 # echo 0000:0e:00.0 > /sys/bus/pci/drivers/tg3/unbind

В xml домена добавляем

<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
    <address domain='0x0000' bus='0x0e' slot='0x00' function='0x0'/>
  </source>
</hostdev>

и запускаем домен

virsh # start PXE-server
error: Failed to start domain PXE-server
error: internal error Process exited while reading console log output: char device redirected to /dev/pts/4
No IOMMU found.  Unable to assign device "hostdev0"
qemu-kvm: -device pci-assign,host=0e:00.0,id=hostdev0,configfd=30,bus=pci.0,addr=0x5: Device 'pci-assign' could not be initialized

No IOMMU found говорит о том, что аппаратная платформа не поддерживает виртуализацию ввода/вывода.

Tips

Сменить диск в приводе на VPS без перезагрузки

virsh -c qemu:///system attach-disk --type cdrom --mode readonly win2003 /vz/template/SW_CD_Windows_Svr_Std_2003_.ISO hdc

http://www.e-faux.com/references:applications:libvirt:cdrom_hotplug

Отправка комбинаций клавиш

Часто бывает нужно переключиться в окне kvm на вторую виртуальную консоль из графического режима.

  1. Нажимаем Ctrl+Alt+2 (именно 2, а не F2)
  2. В консоли QEMU вводим команду:
sendkey ctrl-alt-f2
  1. Нажимаем Ctrl+Alt+1 для возращения из консоли уже на вторую виртуальную консоль. Возврат в X.org: Alt+F7

Получение файлов из образа qcow2

Подключение:

losetup -f lxde-p5.qcow2
kpartx -a /dev/loop0
mount /dev/mapper/loop0p2 /mnt # монтирование второго раздела

Отключение:

umount /mnt
kpartx -d /dev/loop0
losetup -d /dev/loop0

Полезные ссылки

http://en.wikibooks.org/wiki/QEMU/Images

ACPI + MS Windows 2003 shutdown

Управление ресурсами через cgroups