Qemu-KVM: работа в Debian

Данная статья — это обобщение информации, накопленной за время использования гипервизора Qemu-KVM. Я хочу поделиться теми знаниями опытом, которыми обладаю на данный момент. Надеюсь, что моя статья пойдет на пользу тем, кто только собирается использовать гипервизор Qemu-KVM или уже использует. И еще: статья не для новичков linux (элементарные вещи здесь рассматриваться не будут).

Про данную систему виртуализации в сети написано много. Но когда действительно начинаешь с ней работать — сталкиваешься с нехваткой информации и практических примеров применения. Итак приступим.

Входящая задача. Был выделен компьютер как тестовая станция – для проверки работоспособности резервных копий баз данных, устанавливаемого программного обеспечения, сборки msi пакетов и прочих весьма разнообразных задач. Конфигурация компьютера:
  • процессор Atlon X2 245
  • оперативная память 4 гигабайта
  • жесткий диск 500 гигабайт
  • материнская плата ASUS M4N68T-M LE.

После непродолжительного раздумья было принято решение использовать компьютер как платформу для работы с виртуальными машинами. Процессор аппаратную виртуализацию поддерживал. В связи с этим было принято решение установить еще 1 жесткий диск. Порывшись в «закромах родины» был найден диск на 80 гигабайт. Его добавили к конфигурации.

С компьютером разобрались. Теперь на очереди гипервизор. Хотелось работать с такой платформой, которую потом можно использовать в корпоративной среде. Поэтому virtualbox, microsoft virtual pc, vmware workstations не подходили. Встал следующий вопрос — какую систему выбрать:
  1. Microsoft hyper-v не подходит — платная. Компания, в которой я работаю использует только лицензионное программное обеспечение. Следовательно никто не выделит для моих целей лицензию на сервер.
  2. VMWARE ESXi не знает контролера SATA, расположенного на материнской плате (поскольку разрабатывалась для серверных систем).
  3. Qemu-kvm — свободно разрабатываемый гипервизор, поддерживает аппаратную виртуализацию. Его можно установить в любой современный дистрибутив Linux. Это по мне, его и берем.

Выбор дистрибутива Linux. Стандартно я использую Debian. Вы можете выбрать любой понравившийся вам дистрибутив (ubuntu, Fedora, Opensuse, Archlinux). Гипервизор qemu-kvm есть в любом из выше перечисленных дистрибутивов, а гугл пестрит статьями о том, как его поставить.

Переходим к делу. Установку операционной среды описывать я не буду. Оговорюсь лишь, что во время установки операционной среды жесткий диск большего размера не трогал. Его время еще придет. Как установить гипервизор на Debian очень хорошо описано здесь. Лично я ставлю qemu-kvm libvirt-bin.

Гипервизор поставили, теперь немного о внутренней структуре. Есть два каталога, в которые стоит заглянуть:
/etc/libvirt/ — здесь в основном хранятся конфигурационные файлы
/var/lib/libvirt/ — здесь будут хранится образы жестких дисков, мгновенные снимки системы и многое другое.
Наш гипервизор установлен.

Теперь немного о настройках. Qemu-kvm не работает напрямую с сетевой картой на физическом компьютере. Следовательно нужно настроить мост. Что делаем: открываем файл /etc/network/interfaces и приводим его к следующему виду:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo br0
iface lo inet loopback
# Set up interfaces manually, avoiding conflicts with, e.g., network manager
iface eth0 inet manual
# Bridge setup
iface br0 inet static
bridge_ports eth0
address ххх.ххх.ххх.ххх
broadcast ххх.ххх.ххх.ххх
netmask ххх.ххх.ххх.ххх
gateway ххх.ххх.ххх.ххх
bridge_stp off
bridge_fd 0
bridge_maxwait 0

Больше информации здесь.

Далее сохраняем файл и перезагружаем компьютер.
О, чудо! Гипервизор установлен!
Дальше возникает вопрос: как управлять сервером? Управлять Qemu-kvm можно двумя программами: virt-manager и virtinst.

Virt-manager.
Эта программа рассчитана на графический интерфейс. Она поддерживает как удаленное управление виртуальными машинами, так и локальное. Но у нее есть огромный минус — аналогов для windows попросту нет.
Как лично я вышел из положения. Установил графическую оболочку LXDE и сервер xrdp, благодаря такому нехитрому набору программ мне не пришлось физически ходить к компьютеру (больно много ему чести). Я просто подключался через стандартный RDP клиент который, есть в windows. Но это дополнительная трата ресурсов компьютера.
Если вы установили virt-manager, он автоматически создает:
хранилище для образов виртуальных машин по пути /var/lib/libvirt/images
виртуальный сетевой интерфейс default.
Следовательно подмонтировать жесткий диск с большим объемом нужно в директорию /var/lib/libvirt/images.

Virtinst.
Это консольная утилита. Никакой графики, сплошная командная строка и экономия системных ресурсов.
Если вы решили воспользоваться консольным управлением, то вам придется в вручную создать хранилище образов виртуальных машин. Делается это следующим образом. По ssh подключаемся к серверу. Заходим под пользователем root.
Место для хранилища можно выбрать любое:
  1. можно подмонтировать жесткий диск в директорию и указать его в качестве хранилища
  2. можно просто устройство выбрать хранилищем.

Меня больше привлек вариант с директорией (проще копировать диски виртуальных машин). Следовательно что я сделал: отформатировал диск 500 гигабайт в формат ext4 (когда доделают btrfs, то лучше пользоваться ней). Создал директорию /etc/libvirt/images и смонтировал его туда. Не забудьте дописать в fstab строчку для автоматического монтирования. После чего в консоли набираем vitsh и жмем Enter. Выглядит это так:
root@kvm:/home/firsachi# virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit

virsh #

Теперь если дать команду help — видим список команд оболочки. Нас интересует, есть ли готовые хранилища. Для этого вводим команду pool-list --all
virsh # pool-list --all
— Name State Autostart

Если ввести просто pool-list, то вам будут показаны только активные хранилища, а нужно видеть их все.
Создаем пул
virsh # pool-define-as storage dir --target /etc/libvirt/images/

Говорим, что пул запускается автоматически
virsh # pool-autostart storage

Стартуем пул
virsh # pool-start storage

Теперь проверяем
virsh # pool-list –all

Вывод должен быть такой
virsh # pool-list --all
Name State Autostart
— storage active yes

Немного о командах рекомендую прочитать тут.

Если не создавать хранилище для образов дисков виртуальных машин, то для того, чтобы диски лежали в одном месте, нужно будет указывать полный путь к образу при его создании(много писать), а так образ создастся в указанном пуле или если он у вас единственный, то его имя указывать не обязательно. Конфигурационный файл пула будет лежать в директории /etc/libvirt/storage/ это .xml файлик. Выходим из virsh введя команду exit.

В принципе наш гипервизор установился и его можно использовать. Но есть еще маленькая мелочь, о которой хотелось бы упомянуть. А именно о том, как работает Qemu-kvm.

Запущенная на нем виртуальная машина шлет команды физическому процессору напрямую через загружаемый модуль (kvm-amd или kvm-intel). Это должен быть один из модулей, который соответствует производителю процессора (Intel или AMD).

Этот модуль подгружается во время старта системы. Однако это не мой метод. Я пересобираю ядро системы для того, чтобы встроить нужный модуль (в виде опции при пересборке) непосредственно в ядро.
Но это не единственная модернизация, которую я провожу. Кроме этого я делаю следующее:
  • отключаю поддержку звука (это сервер, а не рабочая станция);
  • не использую протокол IPv6 (в моей сети он не используется);
  • отключаю поддержку сетевых карт wifi, wmax и все что сними связанно.
Не люблю когда лишние функции обременяют ядро лишней нагрузкой.

В сборке собственного ядра мне помогли вот эти статьи первая и вторая.

Забегу немного вперед. Многие люди в интернете жаловались на то, что модель сетевой карты virtio некорректно работает. Этому есть объяснение, и достаточно простое. Драйвера для этого устройства находятся в стадии экспериментальных. Зато virtio storage работают отлично.

Теперь начинаем работать с виртуальными машинами. Создаем нашу первую виртуальную машину:
virt-install --connect qemu:///system \
--name comp1 \
--ram 512 \
--vcpus=1 \
--disk pool=storage,cache=none,size=20, format= qcow2\
--disk /home/firsachi/Winxp.iso,device=cdrom \
--bridge=br0,model=e1000 \
--os-type=windows
--os-variant=winxp \
--graphics vnc,port=5901,listen=0.0.0.0


Некоторые детали хочу пояснить:
pool=storage указываем пул, в котором нужно создать диск;
cache=none это означает, что отключено кэширование записи на диск. В моем случае это образ img. При включенном кэшировании записи вдвое увеличивается время обращения к диску виртуальной машины;
size=20 размер диска в гигабайтах;
format= qcow2 это формат образа диска. Как я понял, только он поддерживает снимки системы;
model=e1000 модель сетевой гигабитной карты Intel (по умолчанию идет стомегабитный rtl8139);
port=5901 порт, на который можно обратиться с помощью Ultra VNC Viewer;
listen=0.0.0.0 разрешение подключиться со всех IP (по умолчанию слушает только localhost).
Установку можно произвести непосредственно и на устройство. Выглядеть будет так:
virt-install --connect qemu:///system \
--name comp1 \
--ram 512 \
--vcpus=1 \
--disk /dev/sdb, format= qcow2\
--disk /home/firsachi/Winxp.iso,device=cdrom \
--bridge=br0,model=e1000 \
--os-type=windows
--os-variant=winxp \
--graphics vnc,port=5901,listen=0.0.0.0

Где sdb должен быть заменен на ваше устройство.

Если все прошло успешно, то для подключения к консоли нашей виртуальной машины нужно установить Ultra VNC Viewer к себе на компьютер. В подключении нужно указать IP адрес сервера и порт, или доменное имя сервера и порт.
Как происходит установка Windows, надеюсь, знают все.

Теперь о драйверах виртуальных машин. Для установки драйверов нужны следующие образы дисков: virtio-win-0.1-30.iso и viostor-0.1-30-floppy.img
Последний диск не обязателен, он нужен только в том случае, если вы собираетесь установить windows xp или windows 2003 server на virtio storage (кстати, если так сделать, то операционная система работает быстрее).

Здесь написано как подключить и отключить cdrom.
Есть еще один бонус: к виртуальной машине можно подключить внешние устройства (например физический жесткий диск или usb накопитель). Заходим в virsh. Команда будет выглядеть так:
virsh # attach-disk comp1 /dev/sdc vdv --type disk
Где:
  • comp1 – имя виртуального компьютера, к которому подключаем диск.
  • /dev/sdc – путь к устройству на физическом компьютере.
  • Vdv — куда подключаем на виртуальной машине.
  • --type – тип диска.

Отключить диск:
virsh # deatach-disk comp1 vdv

Во многом поможет и вот эта статья. Рекомендую также заглядывать вот сюда.

Где я применяю этот гипервизор? У меня на нем постоянно работает контролер домена. Причем работает стабильно, без сбоев. Авторизация в домене происходит без проблем. Параллельно могу запустить максимум 2 виртуальные машины.
Восстановление виртуальной машины на другом сервере.
Одним солнечным и безоблачным днем я подумал: а что будет, если придется переносить его на другой сервер. Режим миграции виртуальной машины в гипервизоре есть, но его негде проверить — нет такого второго компьютера.
Поэтому пришлось исходить из самого худшего варианта. Предположим:
  • компьютер, на котором работала виртуальная машина, сгорел (процессор Atlon X2 245).
  • раз в неделю виртуальная машина выключается и делается резервная копия файла конфигурации и образа диска.

Следовательно мои действия на этот случай. Для эксперимента я принес из дому свой ноутбук. На нем стоит процессор i5-3210M, linux дистрибутив OpenSuse (для моего ноутбука больше совместим с «железом»).

Установил на нем Qemu-KVM, переместил на него файл конфигурации виртуальной машины и образ диска. В файле конфигурации отредактировал путь к диску виртуальной машины, перезагрузил ноутбук. И, о чудо! Гипервизор не только увидел мою виртуальную машину, но и запустил ее.

Создание снимков виртуальных машин.
Qemu-KVM поддерживает создание снимков виртуальных машин. Приведу самый простой пример. От суперпользователя заходим в virsh и выполняем следующую команду:
virsh # snapshot-create-as name
name — это имя виртуальной машины.
После того, как снимок виртуальной машины будет сделан, резервные копии файлов конфигураций будут лежать в директории /var/lib/libvirt/qemu/snapshot/. Но вот где лежат данные диска виртуальной машины — мне пока не известно.

Просмотреть снимки можно следующей командой:
virsh # snapshot-list name
Name Creation Time State
— 1360593244 2013-02-11 16:34:04 +0200 running
1360594479 2013-02-11 16:54:39 +0200 running

Восстановить из фотографии можно так:
virsh # snapshot-revert name 1360593244

Удалить не нужный снимок можно так:
virsh # snapshot-delete name 1360593244

Вот так теперь и живем: гипервизор Qemu-KVM, виртуальный контролер домена, и довольный проделанной работой я.
Спасибо всем, кто дочитал до конца. Надеюсь, мои мысли оказались полезными.

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 51

    0
    Использую такую же связку у себя на сервере. Испытываю некоторые проблемы с виндовыми гостями. Почему то они в идле кушают процессор. С линуксовыми осями такого нет. Пробовал ставить ESXi и туда винду — такой проблемы нет. Не знаете что может быть?
      0
      Драйвера для гостевой машины ставили? www.linux-kvm.org/page/WindowsGuestDrivers
        0
        Судя по всему нет. Сейчас попробую.
          0
          Судя по диспетчеру устройств, все драйвера установлены.

          P.s. Windows Server 2012
            0
            Windows Server 2012 пока не поддерживается как гость
              0
              А у меня стоит :) Надо попробовать поставить 2008 версию и посмотреть что будет.
                0
                2008 и 2008 R2 работают хорошо Server 2012 сильно нагружает видео.
                  +1
                  Да майкрософт учудил со своим Metro UI в серверной версии
          0
          Если я правильно понял это драйверы для сетевой карты. Процессор грузят скорее всего дисковые операции т.к. вм работает в hvm.
          А еще автор забыл про XEN. На выбор бесплатная версия от citrix, опенсорсный XCP или хардкорный гипервизор под понравившийся дистрибутив.
          ИМХО про использование в корпоративной среде для Windows виртуалок qemu-kvm не лучший выбор. Не говоря уже про икебану LXDE и сервер xrdp на сервере.
            –1
            xen не работает на Athlon. virtio поддерживает блочные и сетевые устройства. Проблема скорее в последней версии Windows. Вообще для подобной мощности хост машины и одной-двух виртуалок проще взять VirtualBox, xen и qemu/kvm актуальны в том случае, когда вы виртуализируете большое количество хостов.
              0
              Кто вам такое сказал?
              Все прекрасно работает.
                0
                xen не работает на Athlon

                А вы это откуда взяли?
                • UFO just landed and posted this here
                  0
                  ИМХО про использование в корпоративной среде для Windows виртуалок qemu-kvm не лучший выбор. Не говоря уже про икебану LXDE и сервер xrdp на сервере.
                  Начинал с GUI. Теперь только консоль.
                  Про XEN не забыл, у меня будет шанс попробовать его в живую. За одно будет с чем сравнить.
                  • UFO just landed and posted this here
                  0
                  Вы знаете нужно смотреть. На вскидку не скажу.
                    0
                    -cpu host,level=9 может помочь
                      0
                      Установил Win Server 2008 R2, в идле 5% цпу, у 2012 процентов 20 всегда. Судя по всему действительно гуй жрёт у 12го сервера. :(
                    +2
                    советую еще попробовать proxmox очень мошьная система для виртуализации.
                      +2
                      Microsoft hyper-v не подходит — платная. Компания, в которой я работаю использует только лицензионное программное обеспечение. Следовательно никто не выделит для моих целей лицензию на сервер.

                      Простите, где вы об этом прочитали?
                        0
                        Видать Автор совсем не в курсе что hyper-v имеет вполне функциональную free версию. Он наверное и предположить не мог, что такое у M$ бывает…
                          +1
                          покажите, пожалуйста, сравнение функционала бесплатного hyper-v, платного hyper-v и бесплатного… например, proxmox
                            0
                            Proxmox это не гипервизор, а оснастка для управления KVM и OpenVZ.
                              0
                              хорошо, пусть будет гипервизор. Гипервизор там (ха-ха, встроен в ядро) Linux
                            0
                            Вы абсолютно правы.
                          0
                          Увы не точная формулировка. Я имел в виду hyper-v как роль 2008 R2 сервера, а не как отдельный продукт Hyper-V Server 2008 R2.
                            +2
                            Первый вопрос, возникающий про такого рода статьи (это за неделю уже вторая): почему Вы не использовали Proxmox? Почему не добавили к 4-м гигабайтам ещё пару десятков? Откуда Вы взяли некорректно работающий virtio для сети? Почему не настроили LVM и как без него собираетесь делать бэкапы без остановки/суспенда? В общем, руководство «как не надо делать».
                              0
                              почему Вы не использовали Proxmox?
                              По тому -что у меня уже был на тот момент крохотный опыт работы с этой системой.
                              Откуда Вы взяли некорректно работающий virtio для сети?
                              Лично у меня при копировании файла на виртуальную машину больше 5 гигабайт машина просто переставала работать с сетью. переключившись на e1000 проблемы ушли. На тот момент такие проблемы были не только у меня.
                              Почему не настроили LVM и как без него собираетесь делать бэкапы без остановки/суспенда?
                              Увы, про такую возможность даже не думал. Для меня было не критично. Но огромно спасибо обязательно попробую.
                              • UFO just landed and posted this here
                              0
                              Не нашел от чего, но debian guest на debian host у меня дико тормозил. Причем я так и не понял от чего. Точнее тормозило disk IO пробовал все разные версии драйвера, разные версии пакетов qemu и ядра. Пробовал диски raw, qcow2 и lvm — ничего не помогла 2-4 Мб/с скорость записи на диск. Вручную пакеты не пересобирал. Просто перешел на CentOS. Все работает как часы — скорость записи 140-160.

                              Так что еще раз убедился что RedHat подобные дистрибутивы лучше работают с kvm.
                                0
                                А у меня на CentOS были пробдемы с сетью виртуалках — скорость была очень низкая.

                                P.S. Поставил ProxMox — реально класная система.
                                  0
                                  Была такая же проблема. Отключил кеш диска.
                                  <driver name='qemu' type='qcow2' cache='none'/>
                                    0
                                    cache='none' не помогал тоже :)
                                    +1
                                    Скорее всего помогла бы установка более свежего ядра из backports.
                                    А в целом да, RH ядра под гипервизор, по крайней мере, больше подходят.
                                      0
                                      а какой debian?

                                      на squeeze со стоковым ядром 2.6.32 — 12309 цветёт и пахнет
                                        0
                                        Debian GNU/Linux 6.0
                                          0
                                          ну, он и есть squeeze. И система 64-биная?
                                            0
                                            Если ядро стандартное, то соберите по новее.
                                              0
                                              Я ставил linux-image-3.2.0-0.bpo.4-amd64 — не помогло.
                                              0
                                              Да. А в чем проблема с 64 битной ОС?
                                                +1
                                                баг 12309 проявлялся именно на 64-битных, чаще всего — AMD-машинах, на ядрах версии 2.6.19 — 3...., причём баг официально закрыт в июне, т.е. первое ядро, которое вышло после закрытия бага, 3.5

                                                на 32-битных, если память не именяет, проблема не проявлялась.
                                                0
                                                У меня стоит Х64.
                                                Linux kvm 3.7.6-cybermind #1 SMP Tue Feb 5 10:25:05 EET 2013 x86_64 GNU/Linux
                                                Правда из тестовой ветки.
                                          +1
                                          «Qemu-kvm не работает напрямую с сетевой картой на физическом компьютере.»
                                          Это на железке автора напрямую работать не будет, а на нормальных серверах есть SR-IOV и всё будет работать напрямую без всяких мостов.
                                            0
                                            да вообще и на железке автора можно просто использовать macvtap и тоже будет работать безо всяких мостов
                                              0
                                              Увы возможности поставить Qemu-kvm на нормальный сервер нет. Да и система планировалась больше как тестовый полигон. Не ставить же возле себя 2 или компьютера помимо рабочего.
                                              0
                                              >> Поэтому virtualbox, microsoft virtual pc, vmware workstations не подходили.
                                              А VirtualBox-то чем не подходил?
                                                0
                                                В основном из за графического интерфейса управления. phpvirtualbox у меня так толком и не заработал и требовал дополнительно установки веб сервера и непосредственно php. Плюс если запущенные виртуальные машины в сумме забрали больше половины оперативной памяти, физическая машина начинала жутко тормозить. Из за чего зависали виртуальные. Жутко раздражает.
                                                  0
                                                  Ну VirtualBox прекрасно управляется из командной строки.

                                                  >> Плюс если запущенные виртуальные машины в сумме забрали больше половины оперативной памяти, физическая машина начинала жутко тормозить.
                                                  Вы пробовали своп подкрутить?
                                                    0
                                                    Конечно. Единственное чего не пробовал так ядро перебрать.
                                              • UFO just landed and posted this here
                                                  0
                                                  Я бы не рискнул поставить нагруженную СУБД на виртуальную машину. Лично мое мнение что на вириальных машинах в полне могут работать контролеры доменов постовые сервера клиентов на 150-200( но тогда я бы выделил под них отдельный дисковый массив). Сервер антивируса. И тому подобное.

                                                Only users with full accounts can post comments. Log in, please.