Виртуализация в unix. часть 1: kernel-based virtual machine (kvm)

Установка виртуальной машины Ubuntu 16.04 на KVM

В качестве гостевой системы установим Ubuntu 16.04 с GUI. Также для меня пути по умолчанию не годятся:

  • — ISO-образы для установки гостевых систем;
  • — образы жестких дисков гостевых систем;
  • — тут следует искать все логи;
  • — каталог с файлами конфигурации.

Поэтому создаём директорию , а в ней две директории для ISO образов и образов наших гостевых ОС.

Качаем ISO-образ системы в директорию созданную ранее:

После завершения скачивания создадим нашу виртуальную машину на дистрибутиве Ubuntu Desktop 16.04 с 2 CPU, 2 Гб RAM и 20 Гб места на диске, подключенную к сети br0.:

Теперь давайте разберемся что же мы тут написали: — имя виртуальной машины — количество выделенной памяти. — количество ядер выделенных профессоров — оптимизация под конкретную гостевую ОС. — автоматический запуск гостевой ОС. — расположение iso образа устанавливаемой ОС. — к какой сети будет подключена наша виртуальная машина, — модель сетевого адаптера. — способ подключения к нашей гостевой ОС (в данном случае vnc), — на каких IP интерфейсах принимать соединения и с каким паролем). — расположение образа виртуального hdd (диска), — размер диска 20 Гбайт.

Подготовка сервера

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

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-образов.

Настройка SSH в CentOS 7

Дальше внесем некоторые изменения в работу ssh для увеличения безопасности. По-умолчанию, сервис работает на 22 порту и если все оставить как есть, то мы получим огромное количество попыток авторизоваться. Боты сканят непрерывно интернет и подбирают пароли к ssh. Чтобы обезопасить себя от сканов простых ботов, изменим порт, на котором работает ssh. Можно выбрать любой пятизначный номер, это не принципиально. От автоматического сканирования это защитит. Повесим демон ssh на 25333 порт. Для этого редактируем файл /etc/ssh/sshd_config

# mcedit /etc/ssh/sshd_config

Раскомментируем строку Port 22 и заменим значение 22 на 25333. Так же я обычно разрешаю подключаться по ssh пользователю root. Мне так удобнее. Проблем с этим у меня никогда не возникало. Если вы считаете, что это не безопасно, не трогайте эту настройку. Чтобы разрешить пользователю root подключаться по ssh, раскомментируйте строку PermitRootLogin yes.

Сохраняем файл. Теперь обязательно изменяем настройки iptables, добавляем в разрешенные подключения вместо 22 порта 25333. Если этого не сделать, то после перезапуска sshd мы потеряем удаленный доступ к серверу. Итак, открываем /etc/iptables_rules.sh и меняем в строке

$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT

22 на 25333 и исполняем файл. Наше текущее соединение не оборвется, так как оно уже установлено, но заново подключиться по ssh к 22 порту уже н получится.

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

# systemctl restart sshd

Проверяем какой порт слушает sshd:

# netstat -tulpn | grep sshd
tcp        0      0 0.0.0.0:25333           0.0.0.0:*               LISTEN      1799/sshd
tcp6       0      0 :::25333                :::*                    LISTEN      1799/sshd

Если вывод такой же как у меня, то все в порядке, теперь к ssh можно подключаться по 25333 порту.

Добавим еще одну небольшую настройку. Иногда, когда возникают проблемы с dns сервером, логин по ssh подвисает на 30-60 секунд. Вы просто ждете после ввода логина, когда появится возможность ввести пароль. Чтобы избежать этого замедления, укажем ssh не использовать dns в своей работе. Для этого в конфиге раскомментируем строку с параметром UseDNS и отключим его. По-умолчанию он включен.

UseDNS no

Для применения изменений нужно перезапустить ssh службу, как мы уже делали ранее.

Добавление USB устройств

Изменение Apparmor

Для получения доступа к USB устройствам требуются изменения в настройках apparmor. Отредактируйте /etc/apparmor.d/abstractions/libvirt-qemu и раскомментируйте строки.:

# WARNING: uncommenting these gives the guest direct access to host hardware.
# This is required for USB pass through but is a security risk. You have been
# warned.
/sys/bus/usb/devices/ r,
/sys/devices/*/*/usb*/** r,
/dev/bus/usb/*/* rw,

После изменения настроек apparmor нужно перезапустить.:

$ sudo /etc/init.d/apparmor restart

Добавление USB устройства

Определите Vendor ID и Product ID.:

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 012: ID 0a5c:2110 Broadcom Corp. Bluetooth Controller
Bus 005 Device 003: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Для подключения Broadcom Corp. Bluetooth Controller vendor и product id это 0a5c и 2110. Эти значения нужно добавить в xml профиль. Выполните virsh edit <domain>.:

<domain type='kvm'>
  <name>windowsxp</name>
  …
  <devices>
    …
    <hostdev mode='subsystem' type='usb'>
      <source>
        <vendor id='0x0a5c'/>
        <product id='0x2110'/>
      </source>
    </hostdev>
  </devices>
</domain>

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

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

1
2
3
4
5
6

$sudo lvcreate-L10G-nvg_sata_test_root vg_sata

$sudo lvcreate-L20G-nvg_sata_test_home vg_sata

$sudo lvcreate-L10G-nvg_sata_test_opt vg_sata

$sudo lvcreate-L10G-nvg_sata_test_var vg_sata

$sudo lvcreate-L5G-nvg_sata_test_tmp vg_sata

$sudo lvcreate-L2G-nvg_sata_test_swap vg_sata

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

$sudo virt-install\

connect qemu///system \

—name=test.tech-geek.local\

—ram2048\

—cpu host\

—vcpus1\

—disk path=/dev/vg_sata/vg_sata_test_root,format=raw,bus=virtio,cache=none\

—cdrom/var/lib/libvirt/images/debian-9.5.0-amd64-netinst.iso\

—description=»debian-test.tech-geek.local»\

—graphics vnc,listen=0.0.0.0,keymap=us,password=12345\

—os-type=linux\

—os-variant=debiansqueeze\

—network bridgebr0\

—video=vga\

—hvm\

—accelerate

Отсоединяем на время скрин комбинацией Ctrl + A + D и подключаем созданные нами логические тома к машине нехитрой манипуляцией. Для каждого логического тома новой ВМ создаем такой файл XML.

vg_sata_test_home.xml

1
2
3
4
5

<disk type=’block’device=’disk’>

<driver name=’qemu’type=’raw’cache=’none’io=’native’/>

<source dev=’/dev/vg_sata/vg_sata_test_home’/>

<backingStore/>

<target dev=’vdb’bus=’virtio’/></disk>

В теге source указываем местоположение логического тома на гипервизоре, в теге target — название диска (vdb, vdc и так далее). Повторяем для каждого логического тома, кроме root (он уже подключен как vda и активен). После того как все файлы будут созданы, подключим все тома к виртуальной машине:

1 $sudo virsh attach-device—config<имяновойВМ>vg_sata_<имяВМ>_<имяраздела>.xml

Если все сделано правильно, на экране появится сообщение Device attached successfully.

Теперь можно подключаться к машине по VNC и устанавливать ОС, используя, например, krdc или любую другую утилиту. При подключении нужно указать сетевой адрес гипервизора и порт 5900. Проверить, какие порты открыты, можно вот так:

1
2

$sudo netstat-tulnp|grep qemu

$sudo virsh vncdisplay<имяновойВМ>

соответствует порту 5900, а
1 — порту 5901.

При установке гостевой системы делаем ручную разметку диска с файловой системой ext4. Каждому разделу выделен свой диск vdX. Загрузчик прописываем в VDA.

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

Для любителей GUI тоже есть приятная новость. Если ты предпочитаешь работать в «Иксах», то тебе пригодится утилита virt-manager. Ниже я опишу работу с ней в Debian 9 и KDE.

Устанавливаем пакет. После установки запускаем утилиту.

1 $sudo apt-get install-yvirt-manager

Подключаемся к гипервизору по IP, вводим логин и пароль пользователя, который добавлен в группу libvirt на гипервизоре. Связь установлена. Теперь приступаем к созданию и настройке виртуальной машины. После подключения гипервизора кликаем правой кнопкой и выбираем «Добавить новое». Появится окно менеджера создания виртуальных машин.

В окне выбираем «Установка с локального образа» и нажимаем «Далее».

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

Выбираем «Использовать ISO-образ» и находим его на гипервизоре. Нажимаем «Выбрать образ» и «Далее».

Выбор локального образа

Выставляем параметры ЦП и памяти, жмем «Далее».

Параметры ЦП и памяти

Указываем носитель для системы — логический том LVM. Выбираем уже имеющийся пул
vg_sata и нажимаем значок «плюс» (добавить). Создаем новый корневой раздел
vg_sata_<имяВМ>_root и указываем объем носителя. Жмем «Финиш».

Указываем том LVM как носитель

В последнем окне проверяем настройки сети: ВМ должна использовать сетевой мост. Ставим галку «Конфигурация машины до установки ОС». Жмем «Финиш».

Перепроверка настроек

В появившемся окне добавляем остальные созданные логические тома к ВМ через добавление новых девайсов.

Добавление логических томов к ВМ

После того как все тома будут подключены, нажимаем кнопку «Начать установку» и устанавливаем ОС на новую ВМ.

KVM: добавление диска в виртуальную машину

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

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

Вместо qcow2 вы можете указать нужный формат диска, так же нужно указать путь до файла. У меня хранилище для дисков /vz/disk/.

После этого, можно добавить устройство виртуального диска к самой ВМ:

Остановите и запустите ВМ, проверьте что получилось:

Domain test-centos is being shutdown
Domain test-centos started
<domain type='kvm' id='14'>
<name>test-centos</name>
<uuid>5c7eabea-a180-4f74-af9f-c4c2d3b7f70f</uuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>6</vcpu>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='cdrom'/>
<boot dev='hd'/>
<bootmenu enable='yes'/>
</os>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/vz/disk/test.img'/>
<backingStore/>
<target dev='vdb' bus='virtio'/>
<alias name='virtio-disk1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</disk>

Как видим, диск добавлен. После данных манипуляций, на виртуальной машине нужно разметить этот диск под ваши нужды.

Web интерфейс (gui) для KVM

Выше я показал, как управлять виртуальными машинами через консоль. В целом, весь необходимый функционал доступен. Но если вам хочется управлять виртуальными машинами kvm через браузер, то можно поставить простую панель управления для этого. В качестве KVM Web Interface я предлагаю использовать VMDashboard. Это обычное веб приложение, написанное на php. В работе использует базу данных MySQL.

Устанавливаем необходимые компоненты сервера для работы Web Interface.

sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql php-xml php-libvirt-php python

Для того, чтобы работало подключение к консолям виртуальных машин через web интерфейс, необходимо раскомментировать один параметр в /etc/libvirt/qemu.conf.

sudo nano /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0"

Продолжаем настройку web панели для kvm. Добавляем пользователя www-data в группу libvirt:

sudo adduser www-data libvirt

Переходим в директорию www и загружаем исходники панели:

cd /var/www/html
sudo wget https://github.com/VMDashboard/vmdashboard/archive/v19.01.03.tar.gz

Распаковываем их и готовим к запуску:

sudo tar -xzf v19.01.03.tar.gz
sudo mv vmdashboard-19.01.03 vmdashboard
sudo chown -R www-data:www-data /var/www/html/vmdashboard

Теперь нам нужно создать mysql базу для веб панели.

sudo mysql -u root
CREATE DATABASE vmdashboard;
CREATE USER 'vmdashboard'@'localhost' IDENTIFIED BY 'parol';
GRANT ALL PRIVILEGES ON vmdashboard.* to 'vmdashboard'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Далее нужно перезагрузить kvm сервер:

sudo reboot

После перезагрузки идем в web интерфейс по адресу http://10.20.1.40/vmdashboard/ и настраиваем подключение к панели управления виртуальными машинами. Используем данные о созданной ранее базе данных и пользователе.

На этом установка и настройка веб панели управления для kvm закончена. Можно переходить в интерфейс и управлять виртуалками.

Скрипт для автоматического бэкапа виртуальных машин KVM

По мотивам всего написанного выше я набросал простенький скрипт для автоматического живого бэкапа всех дисков всех работающих в момент выполнения скрипта виртуальных машин

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

Лично я бэкаплю только небольшие системные диски. Все, что много весит, предпочитаю архивировать другими способами уже изнутри виртуальной машины. Если это базы данных, то делаю , если это файловый сервер, то использую rsync для создания инкрементных бэкапов. Ну и так далее. Каждый выбирает средства на свой вкус.

#!/bin/bash

# Дата год-месяц-день
data=`date +%Y-%m-%d`
# Папка для бэкапов
backup_dir=/backup-vm
# Список работающих VM
vm_list=`virsh list | grep running | awk '{print $2}'`
# Список VM, заданных вручную, через пробел
#vm_list=(vm-1 vm-2)
# Лог файл
logfile="/var/log/kvmbackup.log"

# Использовать это условие, если список VM задается вручную
#for activevm in "${vm_list}";
# Использовать это условие, если список работающих VM берется автоматически
for activevm in $vm_list
    do
        mkdir -p $backup_dir/$activevm
        # Записываем информацию в лог с секундами
        echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup $activevm" >> $logfile
        # Бэкапим конфигурацию
        virsh dumpxml $activevm > $backup_dir/$activevm/$activevm-$data.xml
        echo "`date +"%Y-%m-%d_%H-%M-%S"` Create snapshots $activevm" >> $logfile
        # Список дисков VM
        disk_list=`virsh domblklist $activevm | grep vd | awk '{print $1}'`
        # Адрес дисков VM
        disk_path=`virsh domblklist $activevm | grep vd | awk '{print $2}'`
        # Делаем снепшот диcков
        virsh snapshot-create-as --domain $activevm snapshot --disk-only --atomic --quiesce --no-metadata
        sleep 2
        for path in $disk_path
            do
                echo "`date +"%Y-%m-%d_%H-%M-%S"` Create backup $activevm $path" >> $logfile
                # Вычленяем имя файла из пути
                filename=`basename $path`
                # Бэкапим диск
                pigz -c $path > $backup_dir/$activevm/$filename.gz
                sleep 2
            done
        for disk in $disk_list
            do
                # Определяем путь до снепшота
                snap_path=`virsh domblklist $activevm | grep $disk | awk '{print $2}'`
                echo "`date +"%Y-%m-%d_%H-%M-%S"` Commit snapshot $activevm $snap_path" >> $logfile
                # Объединяем снепшот
                virsh blockcommit $activevm $disk --active --verbose --pivot
                sleep 2
                echo "`date +"%Y-%m-%d_%H-%M-%S"` Delete snapshot $activevm $snap_path" >> $logfile
                # Удаляем снепшот
                rm $snap_path
            done
        echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup $activevm" >> $logfile
    done

Обращаю внимание на несколько моментов:

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

Снепшоты будут создаваться в той же папке, где хранится основной файл данных. На время отладки советую для начала закомментировать строку с удалением снепшота, на всякий случай. Рекомендую этот крипт прогнать сначала на тестовом сервере. Я его написал на примере одного гипервизора, больше нигде не проверял. Но работает он однозначно, я проверил несколько раз с разными списками VM. В итоге оставил его у себя на сервере в работе.

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

/usr/bin/find /backup-vm/*/ -type f -mtime +90 -exec rm -rf {} \;

Данная команда удалит все файлы старше 90 дней в папках с названиями виртуальных машин, расположенных в /backup-vm.

Добавление памяти и vCPU виртуальной машине KVM

В консоли KVM вы можете добавить или уменьшить ресурсы процессора и памяти, выделенные для ВМ двумя способами:

  • С помощью virsh
  • Через конфигурационный XML файл ВМ

Если виртуальная машина запущена, ее нужно остановить:

Domain test-centos is being shutdown

Теперь с помощью virsh изменим количество виртуальных процессоров до 6 (vCPU):

Где:

<vm name>

— имя машины

<vcpu_count>

— количество ядер процессора

Например:

Но при применении этой команды, у меня сразу же появилась ошибка:

“error: invalid argument: requested vcpus is greater than max allowable vcpus for the persistent domain: 6 > 4”

Мы не можем установить количество ядер процессора, больше, чем максимальное количество. Чтобы увеличить максимальное количество ядер ВМ, выполните команду:

Повторите первую команду и запустите виртуальную машину:

Проверим количество процессоров в настройках ВМ: овленное количество процессоров:

<domain type='kvm'>
<name>test-centos</name>
<uuid>5c7eabea-a180-4f74-af9f-c4c2d3b7f70f</uuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>6</vcpu>

Аналогичным образом добавим память виртуальной машине:

Например:

Все по той же причине, сразу же вышла ошибка:

“error: invalid argument: cannot set memory higher than max memory.”

Увеличим максимальное значение памяти::

Теперь можно увеличить память ВМ.

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

Также вы можете изменить ресурсы ВМ KVM через ее конфигурационный XML файл. Можно изменить файл в режиме онлайн или же сделав бэкап XML файла ВМ, изменить его и применить к виртуальной машине.

Отредактируем XML файл ВМ в онлайн режиме:

В открывшемся редакторе vi внесите изменения, нажав кнопку “Insert”.

Измените блок:

<domain type='kvm'>
<name>test-centos</name>
<uuid>5c7eabea-a180-4f74-af9f-c4c2d3b7f70f</uuid>
<memory unit='KiB'>6291456</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<vcpu placement='static'>6</vcpu>
<os>

Например, зададим для ВМ 2 ядра и 1Гб памяти:

Учитывайие что память указывается в килобайтах.

Сохраните изменения в файле и перезапустите ВМ:

Проверьте настройки ВМ:

Тоже самое можно сделать, сделав бэкап XML файла:

Измените нужные вам параметры, сохраните файл и примените к виртуальной машине:

Domain test-centos is being shutdown
Domain test-centos defined from /root/test.xml
Domain test-centos started

Иногда при изменении конфигурационного файла ВМ в онлайн режиме назначенные ресурсы сбрасываются после перезагрузки. В этом случае выполните остановку виртуальной машины и после этого просто запустите ее.

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

Прежде чем начать установку гипервизора KVM в Ubuntu, проверим, поддерживает ли наш процессор виртуализацию. Для этого существует утилита kvm-ok. Если у вас нет ее в системе, установите пакет, который ее содержит.

sudo apt install cpu-checker
sudo kmv-ok

Если ваш процессор не поддерживает виртуализацию, то получите сообщение:

INFO: Your CPU does not support KVM extensionsKVM acceleration can NOT be used

Если же все ОК, то информация будет следующая.

В этом случае можно приступать к установке виртуализации kvm.

sudo apt install qemu qemu-kvm libvirt-daemon-system virtinst libosinfo-bin

Я устанавливаю следующие компоненты kvm:

  1. qemu и qemu-kvm — сам гипервизор
  2. libvirt-daemon-system и virtinst — утилиты для управления гипервизором и виртуальными машинами
  3. libosinfo-bin — пакет с информацией о поддержки гипервизорами различных операционных систем.

Запустим и добавим в автозагрузку сервис управления kvm:

sudo systemctl enable --now libvirtd

В целом, все. Установка KVM на Ubuntu на этом и заканчивается. Можно проверить, загрузились ли у вас модули ядра kvm.

sudo lsmod | grep -i kvm
kvm_intel 282624 0
kvm 663552 1 kvm_intel

Все в порядке, гипервизор kvm готов к работе.

Method # 2: qemu-kvm VM Config File (Recommended)

You need to edit your VM config file which is in XML format. The config file is located at /etc/libvirt/qemu directory.Append the following line before final </devices>:

1 <graphics type=’vnc’ port=’-1′ autoport=’yes’ keymap=’en-us’/>

Here is my sample config file:

123456789101112131415161718192021222324252627282930313233343536373839404142434445 <domain type=’kvm’>
  <name>vm0</name>
  <uuid>88d067cf-e5f7-7229-f35f-472a9c884864</uuid>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch=’x86_64′ machine=’rhel5.4.0′>hvm</type>
    <boot dev=’hd’/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset=’utc’/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usrlibexecqemu-kvm</emulator>
    <disk type=’file’ device=’disk’>
      <driver name=’qemu’ cache=’none’/>
      <source file=’/images/vm0.img’/>
      <target dev=’vda’ bus=’virtio’/>
    </disk>
    <interface type=’bridge’>
      <mac address=’xx:yy:zz:ee:f4:63’/>
      <source bridge=’br0’/>
      <model type=’virtio’/>
    </interface>
    <interface type=’bridge’>
      <mac address=’54:52:xx:yy:zz:ee’/>
      <source bridge=’br1’/>
      <model type=’virtio’/>
    </interface>
    <serial type=’pty’>
      <target port=’0’/>
    </serial>
    <console type=’pty’>
      <target port=’0’/>
    </console>
    <graphics type=’vnc’ port=’-1′ autoport=’yes’ keymap=’en-us’/>
  </devices></domain>

Finally, restart your libvirtd:

123 # systemctl restart libvirtd# virsh shutdown vm0# virsh start vm0

Базовые команды управления ВМ

1. Получить список созданных машин:

virsh list —all

2. Включить / перезагрузить / выключить.

а) включить виртуальную машину можно командой:

virsh start FirstTest

* где FirstTest — имя созданной машины.

б) перезагрузить:

virsh reboot FirstTest

* посылает команду операционной системе на корректную перезагрузку.

в) выключить корректно:

virsh shutdown FirstTest

* посылает команду операционной системе на корректное выключение.

г) выключить принудительно:

virsh destroy FirstTest

* грубо выключает ВМ. Может привести к потере данных. Способ стоит применять при полном зависании виртуалки.

д) приостановить:

virsh suspend FirstTest

Для возобновления работы вводим команду:

virsh resume FirstTest

е) отправить команду всем гостевым операционным системам:

for i in $(virsh list —name —state-shutoff); do virsh start $i; done

for i in $(virsh list —name —state-running); do virsh shutdown $i; done

* первыя команда запустит все ВМ, вторая — отправит команду на выключение.

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

virsh autostart FirstTest

4. Удаление виртуальной машины:

Удаляем виртуальную машину:

virsh undefine FirstTest

Удаляем виртуальный жесткий диск:

\rm /kvm/images/FirstTest-disk1.img

* где /kvm/images — папка, где хранится диск; FirstTest-disk1.img — имя виртуальног диска для удаленной машины.

5. Редактирование конфигурации виртуальной машины:

Открыть редактор для изменения конфигурации:

virsh edit FirstTest

Также можно менять параметры из командной строки. Приведем несколько примеров для работы с виртуальной машиной FirstTest.

а) изменить количество процессоров:

virsh setvcpus FirstTest 2 —config —maximum

virsh setvcpus FirstTest 2 —config

б) изменить объем оперативной памяти:

virsh setmaxmem FirstTest 2G —config

virsh setmem FirstTest 2G —config

6. Работа со снапшотами

а) Создать снимок виртуальной машины можно командой:

virsh snapshot-create-as —domain FirstTest —name FirstTest_snapshot_2020-03-21

* где FirstTest — название виртуальной машины; FirstTest_snapshot_2020-03-21 — название для снапшота.

б) Список снапшотов можно посмотреть командой:

virsh snapshot-list —domain FirstTest

* данной командой мы просмотрим список всех снапшотов для виртуальной машины FirstTest.

в) Для применения снапшота, сначала мы должны остановить виртуальную машину. Для этого можно либо выполнить выключение в операционной системе или ввести команду:

virsh shutdown FirstTest

После вводим:

virsh snapshot-revert —domain FirstTest —snapshotname FirstTest_snapshot_2020-03-21 —running

* где FirstTest — имя виртуальной машины; FirstTest_snapshot_2020-03-21 — имя созданного снапшота.

г) Удалить снапшот можно так:

virsh snapshot-delete —domain FirstTest —snapshotname FirstTest_snapshot_2020-03-21

7. Клонирование виртуальных машин

Для примера, склонируем виртуальную машину FirstTest и создадим новую SecondTest.

Для начала, мы должны остановить виртуалку:

virsh suspend FirstTest

После можно клонировать:

virt-clone —original FirstTest —name SecondTest —file /kvm/images/SecondTest-disk1.img

* итого, мы склонируем виртуальную машину FirstTest. Новая машина будет иметь название SecondTest, а путь до диска будет /kvm/images/SecondTest-disk1.img.

Восстанавливаем работу FirstTest:

virsh resume FirstTest

Networking

Example Manual Network Config With Bridge

This is an example file for Ubuntu users.
If you do this, make sure you have installed the package beforehand.

Here is a netplan version:

Configure VM To Use Manual Bridge

If you manually set the bridge up with the section above rather than through using the virsh net commands, this is how to configure deployed guests make use of it:

Find the following section

Change it to be like so:

Now run the following two commands since reboots wont work.

Add Network Interface to VM

I used the command below to add a NIC to my guest that uses my host’s bridge interface called kvmbr1.

If your guest is running at the time, you need to add the parameter.

You could specify a mac address with but without it, one will be generated randomly.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: