Kvm

Материал из СисадминВики (SysadminWiki.ru)
Перейти к: навигация, поиск

Установка

На Ubuntu 20.04 устанавливаем ряд пакетов:

sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst virt-manager

где:

  • qemu -- базовое ПО для эмуляции аппаратного обеспечения
  • qemu-kvm -- модуль qemu для гипервизора KVM
  • libvirt-clients -- ПО для управления виртуализацией
  • libvirt-daemon-system -- файлы конфигурации для демона libvirtd
  • bridge-utils -- инструменты командной строки для настройки Ethernet мостов
  • virtinst -- инструменты командной строки для создания виртуальных машин
  • virt-manager -- графический интерфейс для управления виртуальными машинами


Управление из графического интерфейса (GUI)

Графический интерфейс предоставляет virt-manager, причём он может управлять как локальными ВМ, если установлен на гипервизор, так и удалёнными, если установлен на ПК администратора. Для удалённого подключения нужно в меню выбрать: Файл -- Добавить соединение... -- и указать к какому серверу (гипервизору) и каким пользователем нужно подключаться. Для быстрого подключения можно настроить SSH доступ без пароля.

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

sudo apt install virt-manager

Управление из консоли

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

virsh list --all список всех виртуальных машин
virsh dominfo vm1 информация о машине vm1
virsh start vm1 включить
virsh shutdown vm1 послать сигнал завершения
virsh destroy vm1 принудительно завершить работу
virsh save vm1 file_name сохранить состояние в файл
virsh restore file_name восстановить состояние из файла (откатить изменения)


  • Список всех виртуальных машин и их дисков, то есть где располагаются реальные файлы виртуалок:
for i in $(virsh list --all | awk '{print $2}'); do echo -e "$i\n$(virsh dumpxml $i | grep file=)"; done

Если нужен список только работающих на данный момент виртуалок, то убираем параметр --all:

for i in $(virsh list | awk '{print $2}'); do echo -e "$i\n$(virsh dumpxml $i | grep file=)"; done

Проброс жёского диска (хранилища, носителя)

В графической среде

  • Открываем виртуальную машину: в Менеджере виртуальных машин щёлкаем правой клавишей на названию ВМ и в контекстном меню выбираем "Открыть".
  • Переходим к виртуальному оборудованию: синяя кнопка с восклицательным знаком на панели инструментов.
  • Добавляем оборудование: через правый щелчёк в списке оборудования
  • Выбираем тип: Хранилище -- Выбрать или создать... -- Настроить
  • Добавляем пул: слева внизу зелёный плюс
  • Тип: disk
  • Путь к источнику: /dev/md127 (указать нужное устройство или выбрать через Обзор)


В командной строке

Проброс реального жёсткого диска, массива (RAID) или любого носителя информации вообще из гипервизора в виртуальную машину (гостевую ОС) делается следующей командой:

virsh attach-disk vm_name /dev/disk vdX

где

  • vm_name -- имя гостевой ОС в гипервизоре; весь список видно по команде: virsh list --all
  • /dev/disk -- имя устройства (hdc, sdb, md0 и т.п.) в ОС гипервизора; весь список: ls /dev
  • vdX -- имя устройства в гостевой ОС; текущий список: ls /dev | grep vd

Например, чтобы пробросить из гипервизора массив[1] md127 и присвоить ему в виртальной машине ubuntu20-cloud имя vdb, выполняем:

virsh attach-disk ubuntu20-cloud /dev/md127 vdb

Проброс можно делать на лету, не выключая гостевую ОС. Проверить можно командой fdisk в гостевой ОС:

sudo fdisk -l | grep vd

Далее в гостевой ОС нужно смонтировать диск с помощью mount или добавить в fstab для автоматического подключения при старте системы. Если диск был с данными, то они будут сразу доступны, если же он ещё не отформатирован, то его можно разбивать и форматировать в гостевой ОС как обычный диск.

Создание дополнительного диска

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

  • Создаём диск, нажимая на зелёный плюс в "Списке томов"
  • Указываем название диска, его формат и размер и жмём Готово. Большие диски (больше терабайта) могут создаваться довольно долго (десятки секунд, а то и несколько минут).

На виртуальной машине проверяем, что диск появился:

lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT | grep vd

vda 40G disk ├─vda1 512M vfat part /boot/efi ├─vda2 1K part └─vda5 39,5G ext4 part /

vdb 3T disk

Так как мы создали новый диск (vdb), то его нужно отформатировать. Команда для файловой системы ext4:

sudo mkfs.ext4 /dev/vdb

Узнаём его UUID:

sudo blkid | grep vd

/dev/vda5: UUID="77d3f8bf-d366-4c36-b992-445c8451536b" TYPE="ext4" PARTUUID="09b1ab8e-05" /dev/vda1: UUID="DA46-6D03" TYPE="vfat" PARTUUID="09b1ab8e-01"

/dev/vdb: UUID="7885f1cf-5ed1-4405-bbf1-1708c14b986e" TYPE="ext4"

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

sudo mkdir /mnt/NextCloudData sudo chmod 777 /mnt/NextCloudData

В автозагрузку (fstab) подключение диска при запуске ОС с помощью mcedit или любого другого редактора, но с правами администратора:

sudo mcedit /etc/fstab

добавляем следующую строку (заменив UUID и каталог подключения на свои):

UUID=7885f1cf-5ed1-4405-bbf1-1708c14b986e /mnt/NextCloudData ext4 rw,users 0 0

Проверяем список текущих подключений:

mount | grep vd

/dev/vda5 on / type ext4 (rw,relatime,errors=remount-ro)

/dev/vda1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

Подключаем заново устройства из fstab:

sudo mount -a

и смотрим список ещё раз:

mount | grep vd

/dev/vda5 on / type ext4 (rw,relatime,errors=remount-ro) /dev/vda1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

/dev/vdb on /mnt/NextCloudData type ext4 (rw,nosuid,nodev,noexec,relatime)

или

df -h | grep vd

/dev/vda5 39G 9,6G 28G 27% / /dev/vda1 511M 4,0K 511M 1% /boot/efi

/dev/vdb 2,9T 89M 2,8T 1% /mnt/NextCloudData

Сноски



См. также