Используем KVM для создания виртуальных машин на сервере. Русскоязычная документация по Ubuntu Kvm создание виртуальной машины ubuntu

KVM (виртуальная машина на основе ядра или Kernel-based Virtual) — бесплатное программное обеспечение для виртуализации с открытым исходным кодом. Вы можете создавать несколько виртуальных машин (VM), каждая виртуальная машина имеет свое собственное виртуальное оборудование, такое как диск, процессор, оперативная память и т. д. Он был включен в основную часть ядра Linux в версии 2.6.20 ядра.

Если вы ищете альтернативу VirtualBox , мы настоятельно рекомендуем использовать KVM. Мы также лично используем это удивительное программное обеспечение для виртуализации.

Установка KVM Ubuntu 17.04

Для установки KVM у вас должны быть следующие предварительные заготовки.

  1. Включите виртуализацию в системном BIOS.
  2. Проверьте системный CPU, если он поддерживает виртуализацию. Выполните приведенную ниже команду.

egrep — c ‘(vmx|svm)’ / proc / cpuinfo

Когда вы получаете вывод из вышеприведенной команды либо 1, либо более, это означает, что процессор поддерживает виртуализацию иначе 0 или менее означает, что она не поддерживает.

3. Проверьте архитектуру Ubuntu 16.04 LTS, выполнив одну команду i.e

X86_64 представляет собой 64-битное ядро.
I386, i486, i586 или i686 представляют собой 32-битное ядро.

32-разрядная ОС ограничена 2 ГБ ОЗУ максимально для данной виртуальной машины.
32-разрядное ядро ​​будет размещать только 32-битное гостевое ядро, тогда как в 64-битном ядре могут быть как 32-битные, так и 64-разрядные гостевые O.S.

Выполните шаги для установки KVM на Ubuntu

В этом разделе мы запишем шаги для установки KVM. В нашем предыдущем посте мы научились . Возможно, это также вам будет интересно.

1. Установка KVM Ubuntu 17.04 и других зависимых пакетов

В Ubuntu 17.04 LTS вы можете использовать команду apt или apt-get both. Здесь не будет различий в пакетах, установленных с помощью команды apt или apt-get, поэтому вы здесь хороши.

sudo apt update

sudo apt install qemu — kvm libvirt — bin bridge — utils

2. Узнайте о новых пользователях и группе для программного обеспечения KVM

После установки пакетов некоторые добавления будут происходить в количестве пользователей и групп.

(A) Создаются два пользователя.
— libvirt-qemu
— libvirt-dnsmasq

sharad@linuxworld :~ $ tail — 2 / etc / passwd

libvirt — qemu : x : 64055 : 129 : Libvirt Qemu ,:/ var / lib / libvirt : /bin/ false

libvirt — dnsmasq : x : 121 : 130 : Libvirt Dnsmasq ,:/ var / lib / libvirt / dnsmasq : /bin/ false

s harad@linuxworld :~ $

B) будут созданы две группы.

— kvm
— libvirtd

sharad@linuxworld :~ $ tail — 2 / etc / group

kvm : x : 129 :

libvirtd : x : 130 : sharad

sharad@linuxworld :~ $

Возможно, вы заметили, что используемый так называемый «шарад» является членом группы «libvirtd». Это означает, что этот пользователь может использовать KVM.

3. Проверьте установку KVM

Это довольно просто проверить установку KVM. Запустите команду —

virsh - c qemu : ///system list

В первый раз он покажет ошибку.

error : failed to connect to the hypervisor

error : Failed to connect socket to ‘/var/run/libvirt/libvirt-sock’ : Permission denied

sharad@linuxworld :~ $

Чтобы решить эту проблему, вы должны выйти и войти в систему на своем рабочем столе. Указывает, что текущий пользователь должен повторно войти в систему.

После входа в систему повторно запустите команду. На этот раз вы должны получить результат, как указано ниже. Он пуст, потому что не создается виртуальная машина.

sharad@linuxworld :~ $ virsh — c qemu : ///system list

Id Name State

—————————————————-

sharad@linuxworld :~ $

4. Установите Диспетчер виртуальных машин

Здесь мы используем Virtual Machine Manager, который представляет собой настольное приложение для управления виртуальными машинами KVM через libvirt.

Запустите эту команду для установки Диспетчера виртуальных машин.

sudo apt install virt — manager

Вы можете открыть Диспетчер виртуальных машин, введя его в Dash Home.Щелкните значок, он откроет приложение.

Чтобы открыть диспетчер виртуальных машин через командную строку, введите —

virt — manager

Ранее, когда мы установили KVM в Ubuntu 14.04 LTS Desktop, мы столкнулись с проблемой при создании первой виртуальной машины, но мы ее очень легко решили. В Ubuntu 16.04 LTS Desktop мы не обнаружили такой проблемы.

Если у Вас есть вопросы по теме «Установка KVM Ubuntu 17.04» - пишите их нам в форме для комментариев. Мы поможем вам разобраться в вашем вопросе намного быстрее.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter .

Выпуск WordPress 5.3 улучшает и расширяет представленный в WordPress 5.0 редактор блоков новым блоком, более интуитивным взаимодействием и улучшенной доступностью. Новые функции в редакторе […]

После девяти месяцев разработки доступен мультимедиа-пакет FFmpeg 4.2, включающий набор приложений и коллекцию библиотек для операций над различными мультимедиа-форматами (запись, преобразование и […]

  • Новые функции в Linux Mint 19.2 Cinnamon

    Linux Mint 19.2 является выпуском с долгосрочной поддержкой, который будет поддерживаться до 2023 года. Он поставляется с обновленным программным обеспечением и содержит доработки и множество новых […]

  • Вышел дистрибутив Linux Mint 19.2

    Представлен релиз дистрибутива Linux Mint 19.2, второго обновления ветки Linux Mint 19.x, формируемой на пакетной базе Ubuntu 18.04 LTS и поддерживаемой до 2023 года. Дистрибутив полностью совместим […]

  • Доступны новые сервисные релизы BIND, которые содержат исправления ошибок и улучшения функций. Новые выпуски могут быть скачано со страницы загрузок на сайте разработчика: […]

    Exim – агент передачи сообщений (MTA), разработанный в Кембриджском университете для использования в системах Unix, подключенных к Интернету. Он находится в свободном доступе в соответствии с […]

    После почти двух лет разработки представлен релиз ZFS on Linux 0.8.0, реализации файловой системы ZFS, оформленной в виде модуля для ядра Linux. Работа модуля проверена с ядрами Linux c 2.6.32 по […]

  • В WordPress 5.1.1 устранена уязвимость, позволяющая получить контроль над сайтом
  • Комитет IETF (Internet Engineering Task Force), занимающийся развитием протоколов и архитектуры интернета, завершил формирование RFC для протокола ACME (Automatic Certificate Management Environment) […]

    Некоммерческий удостоверяющий центр Let’s Encrypt, контролируемый сообществом и предоставляющий сертификаты безвозмездно всем желающим, подвёл итоги прошедшего года и рассказал о планах на 2019 год. […]

  • Вышла новая версия Libreoffice – Libreoffice 6.2
  • Подготовка сервера

    Проверяем наличие поддержки со стороны процессора:

    cat /proc/cpuinfo | egrep "(vmx|svm)"

    Если команда ничего не вернет, на сервере отсутствует поддержка виртуализации или она отключена в настройках БИОС. Сам KVM поставить на такой сервер можно, но при попытке ввести команду управления гипервизором мы получим ошибку «WARNING KVM acceleration not available, using "qemu"». В таком случае необходимо перезагрузить сервер, войти в БИОС, найти поддержку технологии виртуализации (Intel VT или AMD-V) и включить ее.

    Создадим каталоги, в которых будем хранить все, что касается виртуализации (предлагаемые по умолчанию не удобные):

    mkdir -p /kvm/{images,iso}

    * каталог /kvm/images для виртуальных дисков; /kvm/iso — для iso-образов.

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

    Установка выполняется из репозитория следующей командой:

    yum install qemu-kvm libvirt virt-install

    * где qemu-kvm — сам гипервизор; libvirt — библиотека управления виртуализацией; virt-install — утилита для управления виртуальными машинами.

    Разрешаем автозапуск:

    systemctl enable libvirtd

    Запускаем KVM:

    systemctl start libvirtd

    Настройка сети

    В данной инструкции рассмотрим использование сетевого моста.

    Настраивая сетевой мост через удаленное подключение, внимательно проверяйте вводимые данные. В случае ошибки соединение будет прервано.

    Устанавливаем пакет для работы с bridge:

    yum install bridge-utils

    Смотрим список сетевых интерфейсов и их настроек:

    В моем примере были следующие данные:

    1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo

    inet6::1/128 scope host
    valid_lft forever preferred_lft forever
    2: enp4s0f0: mtu 1500 qdisc pfifo_fast state UP qlen 1000

    inet 192.168.1.24/24 brd 192.168.1.255 scope global enp4s0f0
    valid_lft forever preferred_lft forever

    valid_lft forever preferred_lft forever
    3: enp5s5:

    4: virbr0:


    valid_lft forever preferred_lft forever
    5: virbr0-nic:
    link/ether 52:54:00:cd:86:98 brd ff:ff:ff:ff:ff:ff

    * из этого для нас важны enp4s0f0 — реальный сетевой интерфейс с настроенным IP-адресом 192.168.1.24 , через который идет подключение сервера к локальной сети (из него мы будем делать мост); 00:16:76:04:26:c6 — mac-адрес реального ethernet адаптера; virbr0 — виртуальный сетевой адаптер.

    Редактируем настройки реального адаптера:

    vi /etc/sysconfig/network-scripts/ifcfg-enp4s0f0

    Приводим его к виду:

    ONBOOT=yes
    BRIDGE=br0
    TYPE=Ethernet
    DEVICE=enp4s0f0
    BOOTPROTO=none

    Создаем интерфейс для сетевого моста:

    vi /etc/sysconfig/network-scripts/ifcfg-br0

    DEVICE=br0
    TYPE=Bridge
    ONBOOT=yes
    BOOTPROTO=static
    IPADDR=192.168.1.24
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=8.8.8.8
    DNS2=77.88.8.8

    Перезапускаем сетевую службу:

    systemctl restart network

    Сетевые настройки должны измениться — в моем случае:

    2: enp4s0f0: mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    link/ether 00:16:76:04:26:c6 brd ff:ff:ff:ff:ff:ff
    3: enp5s5: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:16:76:04:26:c7 brd ff:ff:ff:ff:ff:ff
    4: virbr0: mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:cd:86:98 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
    valid_lft forever preferred_lft forever
    5: virbr0-nic: mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:cd:86:98 brd ff:ff:ff:ff:ff:ff
    6: br0: mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:16:76:04:26:c6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.24/24 brd 192.168.1.255 scope global br0
    valid_lft forever preferred_lft forever
    inet6 fe80::216:76ff:fe04:26c6/64 scope link
    valid_lft forever preferred_lft forever

    Настаиваем перенаправления сетевого трафика:

    vi /etc/sysctl.d/99-sysctl.conf

    net.ipv4.ip_forward=1

    Применяем настройки:

    sysctl -p /etc/sysctl.d/99-sysctl.conf

    Перезапускаем libvirtd:

    systemctl restart libvirtd

    Создание виртуальной машины

    Смотрим доступные варианты гостевых операционных систем:

    Для создания первой виртуальной машины вводим следующую команду:

    virt-install -n FirstTest \
    --noautoconsole \
    --network=bridge:br0 \
    --ram 1024 --arch=x86_64 \
    --vcpus=1 --cpu host --check-cpu \
    --disk path=/kvm/images/FirstTest-disk1.img,size=16 \
    --cdrom /kvm/iso/CentOS-7-x86_64-Minimal-1611.iso \
    --graphics vnc,listen=0.0.0.0,password=my_password \
    --os-type linux --os-variant=rhel7 --boot cdrom,hd,menu=on

    • FirstTest — имя создаваемой машины;
    • noautoconsole — после создания не подключается автоматически к консоли виртуальной машины;
    • network — тип сети (в нашем примере сетевой мост);
    • ram — объем оперативной памяти, который будет выделен;
    • vcpus — количество виртуальных процессоров;
    • disk — виртуальный диск: path — путь до диска; size — его объем;
    • cdrom — виртуальный привод с образом системы;
    • graphics — параметры подключения к виртуальной машины с помощью графической консоли (в данном примере используем vnc); listen — на какой адресе принимает запросы vnc (в нашем примере на всех); password — пароль для подключения при помощи vnc;
    • os-variant — гостевая операционная система (весь список мы получали командой osinfo-query os , в данном примере устанавливаем Reв Hat 7 / CentOS 7).

    Разрешаем автостарт для созданной ВМ:

    virsh autostart FirstTest

    Подключение к виртуальной машине

    Для дальнейшей установки операционной системы скачиваем VNC-клиент на компьютер администратора, например, TightVNC и устанавливаем его.

    На сервере смотрим, на каком порту слушает VNC созданной машины:

    virsh vncdisplay FirstTest

    в моем случае было:

    Это значит, что нужно к 5900 прибавить 0. Если результат команды будет:1 — 5900 + 1 = 5901 и так далее.

    Открываем порт на брандмауэре:

    firewall-cmd --permanent --add-port=5900-5905/tcp

    firewall-cmd --reload

    * в данном примере добавлено сразу 6 tcp-портов от 5900 до 5905 .

    Запускаем установленный TightVNC Viewer, в открывшемся окне вводим IP-адрес сервера KVM и порт, на котором слушает наша ВМ (в данном примере, 5900):

    Нажимаем Connect . Программа запросит пароль — вводим тот, что указали при создании ВМ, (в данном примере, my_password ). Мы подключимся к виртуальной машине, как будто, к ней подключен монитор или удаленная консоль KVM.

    Admin и пароль, который создали при выполнении команды engine-setup . После успешного входа можно управлять виртуальными машинами через веб-интерфейс.

    В этой вступительной статье я расскажу вкратце обо всех программных средствах, использованных в процессе разработки услуги. Более подробно о них будет рассказано в следующих статьях.

    Почему ? Эта операционная система мне близка и понятна, так что при выборе дистрибутива мучений, терзаний и метаний испытано не было. Особых преимуществ перед Red Hat Enterprise Linux у него нет, но было принято решение работать со знакомой системой.

    Если вы планируете самостоятельно развернуть инфраструктуру, используя аналогичные технологии, я бы посоветовал взять именно RHEL: благодаря хорошей документации и хорошо написаным прикладным программам это будет если не на порядок, то уж точно раза в два проще, а благодаря развитой системе сертификации без особого труда можно будет найти некоторое количество специалистов, на должном уровне знакомых в данной ОС.

    Мы же, повторюсь, решили использовать Debian Squeeze с набором пакетов из Sid/Experimental и некоторыми пакетами, бэкпортированными и собранными с нашими патчами.
    В планах имеется публикация репозитория с пакетами.

    При выборе технологии виртуализации рассматривались два варианта - Xen и KVM.

    Также во внимание принимался факт наличия огромного количества разработчиков, хостеров, комерческих решений именно на базе Xen - тем интереснее было провести в жизнь решение именно на базе KVM.

    Основной же причиной, по которой мы решили использовать именно KVM, является необходимость запуска виртуальных машин с FreeBSD и, в перспективе, MS Windows.

    Для управления виртуальными машинами оказалось чрезвычайно удобно использовать и продукты, использующие ее API: virsh , virt-manager , virt-install , пр.

    Это система, которая хранит настройки виртуальных машин, управляет ими, ведёт по ним статистику, следит за тем, чтобы при старте у виртуальной машины поднимался интерфейс, подключает устройства к машине - в общем, выполняет кучу полезной работы и еще немножко сверх того.

    Разумеется, решение не идеально. Из минусов следует назвать:

    • Абсолютно невменяемые сообщения об ошибках.
    • Невозможность изменять часть конфигурации виртуальной машины на лету, хотя QMP (QEMU Monitor Protocol) это вполне позволяет.
    • Иногда к libvirtd по непонятной причине невозможно подключиться - он перестаёт реагировать на внешние события.

    Основной проблемой в реализации услуги в самом начале представлялось лимитирование ресурсов для виртуальных машин. В Xen эта проблема была решена при помощи внутреннего шедулера, распределяющего ресурсы между виртуальными машинами - и что самое прекрасное, была реализована возможность лимитировать и дисковые операции в том числе.

    В KVM ничего такого не было до появления механизма распределения ресурсов ядра . Как обычно в Linux, доступ к этим функциям был реализован посредством специальной файловой системы cgroup , в которой при помощи обычных системных вызовов write() можно было добавить процесс в группу, назначить ему его вес в попугаях, указать ядро, на котором он будет работать, указать пропускную способность диска, которую этот процесс может использовать, или, опять же, назначить ему вес.

    Профит в том, что всё это реализуется внутри ядра, и использовать это можно не только для сервера, но и для десктопа (что и использовали в известном «The ~200 Line Linux Kernel Patch That Does Wonders »). И на мой взгляд, это одно из самых значительных изменений в ветке 2.6, не считая любимого #12309 , а не запиливание очередной файловой системы. Ну, разве что, кроме POHMELFS (но чисто из-за названия).

    Отношение к этой библиотеке-утилите у меня весьма неоднозначное.

    С одной стороны это выглядит примерно так:

    И ещё эту штуку чертовски сложно собрать из исходников и тем более в пакет: иногда мне кажется, что Linux From Scratch собрать с нуля несколько проще.

    С другой стороны - очень мощная штука, которая позволяет создавать образы для виртуальных машин, модифицировать их, ужимать, ставить grub, модифицировать таблицу разделов, управлять конфигурационными файлами, переносить «железные» машины в виртуальную среду, переносить виртуальные машины с одного образа на другой, переносить виртуальные машины из образа на железо и, честно говоря, тут меня фантазия немного подводит. Ах, да: ещё можно запустить демон внутри виртуальной машины Linux и получить доступ к данным виртуальной машины вживую, и всё это делать на shell, python, perl, java, ocaml. Это краткий и далеко не полный список того, что можно сделать с .

    Интересно, что большая часть кода в генерируется в момент сборки, равно как и документация к проекту. Очень широко используется ocaml, perl. Сам код пишется на C, который потом оборачивается в OCaml, и повторяющиеся куски кода генерируются сами. Работа с образами осуществляется путём запуска специального сервисного образа (supermin appliance), в который через канал внутрь него отправляются команды. Внутри этого образа содержится некоторый rescue набор утилит, таких как parted, mkfs и прочих полезных в хозяйстве системного администратора.

    Я с недавнего времени его даже дома стал использовать, когда выковыривал из образа nandroid нужные мне данные. Но для этого требуется ядро с поддержкой yaffs.

    Прочее

    Ниже приведено ещё несколько интересных ссылок на описание использованных пограммных средств - почитать и поизучать самостоятельно, если интересно. Например,

    Мне лично проще всего думать о KVM (Kernel-based Virtual Machine), как о таком уровне абстракции над технологиями хардверной виртуализации Intel VT-x и AMD-V. Берем машину с процессором, поддерживающим одну из этих технологий, ставим на эту машину Linux, в Linux’е устанавливаем KVM, в результате получаем возможность создавать виртуалки. Так примерно и работают облачные хостинги, например, Amazon Web Services . Наряду с KVM иногда также используется и Xen, но обсуждение этой технологии уже выходит за рамки данного поста. В отличие от технологий контейнерной виртуализации, например, того же Docker , KVM позволяет запускать в качестве гостевой системы любую ОС, но при этом имеет и бо льшие накладные расходы на виртуализацию.

    Примечание: Описанные ниже действия были проверены мной на Ubuntu Linux 14.04, но по идее будут во многом справедливы как для других версий Ubuntu, так и других дистрибутивов Linux. Все должно работать как на десктопе, так и на сервере, доступ к которому осуществляется по SSH.

    Установка KVM

    Проверяем, поддерживается ли Intel VT-x или AMD-V нашим процессором:

    grep -E "(vmx|svm)" / proc/ cpuinfo

    Если что-то нагреполось, значит поддерживается, и можно действовать дальше.

    Устанавливаем KVM:

    sudo apt-get update
    sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils

    Что где принято хранить:

    • /var/lib/libvirt/boot/ — ISO-образы для установки гостевых систем;
    • /var/lib/libvirt/images/ — образы жестких дисков гостевых систем;
    • /var/log/libvirt/ — тут следует искать все логи;
    • /etc/libvirt/ — каталог с файлами конфигурации;

    Теперь, когда KVM установлен, создадим нашу первую виртуалку.

    Создание первой виртуалки

    В качестве гостевой системы я выбрал FreeBSD. Качаем ISO-образ системы:

    cd / var/ lib/ libvirt/ boot/
    sudo wget http:// ftp.freebsd.org/ path/ to/ some-freebsd-disk.iso

    Управление виртуальными машинами в большинстве случаев производится при помощи утилиты virsh:

    sudo virsh --help

    Перед запуском виртуалки нам понадобится собрать кое-какие дополнительные сведения.

    Смотрим список доступных сетей:

    sudo virsh net-list

    Просмотр информации о конкретной сети (с именем default):

    sudo virsh net-info default

    Смотрим список доступных оптимизаций для гостевых ОС:

    sudo virt-install --os-variant list

    Итак, теперь создаем виртуальную машину с 1 CPU, 1 Гб RAM и 32 Гб места на диске, подключенную к сети default:

    sudo virt-install \
    --virt-type =kvm \
    --name freebsd10 \
    --ram 1024 \
    --vcpus =1 \
    --os-variant =freebsd8 \
    --hvm \
    --cdrom =/ var/ lib/ libvirt/ boot/ FreeBSD-10.2 -RELEASE-amd64-disc1.iso \
    --network network =default,model =virtio \
    --graphics vnc \
    --disk path =/ var/ lib/ libvirt/ images/ freebsd10.img,size =32 ,bus =virtio

    Вы можете увидеть:

    WARNING Unable to connect to graphical console: virt-viewer not
    installed. Please install the "virt-viewer" package.

    Domain installation still in progress. You can reconnect to the console
    to complete the installation process.

    Это нормально, так и должно быть.

    Затем смотрим свойства виртуалки в формате XML:

    sudo virsh dumpxml freebsd10

    Тут приводится наиболее полная информация. В том числе есть, к примеру, и MAC-адрес, который понадобятся нам далее. Пока что находим информацию о VNC. В моем случае:

    С помощью любимого клиента (я лично пользуюсь Rammina) заходим по VNC , при необходимости используя SSH port forwarding. Попадаем прямо в инстялятор FreeBSD. Дальше все как обычно — Next, Next, Next, получаем установленную систему.

    Основные команды

    Давайте теперь рассмотрим основные команды для работы с KVM.

    Получение списка всех виртуалок:

    sudo virsh list --all

    Получение информации о конкретной виртуалке:

    sudo virsh dominfo freebsd10

    Запустить виртуалку:

    sudo virsh start freebsd10

    Остановить виртуалку:

    sudo virsh shutdown freebsd10

    Жестко прибить виртуалку (несмотря на название, это не удаление):

    sudo virsh destroy freebsd10

    Ребутнуть виртуалку:

    sudo virsh reboot freebsd10

    Склонировать виртуалку:

    sudo virt-clone -o freebsd10 -n freebsd10-clone \
    --file / var/ lib/ libvirt/ images/ freebsd10-clone.img

    Включить/выключить автозапуск:

    sudo virsh autostart freebsd10
    sudo virsh autostart --disable freebsd10

    Запуск virsh в диалоговом режиме (все команды в диалоговом режиме — как описано выше):

    sudo virsh

    Редактирование свойств виртуалки в XML, в том числе здесь можно изменить ограничение на количество памяти и тд:

    sudo virsh edit freebsd10

    Важно! Комментарии из отредактированного XML, к сожалению, удаляются.

    Когда виртуалка остановлена, диск тоже можно ресайзить:

    sudo qemu-img resize / var/ lib/ libvirt/ images/ freebsd10.img -2G
    sudo qemu-img info / var/ lib/ libvirt/ images/ freebsd10.img

    Важно! Вашей гостевой ОС, скорее всего, не понравится, что диск внезапно стал больше или меньше. В лучшем случае, она загрузится в аварийном режиме с предложением переразбить диск. Скорее всего, вы не должны хотеть так делать. Куда проще может оказаться завести новую виртуалку и смигрировать на нее все данные.

    Резервное копирование и восстановление производятся довольно просто. Достаточно сохранить куда-то вывод dumpxml, а также образ диска, а потом восстановить их. На YouTube удалось найти видео с демонстрацией этого процесса, все и вправду несложно.

    Настройки сети

    Интересный вопрос — как определить, какой IP-адрес получила виртуалка после загрузки? В KVM это делается хитро. Я в итоге написал такой скрипт на Python :

    #!/usr/bin/env python3

    # virt-ip.py script
    # (c) 2016 Aleksander Alekseev
    # http://сайт/

    import sys
    import re
    import os
    import subprocess
    from xml .etree import ElementTree

    def eprint(str ) :
    print (str , file = sys .stderr )

    if len (sys .argv ) < 2 :
    eprint("USAGE: " + sys .argv [ 0 ] + " " )
    eprint("Example: " + sys .argv [ 0 ] + " freebsd10" )
    sys .exit (1 )

    if os .geteuid () != 0 :
    eprint("ERROR: you shold be root" )
    eprint("Hint: run `sudo " + sys .argv [ 0 ] + " ...`" ) ;
    sys .exit (1 )

    if subprocess .call ("which arping 2>&1 >/dev/null" , shell = True ) != 0 :
    eprint("ERROR: arping not found" )
    eprint("Hint: run `sudo apt-get install arping`" )
    sys .exit (1 )

    Domain = sys .argv [ 1 ]

    if not re .match ("^*$" , domain) :
    eprint("ERROR: invalid characters in domain name" )
    sys .exit (1 )

    Domout = subprocess .check_output ("virsh dumpxml " +domain+" || true" ,
    shell = True )
    domout = domout.decode ("utf-8" ) .strip ()

    if domout == "" :
    # error message already printed by dumpxml
    sys .exit (1 )

    Doc = ElementTree.fromstring (domout)

    # 1. list all network interfaces
    # 2. run `arping` on every interface in parallel
    # 3. grep replies
    cmd = "(ifconfig | cut -d " " -f 1 | grep -E "." | " + \
    "xargs -P0 -I IFACE arping -i IFACE -c 1 {} 2>&1 | " + \
    "grep "bytes from") || true"

    for child in doc.iter () :
    if child.tag == "mac" :
    macaddr = child.attrib [ "address" ]
    macout = subprocess .check_output (cmd .format (macaddr) ,
    shell = True )
    print (macout.decode ("utf-8" ) )

    Скрипт работает как с default сетью, так и с bridged сетью, настройку которой мы рассмотрим далее. Однако на практике куда удобнее настроить KVM так, чтобы он всегда назначал гостевым системам одни и те же IP-адреса. Для этого правим настройки сети:

    sudo virsh net-edit default

    … примерно таким образом:

    >



    >

    После внесения этих правок


    >

    … и заменяем на что-то вроде:




    >

    Перезагружаем гостевую систему и проверяем, что она получила IP по DHCP от роутера. Если же вы хотите, чтобы гостевая система имела статический IP-адрес, это настраивается как обычно внутри самой гостевой системы.

    Программа virt-manager

    Вас также может заинтересовать программа virt-manager:

    sudo apt-get install virt-manager
    sudo usermod -a -G libvirtd USERNAME

    Так выглядит ее главное окно:

    Как видите, virt-manager представляет собой не только GUI для виртуалок, запущенных локально. С его помощью можно управлять виртуальными машинами, работающими и на других хостах, а также смотреть на красивые графички в реальном времени. Я лично нахожу особенно удобным в virt-manager то, что не нужно искать по конфигам, на каком порту крутится VNC конкретной гостевой системы. Просто находишь виртуалку в списке, делаешь двойной клик, и получаешь доступ к монитору.

    Еще при помощи virt-manager очень удобно делать вещи, которые иначе потребовали бы трудоемкого редактирования XML-файлов и в некоторых случаях выполнения дополнительных команд. Например, переименование виртуальных машин, настройку CPU affinity и подобные вещи. Кстати, использование CPU affinity существенно снижает эффект шумных соседей и влияние виртуальных машин на хост-систему. По возможности используйте его всегда.

    Если вы решите использовать KVM в качестве замены VirtualBox, примите во внимание, что хардверную виртуализацию они между собой поделить не смогут. Чтобы KVM заработал у вас на десктопе, вам не только придется остановить все виртуалки в VirtualBox и Vagrant , но и перезагрузить систему. Я лично нахожу KVM намного удобнее VirtualBox, как минимум, потому что он не требует выполнять команду sudo / sbin/ rcvboxdrv setup после каждого обновления ядра, адекватно работает c Unity , и вообще позволяет спрятать все окошки.

    
    Top