Howto Qemu-kvm Debian 8

Howto Qemu-kvm Debian 8 Хостинг

Время на прочтение

Хотим мы того или нет, но программы, для которых необходима Windows, никуда из офисов не исчезли. В ситуации, когда их использование безальтернативно, лучше иметь виртуальную ОС, например для того, чтобы подключиться к аудио-конференции через Skype for Business.

Howto Qemu-kvm Debian 8

В этой статье я расскажу, как можно с минимальными издержками установить гостевую ОС Windows на гипервизоре QEMU с помощью графического интерфейса virt-manager. Мы нанесем на карту все подводные камни и рифы, а жучков аккуратно посадим в банку.

KVM или Kernel Virtual Module — это модуль виртуализации для ядра Linux, который позволяет превратить ваш компьютер в гипервизор для управления виртуальными машинами. Этот модуль работает на уровне ядра и поддерживает такие технологии аппаратного ускорения, как Intel VT и AMD SVM.

Само по себе программное обеспечение KVM в пространстве пользователя ничего не виртуализирует. Вместо этого, оно использует файл /dev/kvm для настройки виртуальных адресных пространств для гостевой машины в ядре. Каждая гостевая машина будет иметь свою видеокарту, сетевую и звуковую карту, жесткий диск и другое оборудование.

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

Сегодня сложно представить мир без компьютеризированных устройств. Лет этак 20 назад почти все бытовые приборы были электро-механические, об использовании компьютерных схем повсеместно не было даже и речи. Самые первые компьютеры занимали значительные объемы пространства, и могли относительно не много. Компьютерно-вычислительные комплексы за последнее время прошли достаточно большой путь развития. Хотя, принципиально компьютеры ничем не изменились, но вычислительные мощности стремительно возросли. Наличие компьютера в простой семье теперь не является чем-то особенным.

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

KVM

Общие сведения о виртуализации

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

Собственно видов виртуализации существует несколько:

  • Программная виртуализация;
  • Аппаратная виртуализация;
  • Виртуализация уровня операционной системы.

Виртуализация в свою очередь бывает полной и частичной.

Программная виртуализация – вид виртуализации, который задействует различные библиотеки ОС, транслируя вызовы виртуальной машины в вызовы ОС. (DOSBox, Virtualbox, VirtualPC)

Аппаратная виртуализация – такой вид, который предусматривает специализированную инструкцию аппаратной части, а конкретно инструкций процессора. Позволяет исполнять запросы в обход гостевой ОС, и исполнять прямо на аппаратном обеспечении. (виртуализация KVM,виртуализация XEN, Parallels, VMware, Virtualbox)

Виртуализация уровня операционной системы – виртуализация только части платформы, без полной виртуализации аппаратной части. Подразумевает работы нескольких экземпляров среды ОС. (Docker, LXC)

Данная статья будет рассматривать Аппаратную виртуализацию, а конкретно виртуализацию KVM.

компоненты ВМ
Схема 1. – Взаимодействие компонентов виртуальной машины с аппаратной частью

https://youtube.com/watch?v=WOVDqSYmTfM%3Ffeature%3Doembed

import qemu-kvm-6.2.0-22.module+el8.7.0+18170+646069c1.2 • 21 days ago

import qemu-kvm-6.2.0-31.module+el8.8.0+18188+901de023 • a month ago

import qemu-kvm-7.2.0-10.el9 • a month ago

import qemu-kvm-7.0.0-13.el9_1.2 • 2 months ago

import qemu-kvm-6.2.0-28.module+el8.8.0+17721+63bacee8 • 3 months ago

import qemu-kvm-6.2.0-21.module+el8.7.0+17573+effbd7e8.2 • 3 months ago

import qemu-kvm-7.0.0-13.el9 • 5 months ago

import qemu-kvm-6.2.0-20.module+el8.7.0+16905+efca5d32.2 • 5 months ago

import qemu-kvm-6.2.0-20.module+el8.7.0+16689+53d59bc2.1 • 5 months ago

import qemu-kvm-6.2.0-11.module+el8.6.0+16538+01ea313d.6 • 6 months ago

import qemu-kvm-7.0.0-11.el9 • 7 months ago

import qemu-kvm-6.2.0-20.module+el8.7.0+16496+35f7e655 • 7 months ago

import qemu-kvm-6.2.0-20.module+el8.7.0+16634+93bdaf0e.1 • 7 months ago

import qemu-kvm-6.2.0-11.el9_0.5 • 7 months ago

import qemu-kvm-6.2.0-11.module+el8.6.0+16516+f8cbd5fe.5 • 7 months ago

import qemu-kvm-6.2.0-11.module+el8.6.0+15668+464a1f31.2 • 8 months ago

import qemu-kvm-6.2.0-11.el9_0.3 • 10 months ago

import qemu-kvm-1.5.3-175.el7_9.6 • 11 months ago

import qemu-kvm-6.2.0-11.el9_0.2 • 11 months ago

import qemu-kvm-6.2.0-11.module+el8.6.0+14707+5aa4b42d • a year ago

import qemu-kvm-6.2.0-12.module+el8.7.0+14906+e959ebd7 • a year ago

import qemu-kvm-4.2.0-60.module+el8.5.0+14545+9e40c7b1.2 • a year ago

import qemu-kvm-6.2.0-11.el9_0.2 • a year ago

import qemu-kvm-6.2.0-8.module+el8.6.0+14324+050a5215 • a year ago

import qemu-kvm-4.2.0-59.module+el8.5.0+14169+68d2f392.2 • a year ago

import qemu-kvm-6.2.0-9.el9 • a year ago

import qemu-kvm-6.2.0-5.module+el8.6.0+14025+ca131e0a • a year ago

import qemu-kvm-6.2.0-3.el9 • a year ago

import qemu-kvm-6.2.0-1.el9 • a year ago

import qemu-kvm-4.2.0-59.module+el8.5.0+13495+8166cdf8.1 • a year ago

import qemu-kvm-6.1.0-7.el9 • a year ago

import qemu-kvm-6.1.0-5.module+el8.6.0+13430+8fdd5f85 • a year ago

import qemu-kvm-1.5.3-175.el7_9.5 • a year ago

import qemu-kvm-4.2.0-59.module+el8.5.0+12817+cb650d43 • a year ago

import qemu-kvm-6.0.0-13.el9_b.5 • a year ago

import qemu-kvm-6.1.0-4.module+el8.6.0+13039+4b81a1dc • a year ago

import qemu-kvm-6.1.0-3.module+el8.6.0+12952+612d1b20 • 2 years ago

import qemu-kvm-4.2.0-58.module+el8.5.0+12272+74ace547 • 2 years ago

import qemu-kvm-4.2.0-48.module+el8.4.0+11909+3300d70f.3 • 2 years ago

import qemu-kvm-4.2.0-52.module+el8.5.0+11386+ef5875dd • 2 years ago

import qemu-kvm-1.5.3-175.el7_9.4 • 2 years ago

import qemu-kvm-4.2.0-51.module+el8.5.0+11141+9dff516f • 2 years ago

import qemu-kvm-4.2.0-48.module+el8.4.0+10368+630e803b • 2 years ago

import qemu-kvm-4.2.0-34.module+el8.3.0+10437+1ca0c2ba.5 • 2 years ago

import qemu-kvm-4.2.0-48.module+el8.4.0+10368+630e803b • 2 years ago

import qemu-kvm-4.2.0-44.module+el8.4.0+9776+c5744f20 • 2 years ago

import qemu-kvm-4.2.0-34.module+el8.3.0+9903+ca3e42fb.4 • 2 years ago

import qemu-kvm-4.2.0-34.module+el8.3.0+9828+7aab3355.3 • 2 years ago

import qemu-kvm-1.5.3-175.el7_9.3 • 2 years ago

import qemu-kvm-4.2.0-34.module+el8.3.0+8829+e7a0a3ea.1 • 2 years ago

import qemu-kvm-4.2.0-34.module+el8.3.0+7976+077be4ec • 2 years ago

import qemu-kvm-4.2.0-35.module+el8.4.0+8453+f5da6c50 • 2 years ago

import qemu-kvm-1.5.3-175.el7_9.1 • 2 years ago

import qemu-kvm-2.12.0-99.module+el8.2.0+7988+c1d02dbb.4 • 2 years ago

import qemu-kvm-1.5.3-175.el7 • 2 years ago

import qemu-kvm-4.2.0-34.module+el8.3.0+7976+077be4ec • 2 years ago

import qemu-kvm-4.2.0-33.module+el8.3.0+7705+f09d73e4 • 2 years ago

import qemu-kvm-4.2.0-29.module+el8.3.0+7212+401047e6 • 2 years ago

import qemu-kvm-4.2.0-29.module+el8.3.0+7212+401047e6 • 2 years ago

import qemu-kvm-2.12.0-99.module+el8.2.0+6870+55b789b4.2 • 2 years ago

import qemu-kvm-4.2.0-19.module+el8.3.0+6473+93e27135 • 2 years ago

import qemu-kvm-1.5.3-174.el7 • 2 years ago

import qemu-kvm-1.5.3-173.el7_8.3 • 2 years ago

import qemu-kvm-2.12.0-99.module+el8.2.0+5827+8c39933c • 2 years ago

import qemu-kvm-2.12.0-88.module+el8.1.0+5708+85d8e057.3 • 3 years ago

import qemu-kvm-1.5.3-173.el7_8.1 • 3 years ago

import qemu-kvm-1.5.3-173.el7 • 3 years ago

import qemu-kvm-1.5.3-167.el7_7.4 • 3 years ago

import qemu-kvm-2.12.0-88.module+el8.1.0+5149+3ff2765e.2 • 3 years ago

import qemu-kvm-2.12.0-94.module+el8.2.0+5297+222a20af • 3 years ago

import qemu-kvm-2.12.0-88.module+el8.1.0+5013+4f99814c.1 • 3 years ago

3 years ago

import qemu-kvm-2.12.0-88.module+el8.1.0+4233+bc44be3f • 3 years ago

import qemu-kvm-1.5.3-170.el7 • 3 years ago

import qemu-kvm-2.12.0-65.module+el8.0.0+4084+cceb9f44.5 • 3 years ago

import qemu-kvm-1.5.3-167.el7_7.1 • 3 years ago

import qemu-kvm-1.5.3-167.el7 • 3 years ago

import qemu-kvm-2.12.0-77.module+el8.1.0+3382+49219945 • 3 years ago

import qemu-kvm-1.5.3-160.el7_6.3 • 3 years ago

import qemu-kvm-2.12.0-64.module+el8.0.0.z+3418+a72cf898.2 • 3 years ago

import qemu-kvm-1.5.3-160.el7_6.2 • 3 years ago

import qemu-kvm-2.12.0-63.module+el8+2833+c7d6d092 • 3 years ago

import qemu-kvm-1.5.3-160.el7_6.1 • 4 years ago

import qemu-kvm-1.5.3-160.el7 • 4 years ago

import qemu-kvm-1.5.3-156.el7_5.5 • 4 years ago

import qemu-kvm-1.5.3-156.el7_5.3 • 4 years ago

import qemu-kvm-1.5.3-156.el7_5.2 • 4 years ago

import qemu-kvm-1.5.3-156.el7_5.1 • 4 years ago

import qemu-kvm-1.5.3-156.el7 • 5 years ago

import qemu-kvm-1.5.3-141.el7_4.5 • 5 years ago

import qemu-kvm-1.5.3-141.el7_4.6 • 5 years ago

import qemu-kvm-1.5.3-141.el7_4.4 • 5 years ago

import qemu-kvm-2.9.0-23.el7a • 5 years ago

import qemu-kvm-1.5.3-141.el7_4.2 • 5 years ago

import qemu-kvm-1.5.3-141.el7_4.1 • 5 years ago

import qemu-kvm-1.5.3-141.el7 • 5 years ago

import qemu-kvm-1.5.3-126.el7_3.10 • 5 years ago

import qemu-kvm-1.5.3-126.el7_3.9 • 5 years ago

import qemu-kvm-1.5.3-126.el7_3.6 • 6 years ago

import qemu-kvm-1.5.3-126.el7_3.5 • 6 years ago

import qemu-kvm-1.5.3-126.el7_3.1 • 6 years ago

import qemu-kvm-1.5.3-126.el7_3.3 • 6 years ago

import qemu-kvm-1.5.3-126.el7 • 6 years ago

import qemu-kvm-1.5.3-105.el7_2.7 • 6 years ago

import qemu-kvm-1.5.3-105.el7_2.4 • 6 years ago

import qemu-kvm-1.5.3-105.el7_2.3 • 7 years ago

import qemu-kvm-1.5.3-105.el7_2.1 • 7 years ago

import qemu-kvm-1.5.3-105.el7 • 7 years ago

import qemu-kvm-1.5.3-86.el7_1.8 • 7 years ago

import qemu-kvm-1.5.3-86.el7_1.6 • 7 years ago

import qemu-kvm-1.5.3-86.el7_1.5 • 7 years ago

import qemu-kvm-1.5.3-86.el7_1.2 • 7 years ago

import qemu-kvm-1.5.3-86.el7_1.1 • 8 years ago

import qemu-kvm-1.5.3-86.el7 • 8 years ago

import qemu-kvm-1.5.3-60.el7_0.11 • 8 years ago

import qemu-kvm-1.5.3-60.el7_0.10 • 8 years ago

import qemu-kvm-1.5.3-60.el7_0.7 • 8 years ago

Время на прочтение

В этом howto мы с вами просто и быстро, шаг за шагом, запустим гипервизор Qemu-KVM в debian 8.

image

aptitude install -y firmware-linux bridge-utils etckeeper


Проверим, поддерживает ли наш процессор виртуализацию:

egrep '(vmx|svm)' /proc/cpuinfo

Включим форвардинг, net.ipv4.ip_forward=1

vim /etc/sysctl.conf

Создаем мост br0
Примерный вид /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
#auto eth0
#allow-hotplug eth0
#iface eth0 inet dhcp
auto br0
iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0

/etc/init.d/networking restart

Проверим, должно быть похоже «br0 8000.08608ee7dc58 no eth0»

brctl show 

Используя мост, при старте виртуальной машины будут подниматься vnetX интерфейсы

tcpdump -i vnet0 -n
aptitude install qemu-kvm libvirt-bin

Добавляем пользователя в группы kvm:

adduser username kvm
adduser username libvirt

Разрешим доступ для spice и сменим пользователя, под которым все будет работать:

vim /etc/libvirt/qemu.conf

По большому счету всего готово к работе.
Без запущенных виртуальных машин хост-система занимает ~150 mb ram

Можно пропустить — вариант для продвинутых

GUI менеджер для выполнения базового ряда задач при работе с kvm.
Создание, запуск/остановка, клонирование — почти 🙂 все, что нужно.

На другом компьютере устанавливаем:

aptitude install ssh-askpass virt-manager virt-viewer spice-client-gtk

К созданной виртуальной машине можно подключится простым вивером со всем функционалом, что предоставляет spice.
Для этого необходимо узнать URI домена/вирт.машины на kvm

virsh domdisplay corn

На клиенте запустим:

remote-viewer spice://10.1.1.8:5905 

Тоже самое другим вивером, который spice-client-gtk:

spicy -h 10.1.1.8 -p 5905
 <graphics type='spice' port='5905' autoport='no' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics>

Как подружить TLS написано тут — habrahabr.ru/post/221693

Продолжаем конфигурировать под root

Определяем пулы — где все будет лежать
конфигурации storage хранятся тут /etc/libvirt/storage/
по умолчанию есть default.xml — хранилище на файловой системе в /var/lib/libvirt/images
Добавляем свое qemu-test-storage:
*-as создает хранилище аналогичное дефолту, т.е. по конфигурации такое же как в default.xml

virsh pool-define-as qemu-test-storage dir --target /home/username/qemu-test-storage/

По умолчанию пул не запущен, стартуем:

virsh pool-start qemu-test-storage

Добавляем созданный пул в автостарт:

virsh pool-autostart qemu-test-storage

Посмотреть все пулы:

virsh pool-list --all
virsh list --all

Регистрируем домен (виртуальную машину) с конфигурацией, описанной в файле corn.xml
Создать xml с конфигурацией (например, для шаблона) проще через virt-manager, чем описывать каждую опцию в virt-install.
Все конфигурации виртуальных машин хранятся в /etc/libvirt/qemu/
Вообщем, предполагается, что у нас есть этот файл.

virsh define /home/username/anyfolder/corn.xml

Добавить домен в автозагрузку:

virsh autostart corn

Текущая конфигурация домена:

virsh dumpxml corn
virsh edit corn

Стартуем домен, смотрим URI и подключаемся любым доступным способом.

virsh start corn
virsh domdisplay corn

Что бы установить windows на VirtIO раздел, установщику требуется драйвер из папки viostor комплекта драйверов virtio for windows.
На linux-kvm.org лежат исходники, на fedoraproject.org можно найти собраные virt-win.iso
После установки вам, скорее всего, понадобятся spice windows guest tools

Теперь расширим том домена.
Воспользуемся qemu-img — QEMU disk image utility. В нашем случае том corn.qcow2
Наблюдение — windows 7 мало 10GB, что бы разом выкачать все из центра обновлений и корректно их установить.
Бывает полезно сначало установить «Обновление для Windows 7 (KB2852386)» — позволяет худо-бедно (читай, никак) очищать C:\Windows\winxsx через стандартную «очистку диска» и между перезагрузками, а после использовать центр обновлений.

cd /home/username/qemu-qcow2-storage/
qemu-img info corn.qcow2
qemu-img check corn.qcow2

Минимально достаточно следующего:

qemu-img resize corn.qcow2 +10GB

Затем добавляем устройство CD-ROM, «вставляем туда gparted» и все как обычно. Русский язык — 24.
По хорошему надо использовать libguestfs-tools или resize2fs

Читайте также:  Повысьте производительность своих веб-сайтов с помощью выделенного хостинга Domain Host Clubs

Для Windows 8.1 нужен wddm драйвер, QXL будет очень медленно, лучше пробросить видекарту хоста
Про OEM-активация Windows очень хорошо написано тут — habrahabr.ru/post/247597

Many hypervisors are great platforms for running virtual machines in your environment, including commercial hypervisors and open-source options. However, let’s look at Kernel-based virtual machine (KVM). KVM on ubuntu 22.04 is a great option for running an open-source virtual machine manager platform and is easy to get up and running on. What does it take to get the KVM hypervisor running in Ubuntu 22.04? Let’s see.

Video overview

Take a look at the video overview of the process here:

What is Kernel-based virtual machine (KVM)?

The KVM hypervisor is freely available hypervisor found as part of modern Linux distributions since around 2006. KVM is a type 1 hypervisor that is part of the Linux kernel and is a loadable kernel module that provides virtualization capabilities in Linux systems, allowing you to run virtual machines.

A type 1 hypervisor

Type 1 means it is a bare metal hypervisor capable of really robust performance. It allows running virtual machines on top of your host hardware by using host hardware emulation.

Altaro VM Backup

Many available tools

There are also many tools available that allow you to manage virtual machines running on KVM effectively. KVM virtual machines operate and run like virtual machines on other hypervisor platforms.

Features of KVM

The KVM kernel-based virtual machine configuration has many of the features and capabilities you would find in commercially available enterprise hypervisors. Like many other hypervisors, it emulates a physical machine, including a system BIOS, CPU, memory, disk, and other components needed to run a full operating system in its own environment.

Benefits of KVM hypervisor

What are the benefits of the KVM hypervisor? There are many, but below are a few of the ones to note:

  • It is free
  • It is easy to install
  • There are GUI management tools available
  • It has proven scalability – capable of thousands of nodes in a cluster
  • Amazon AWS EC2 services are said to be built on a version of KVM

What are the requirements for running KVM on ubuntu 22.04?

The main requirement for running KVM on ubuntu 22.04 is to ensure you have a processor with CPU virtualization extensions built into the CPU.

Processors with this capability include the Intel VT and AMD-V technologies. This allows for KVM acceleration of the virtual machines to be able to perform as quickly as possible.

Checking for the CPU requirements

You can check to make sure you see the VMX capabilities listed (Intel) which indicates you have CPU hardware virtualization. Linux has a built-in CPU checker from the command line.

grep --color vmx /proc/cpuinfo
Verifying CPU virtualization capabilities on a prospective KVM host
Verifying CPU virtualization capabilities on a prospective KVM host

You want to ensure your host machine has a compatible CPU and plenty of memory and disk space for running KVM virtualization. Storage space needed and other resources will depend on the number of virtual machines ran on the host.

Network resources

You will likely want to have a few network interface cards in your KVM hypervisor host to provide options when configuring your bridge interface and bridge network.

If it is configured as a production host, you will most likely want to have a bonded network interface configuration for high availability and redundancy for better bandwidth.

You can also create virtual bridge configurations as well for VLANs and other use cases.

Healthy ecosystem of support and applications

Running KVM on an Ubuntu system provides benefits since Ubuntu is an extremely popular distribution, with great community support, and a healthy app repository.

Let’s look at a KVM installation on Ubuntu 22.04 and see what command line commands are needed to install KVM and the required components on your Ubuntu 22.04 system. First of all, you will need to have an Ubuntu 22.04 system built and ready to go for the install kvm on ubuntu 22.04 process.

Below, I am running a sudo apt update to ensure we have the latest Ubuntu packages installed.

Running updates in Ubuntu 22.04
Running updates in Ubuntu 22.04

If you would like to see how to quickly build up an Ubuntu 22.04 template in your VMware vSphere environment, take a look at my post on how to do that here:

Packer Build Ubuntu 22.04 for VMware vSphere

Installing packages overview

What KVM packages are required to install kvm on ubuntu 22.04?

  • You need to install qemu kvm
  • You need to install qemu kvm libvirt
  • virt install qemu kvm
  • You will want to install KVM virt-manager for a graphical interface using the apt install virt manager command from the apt package manager

KVM virtual machines packages install:

sudo apt install libvirt-clients libvirt-daemon-system libvirt-daemon virtinst bridge-utils qemu qemu-kvm
Installing the required KVM components
Installing the required KVM components

Checking for KVM virtual machines capabilities

There is a quick command we can run to check for the KVM virtualization capabilities in our Ubuntu 22.04 installation. Simple run the command:

kvm-ok

You should see the return listed below that KVM acceleration can be used.

KVM acceleration can be used
KVM acceleration can be used

Install Virt-Manager in Ubuntu 22.04 workstation

To easily manage your KVM installation in Ubuntu with a graphical interface and have the ability to easily create virtual machines, the Virt-Manager utility is a graphical interface allowing you to manage your KVM installation.

With Virt-Manager, you can create a new virtual machine, manage local install media, including an ISO file for OS installation on your new virtual machine.

Below, we are using the command:

sudo apt install virt-manager
Install Virt manager in Ubuntu
Install Virt manager in Ubuntu

Install ssh-askpass

Another required tool for using password authentication to your KVM host is the ask-ssh package. The ssh-askpass utility allows getting a prompt to input your SSH credentials from Virt-Manager.

sudo apt install ssh-askpass
Installing ssh askpass in Ubuntu
Installing ssh askpass in Ubuntu

Adding a new connection to your KVM installation in Virt-Manager

After installing Virt-manager, we can now add a connection to our KVM host.

Adding a connection in Virt Manager
Adding a connection in Virt Manager

Once the connection is added, you will see the KVM host listed. At this point, you can simply double-click the host to connect.

KVM host added to Virt manager
KVM host added to Virt manager

Upload an ISO image to use for guest operating system installation

Now, we can upload an ISO file to the KVM host to use for installing the guest operating system. The default location for uploading ISO image files to KVM is the /var/lib/libvirt/images location.

After you have uploaded the ISO file to the KVM host, we can begin the process to create a virtual machine using Virt-Manager.

Create a new virtual machine in KVM virt manager

Now, we can begin the process to create a new virtual machine. Click the File > New Virtual Machine option. First, we need to select the ISO image to use for the installation.

Select the ISO image
Select the ISO image
Browse to select the ISO image
Browse to select the ISO image

Select the ISO image displaying in the default images location.

Select the ISO image you have uploaded to the KVM host
Select the ISO image you have uploaded to the KVM host

I noticed that the operating system didn’t get populated with Windows Server 2022. If you begin typing in the operating system field, it will display a list that you can choose from. I chose the Windows Server 2022 installation operating system option.

ISO image is selected and ready to move forward
ISO image is selected and ready to move forward

Choose your CPU and memory configuration.

Configure CPU and memory
Configure CPU and memory

Configure the disk size for the installation.

Configure the disk size for the new virtual machine
Configure the disk size for the new virtual machine

On the review configuration screen, you can also choose the network interface you want to use such as the default bridge. It will default to a NAT’ed configuration out of the box.

Ready to begin and select the network configuration
Ready to begin and select the network configuration

I found I needed to change the default boot order as the CD-ROM will not be enabled or set to boot first.

Changing the boot order
Changing the boot order

After changing the boot order, the new virtual machine manager VM booted correctly.

Connecting to your guest operating system loading

Wrapping Up

All in all, the experience getting up and running with KVM in Ubuntu 22.04 is painless. After running a Ubuntu 22.04 machine, it is as simple as installing the KVM packages required for KVM to run. After that, you can use another Ubuntu workstation machine to install Virt-Manager and easily connect to the KVM host.

Время на прочтение

Приветствую вас, Хабражители!

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

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

Поправьте, если не так, но в поиске я не нашел реализации данной задачи именно на CentOS с подробным описанием всех шагов для новичков.
Хорошая серия статей написана librarian, но они для Debian.
Естественно, для бывалых админов, в этом никакой проблемы нет, но повторюсь, моя задача — описать подробную инструкцию для новичков.

Вопрос: в Интернете есть множество руководств для установки Qemu KVM под CentOS, возразите вы, и чем же данная статья будет интересна?
Ответ: здесь описывается полный цикл установки и настройки необходимых для виртуализации компонентов, установка гостевых виртуальных машин (ВМ), настройка белой и серой сети для ВМ, а также некоторые аспекты, которые помогут упростить управление ВМ, используя проброс графики с удаленного сервера на свой ПК и запуском virt-manager.

Помните 7 шагов?

Начнем с того, что если Вы читаете это, то у вас уже готова ОС CentOS 6 (я использовал версию 6.3), причем для установки гостевых ВМ разной битности (32 или 64), хост-сервер (физический сервер, на котором и будем устанавливать KVM вместе с ВМ) должен быть именно с 64-битной ОС.
Все действия выполняются из-под пользователя root.

Итак, приступим к руководству.

1. Шаг — Подготовка

Проверяем, поддерживает ли CPU аппаратную виртуализацию:

# egrep '(vmx|svm)' /proc/cpuinfo

Если вывод не пустой, значит — процессор поддерживает аппаратную виртуализацию.
Кому интересно, все действия выполнялись на конфигурации Intel Xeon Quad Core E3-1230 3.20 GHz / 8GB / 2x 1TB.

Устанавливаем KVM и библиотеки виртуализации:

# yum install kvm libvirt

Запускаем сервис KVM

# service libvirtd start

Смотрим, загружен ли модуль KVM

# lsmod | grep kvm

Должны получить вывод:

kvm_intel 52890 16
kvm 314739 1 kvm_intel

В данном случае видим, что загружен модуль kvm_intel, так как произволитель CPU — Intel.

Проверка подключения к KVM

# virsh sysinfo

Должны получить вывод:

<sysinfo type='smbios'> <bios> <entry name='vendor'>HP</entry> <entry name='version'>J01</entry> .....

2. Шаг — Создание хранилища для виртуальных машин (Storage Pool)

Здесь приводится описание, как настроить хранилище разных видов.
В рассматриваемом же примере описан простой тип хранилища — для каждой ВМ создается свой файл *.img под виртуальный жесткий диск (или диски — если добавить их несколько), размещены они будут в директории /guest_images.
Только у нас эта директория будет точкой монтирования отдельного жесткого диска хост-сервера, специально отведенного для этих нужд.
Безопасность сохранения данных и то, что нужно создавать как минимум зеркальный raid массив, чтобы не потерять данные ВМ в случае сбоя жесткого диска, мы не будем, так как это — отдельная тема.

Читайте также:  Быстрая и эффективная перезагрузка Asterisk с использованием SSH: руководство для начинающих

Просмотрим список физических дисков на хост-сервере:

# fdisk -l
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
......
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
......

На жестком диске sda установлена ОС, его не трогаем, а вот на sdb создаем раздел на все свободное место диска с файловой системой ext4:
(более подробно про следующие операции можно почитать здесь)

Выбираем диск для редактирования

# fdisk /dev/sdb

Создаем новый раздел

Command (m for help): n
Command action e extended p primary partition (1-4)
p
Partition number (1-4): 1
Command (m for help): w
The partition table has been altered!

Создаем файловую систему ext4 на всем свободном месте диска /dev/sdb

# mkfs.ext4 /dev/sdb1

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

# mkdir /guest_images
# chmod 700 /guest_images
# ls -la /guest_images
total 8
drwx------. 2 root root 4096 May 28 13:57 .
dr-xr-xr-x. 26 root root 4096 May 28 13:57 .. 

Многие советуют отключить вообще Selinux, однако мы выберем иной путь. Мы настроим его правильно.

# semanage fcontext -a -t virt_image_t /guest_images

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

# yum provides /usr/sbin/semanage
Loaded plugins: rhnplugin
policycoreutils-python-2.0.83-19.8.el6_0.x86_64 : SELinux policy core python utilities
Repo : rhel-x86_64-server-6
Matched from:
Filename : /usr/sbin/semanage
policycoreutils-python-2.0.83-19.1.el6.x86_64 : SELinux policy core python utilities
Repo : rhel-x86_64-server-6
Matched from:
Filename : /usr/sbin/semanage 
# yum -y install policycoreutils-python

После этого снова:

# semanage fcontext -a -t virt_image_t /guest_images

Смонтируем раздел /dev/sdb1 в /guest_images

# mount -t ext4 /dev/sdb1 /guest_images

Отредактируем файл /etc/fstab для того, чтобы при перезагрузке хост-сервера раздел с ВМ монтировался автоматически

# vi /etc/fstab

Добавляем строку по примеру тех, что уже имеются в файле

/dev/sdb1 /guest_images ext4 defaults 1 1

Сохраняем файл и продолжаем создание хранилища:

# virsh pool-define-as guest_images_dir dir - - - - "/guest_images"
Pool guest_images_dir defined

Проверяем, создалось ли оно:

# virsh pool-list --all
Name State Autostart
-----------------------------------------
default active yes
guest_images_dir inactive no
# virsh pool-build guest_images_dir
Pool guest_images_dir built 
# virsh pool-start guest_images_dir
Pool guest_images_dir started
# virsh pool-list --all
Name State Autostart
-----------------------------------------
default active yes
guest_images_dir active no 

Добавляем в автозагрузку:

# virsh pool-autostart guest_images_dir
Pool guest_images_dir marked as autostarted
# virsh pool-list --all
Name State Autostart
-----------------------------------------
default active yes
guest_images_dir active yes 
# virsh pool-info guest_images_dir 

3. Шаг — Настройка сети на хост-сервере

!!! ВАЖНО!!!
Перед выполнением этого шага, надо убедиться, что на хост-сервере установлен пакет bridge-utils,

# rpm -qa | grep bridge-utils

иначе при выполнении операций с сетью вы рискуете потерять связь с сервером, особенно обидно если он удаленный, и физического доступа к нему у вас нет. Если вывод предыдущей команды пустой, то:

# yum -y install bridge-utils
# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="static"
IPADDR="10.110.10.15"
GATEWAY="10.110.10.1"
DNS1="8.8.8.8"
DNS2="8.8.4.4"
MTU="1500"
NETMASK="255.255.255.0"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPV6INIT="no"
NAME="System br0"

Приводим основной сетевой интерфейс, который использовался для выхода в «мир», к виду:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
HOSTNAME="localhost.localdomain"
HWADDR="00:9C:02:97:86:70"
IPV6INIT="no"
MTU="1500"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
NAME="System eth0"
BRIDGE="br0"

!!! Важно!!!
DEVICE=«eth0» Имя интерфейса должно остаться таким, как было в системе. Если у вас для выхода в Интернет использовался интерфейс eth1, тогда редактировать надо его.
HWADDR=«00:2C:C2:85:29:A3» МАС-адрес также должен остаться таким, как был в системе

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

# service network restart

Проверяем состояние подключения типа «bridge»:

# brctl show

Получаем что-то вроде этого

bridge name bridge id STP enabled interfaces
br0 8000.002cc28529a3 no eth0

Делаем настройки в iptables, чтобы трафик виртуалок «ходил» через соединение типа bridge

# iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
# service iptables save
# service iptables restart

Опционально: можно улучшить быстродействие соединения bridge, поправив настройки в /etc/sysctl.conf

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
# sysctl -p /etc/sysctl.conf
# service libvirtd reload

4. Шаг — Установка новой виртуальной машины

Установка CentOS на гостевую ВМ:

virt-install -n VMName_2 --ram 1024 --arch=x86_64 \
--vcpus=1 --cpu host --check-cpu \
--extra-args="vnc sshd=1 sshpw=secret ip=static reboot=b selinux=0" \
--os-type linux --os-variant=rhel6 --boot cdrom,hd,menu=on \
--disk pool=guest_images_dir,size=50,bus=virtio \
--network=bridge:br0,model=virtio \
--graphics vnc,listen=0.0.0.0,keymap=ru,password=some.password.here \
--noautoconsole --watchdog default,action=reset --virt-type=kvm \
--autostart --location http://mirror.yandex.ru/centos/6.3/os/x86_64/

Примечание 1:
VMName_2 — имя новой виртуальной машины
–ram 1024 — кол-во виртуальной памяти
–arch=x86_64 — архитектура ОС виртуалки
–vcpus=1 — кол-во виртуальных процессоров
–os-type linux — тип ОС
–disk pool=guest_images_dir,size=50 — размещение хранилища, размер вирт. диска
–network=bridge:br0

Примечание 2:
Если на ВМ нужна «белая сеть», тогда ставим
—network=bridge:br0
Если на ВМ требуется «серая сеть», тогда ставим
—network=bridge:virbr0
В этом случае для ВМ будет присвоен серый IP по DHCP от хост-сервера.
—graphics vnc,listen=0.0.0.0,keymap=ru,password=some.password.here
Тут указываем пароль для подключения к ВМ по vnc

Установка Windows на гостевую ВМ:

virt-install --connect qemu:///system --arch=x86_64 \
-n VMName_1 -r 1024 --vcpus=1 \
--disk pool=guest_images_dir,size=50,bus=virtio,cache=none \
-c /iso/Windows2008R2RU.ISO --graphics vnc,listen=0.0.0.0,keymap=ru,password=some.password.here \
--noautoconsole --os-type windows --os-variant win2k8 \
--network=bridge:br0,model=e1000 --disk path=/iso/virtio-win.iso,device=cdrom,perms=ro

Примечание:
Параметры такие же, как и в примере с установкой CentOS. Но есть различия.
При установке ОС Windows не увидит виртуального жесткого диска, поэтому надо подгрузить дополнительный виртуальный cdrom с драйверами /iso/virtio-win.iso — расположение файла ISO с драйверами виртуального диска. Взять можно отсюда.

Выполняем команду на установку новой ВМ, затем подключаемся по vnc к хост-серверу для продолжения установки ОС. Для того, чтобы узнать порт для подключения, выполняем:

# netstat -nltp | grep q
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 64141/qemu-kvm
tcp 0 0 0.0.0.0:5903 0.0.0.0:* LISTEN 63620/qemu-kvm
tcp 0 0 0.0.0.0:5904 0.0.0.0:* LISTEN 6971/qemu-kvm
tcp 0 0 0.0.0.0:5905 0.0.0.0:* LISTEN 57780/qemu-kvm
# virsh vncdisplay VMName_1
:3

где VMName_1 — имя ВМ, :3 — номер по порядку порта, начиная с 5900, то есть подключаться надо на порт 5903, но в программе UltraVNC сработает и так 10.110.10.15:3
Howto Qemu-kvm Debian 8

Примечание
Если при создании ВМ вылетает ошибка Permission denied, kvm не может открыть файл диска ВМ *.img,
значит, надо разрешить выполнение действий qemu-kvm из-под root (предполагается, что управление
ВМ производится из-под специально созданного для этих целей пользователя, например, libvirt). Но мы обойдемся и пользователем root.

# vi /etc/libvirt/qemu.conf

Находим и раскомментируем в нем строки:

# The user ID for QEMU processes run by the system instance.
user = "root"
# The group ID for QEMU processes run by the system instance.
group = "root" 
# vi /etc/libvirt/qemu/VMName_1.xml

К примеру, можно указать статический порт vnc для конкретной ВМ, чтобы всегда подключаться к нужному порту

<graphics type='vnc' port='5914' autoport='no' listen='0.0.0.0' passwd='some.password.here'>
<listen type='address' address='0.0.0.0'/>
</graphics>

Теперь у этой ВМ порт vnc будет — 5914. Не забудьте перезагрузить libvirtd для применения изменений. Саму ВМ тоже следует перезагрузить. Поэтому изменяйте конфигурационный файл ВМ пока она выключена, далее выполняйте service libvirtd reload, затем стартуйте ВМ.

Команды для управления ВМ:

virsh -c qemu:///system help
Встроенная помощь по командам
virsh -c qemu:///system list --all
Посмотреть статус установленных ВМ
virsh -c qemu:///system start vsrv1
Запусить ВМ vsrv1
virsh -c qemu:///system shutdown vsrv1
Послать команду завершения работы ВМ
virsh -c qemu:///system destroy vsrv1
Принудительно завершить работу ВМ
virsh -c qemu:///system undefine vsrv1
Удалить ВМ 

Если на 4 шаге вы выбрали серую сеть для новой ВМ (—network=bridge:virbr0), то надо выполнить следующие действия (на хост-сервере!) для проброса трафика на ВМ
Разрешить форвардинг трафика на уровне ядра ОС:

# sysctl net.ipv4.ip_forward=1
# iptables -I FORWARD -j ACCEPT
# iptables -t nat -I PREROUTING -p tcp -d 10.110.10.15 --dport 5910 -j DNAT --to-destination 192.168.122.170:5901
# iptables -t nat -I POSTROUTING -p tcp -s 192.168.122.170 --sport 5901 -j SNAT --to-source 10.110.10.15:5910

На примере установки ОС CentOS на гостевой машине, когда установка перешла в графический режим, и предлагает подключиться на локальный порт 5901 гостевой ОС.
Подключаемся из ПК, за которым сидите, по vnc к 10.110.10.15:5910 или 10.110.10.15:10 тоже сработает в UltraVNC.

По такому же принципу можно прокинуть порт (стандартный) RDP 3389 или SSH 22 в гостевую ОС.

6. Шаг — Подготовка к управлению виртуальными машинами удаленного сервера с удобным графическим интерфейсом (используя virt-manager)

1. Всем знакомый PuTTY,
2. Порт сервера X для Windows — Xming
3. В настройках PuTTY включить «Enable X11 Forwarding»
Сделать, как показано на картинке:
Howto Qemu-kvm Debian 8

В момент подключения к удаленному серверу Xming должен быть уже запущен.
На хост-сервере с CentOS для SSH включить X11 Forwarding, для этого отредактируйте файл sshd_config:

# vi /etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
# /etc/init.d/sshd restart

Устанавливаем virt-manager на хост-сервере:

# yum install virt-manager

Еще один компонент

# yum -y install xorg-x11-xauth

Чтобы окна отображались без крякозябр

# yum install liberation-sans-fonts

7. Шаг — Непосредственный запуск virt-manager

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

# virt-manager

Откроется окно virt-manager
Howto Qemu-kvm Debian 8

Консоль управления ВМ
Howto Qemu-kvm Debian 8

Конфигурация ВМ и ее изменение
Howto Qemu-kvm Debian 8

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

Буду рад замечаниям, предложениям по данной теме.

Реализация

Гипервизор KVM представляет из себя загружаемый модуль ядра Linux, который предназначен для обеспечения виртуализации на платформе Linux x86. Сам модуль содержит компонент собственно виртуализации(kvm.ko), и процессорно-специфический загружаемый модуль kvm-amd.ko либо kvm-intel.ko.

Необходимым условием для использования KVM является поддержка инструкций виртуализации — Intel VT либо AMD , и ядро Linux версии 2.6.20 и выше. Существует также порт KVM под Free-BSD. Для вызова KVM традиционно используется QEMU, но также ведутся попытки добавить поддержку KVM в Virtualbox.

Сам по себе KVM не выполняет эмуляции. Вместо этого программа, работающая в пространстве пользователя, использует интерфейс /dev/kvm для настройки адресного пространства гостя виртуальной машины, через него же эмулирует устройства ввода-вывода и видеоадаптер.

KVM позволяет виртуальным машинам использовать немодифицированные образы дисков QEMU, VMware и других, содержащие операционные системы. Каждая виртуальная машина имеет своё собственное виртуальное аппаратное обеспечение: сетевые карты, диск, видеокарту и другие устройства.

В завершение

Трудно рассказать в одной статье обо всех аспектах Windows + QEMU/KVM, поэтому завершим в следующей. А там будет самый смак, командный интерфейс, разрешение экрана максимум 1024×768, Сцилла pulseaudio и Харибда сети, команда virsh и настройка ВМ из конфиг файла, фейл с tpm, двоичный синтаксис устройств и прочие тихие радости.


  1. TUN/TAP interfaces
  2. Ethernet bridging
  3. От английского root

Подготовка

Подготовьте дисковое пространство. Я выделил 70 GiB, и Windows 8.1 за пару месяцев использовала почти 50 GiB так, что для обновления до 10-й версии места на диске не хватило.

Далее, нам понадобится набор редхатовских драйверов virtio-win. Если у вас установлен RedHat, достаточно запустить

[root@server ~]# yum install virtio-win

Howto Qemu-kvm Debian 8

В качестве проверки можно прочитать файл устройства.

(2:506)$ ll /dev/kvm
crw-rw----+ 1 root kvm 10, 232 ноя 9 02:29 /dev/kvm

Если файл не обнаружен, а опции ядра выставлены верно, значит дело в настройках BIOS/UEFI.
Устанавливаем нужные пакеты.

(5:519)$ sudo emerge -av qemu virt-manager

Для RedHat 7 достаточно установить только virt-manager, так как QEMU устанавливается по умолчанию.

[root@server ~]# yum install virt-manager

Дебианщикам надо установить пакет qemu.

root# aptitute install qemu

Можно теперь переходить к установке.

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

Перед тем как переходить к самой установке KVM нужно проверить поддерживает ли ваш процессор аппаратное ускорение виртуализации от Intel-VT или AMD-V. Для этого выполните такую команду:

Читайте также:  Увеличьте количество поисковых запросов в Интернете с помощью Nslookup: попробуйте прямо сейчас!

Howto Qemu-kvm Debian 8

Если в результате будет возвращено 0 — значит ваш процессор не поддерживает аппаратной виртуализации, если 1 или больше — то вы можете использовать KVM на своей машине.

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

Мы установили не только утилиту kvm, но и библиотеку libvirt, а также менеджер виртуальных машин. После того, как установка будет завершена вам необходимо добавить своего пользователя в группу libvirt, потому что только root и пользователи этой группы могут использовать виртуальные машины KVM:

Затем убедитесь, что сервис libvirt запущен и работает:

sudo systemctl status libvirtd

Howto Qemu-kvm Debian 8

После выполнения этой команды выйдите из системы и войдите снова. Далее, давайте проверим все ли правильно было установлено. Для этого используйте команду kvm-ok:

Howto Qemu-kvm Debian 8

Если все было сделано правильно, то вы увидите такое же сообщение.

Вы справились с задачей установить KVM в Ubuntu, но вы еще не можете  использовать эту среду виртуализации но ее нужно еще настроить. Далее, мы рассмотрим как выполняется настройка KVM в Ubuntu. Что удобно, в новых версиях сеть уже настроена и вам не нужно создавать новый сетевой мост. Вы можете убедится в этом выполнив команду:

Howto Qemu-kvm Debian 8

Интерфейсы virbr0 и virbr-nic созданы KVM по умолчанию и они полностью реализуют все необходимые возможности сети. Ещё вы можете посмотреть доступные мосты с помощью команды:

sudo brctl show

Howto Qemu-kvm Debian 8

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

virsh -c qemu:///system list

Howto Qemu-kvm Debian 8

Он пуст. Создать виртуальную машину можно через терминал или в графическом интерфейсе. Для создания через терминал используйте команду virt-install. Сначала перейдем в папку libvirt:

Для установки CentOS команда будет выглядеть вот так:

sudo virt-install \
--virt-type=kvm \
--name centos8 \
--ram 2048 \
--vcpus=2 \
--os-variant=rhl8.0 \
--hvm \
--cdrom=/var/lib/libvirt/boot/CentOS-8.iso \
--network=bridge:virbr0,model=virtio \
--graphics vnc \
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2

Разберем подробнее что означают параметры этой команды:

  • virt-type — тип виртуализации, в нашем случае kvm;
  • name — имя новой машины;
  • ram — количество памяти в мегабайтах;
  • vcpus — количество ядер процессора;
  • os-variant — тип операционной системы;
  • cdrom — установочный образ системы;
  • network-bridge — сетевой мост, который мы настроили ранее;
  • graphics — способ получения доступа к графическому интерфейсу;
  • diskpath — адрес нового жесткого диска для этой виртуальной машины;

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

sudo virsh vncdisplay centos8

Теперь вы можете ввести полученные данные в вашем клиенте VNC и подключится к виртуальной машине даже удаленно. Для Debian команда будет немного отличаться, но все выглядит похожим образом:

Переходим в папку для образов:

sudo wget https://mirrors.kernel.org/debian-cd/current/amd64/iso-dvd/debian-8.5.0-amd64-DVD-1.iso

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

sudo virt-install \
--virt-type=kvm \
--name=debina8 \
--ram=2048 \
--vcpus=2 \
--os-variant=debian8 \
--hvm \
--cdrom=/var/lib/libvirt/boot/debian-8.5.0-amd64-DVD-1.iso \
--network=bridge=bridge0,model=virtio \
--graphics vnc \
--disk path=/var/lib/libvirt/images/debian8.qcow2,size=40,bus=virtio,format=qcow2

Теперь снова посмотрим список доступных машин:

virsh -c qemu:///system list

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

sudo virsh start имя_машины

sudo virsh shutdown имя_машины

Для перевода в режим сна:

sudo virsh suspend имя_машины

sudo virsh reboot имя_машины

sudo virsh reset имя_машины

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

sudo virsh destroy имя_машины

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

Если у вас есть доступ к графическому интерфейсу то нет никакой необходимости использовать терминал, вы можете применить полноценный графический интерфейс менеджера виртуальных машин Virtual Manager. Программу можно запустить из главного меню:

Howto Qemu-kvm Debian 8

Для создания новой машины кликните по иконке со значком монитора. Дальше вам будет необходимо выбрать образ ISO вашей системы. Также можно использовать реальный CD/DVD привод:

Howto Qemu-kvm Debian 8

Если вы выбрали ISO образ, то надо его открыть из файловой системы:

Howto Qemu-kvm Debian 8

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

Howto Qemu-kvm Debian 8

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

Howto Qemu-kvm Debian 8

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

Howto Qemu-kvm Debian 8

Затем автоматически запустится установка:

Howto Qemu-kvm Debian 8

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

Использование

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

Для наглядности рассматривается виртуализация KVM на базе библиотеку virt-manager.

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

libvirt
Схема 2. – Взаимодействие компонентов libvirt

QEMU позволяет создать фрейм для вызова гипервизора на клиентской системе. Данная программа настраивается аргументами вызова командной строки, является достаточно легкой и простой.

Существуют кроме того несколько графических оболочек, таких как Gnome-Boxes.

Драйвера и доводка

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

Ethernet Controller
PCI Simple Communication Controller
SCSI Controller

Нужно скормить им драйвера из набора virtio-win, что подключены через IDE CD-ROM в предыдущем разделе.

Howto Qemu-kvm Debian 8

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

Howto Qemu-kvm Debian 8

Вот весь список, а это соседняя страница RedHat доков, где установка драйверов показана подробнее.

  • Balloon, the balloon driver, affects the PCI standard RAM Controller in the System devices group.
  • vioserial, the serial driver, affects the PCI Simple Communication Controller in the System devices group.
  • NetKVM, the network driver, affects the Network adapters group. This driver is only available if a virtio NIC is configured. Configurable parameters for this driver are documented in Appendix E, NetKVM Driver Parameters.
  • viostor, the block driver, affects the Disk drives group. This driver is only available if a virtio disk is configured.

Оборудование

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

Howto Qemu-kvm Debian 8

У меня выбран дисплей Сервер Spice и звуковое устройство ich6. Нет, конечно, если у вас уйма времени и желание во всем разобраться до самых тонкостей — дерзайте и пробуйте альтернативные подходы, но у меня звук взлетел, вернее завибрировал, только с такими настройками. Во второй части, посвященной прогулке по граблям и отлову багов, я расскажу об этом подробнее. В закладке видео я выставил QXL, ибо с этой опцией, благодаря волшебному драйверу, мне удалось добиться нормального разрешения экрана.

Подключаться к ВМ можно разнообразно.

  1. Через графический интерфейс virt-manager
  2. Выбрать дисплей VNC-сервер и подключаться через vnc-клиента
  3. Установить Spice-клиента и подключаться через него
  4. К Windows можно подключиться через rdp, если включен терминальный сервер

У меня вариант 3, для Gentoo это программа spice-gtk

$ eix spice-gtk
[I] net-misc/spice-gtk Доступные версии: 0.31 ~0.32-r1 ~0.32-r2 **9999 {dbus gstaudio gstreamer gstvideo gtk3 +introspection libressl lz4 mjpeg policykit pulseaudio python sasl smartcard static-libs usbredir vala webdav PYTHON_SINGLE_TARGET="python2_7 python3_4" PYTHON_TARGETS="python2_7 python3_4"} Установленные версии: 0.31(16:05:41 18.06.2016)(gtk3 introspection pulseaudio python usbredir -dbus -gstreamer -libressl -lz4 -policykit -sasl -smartcard -static-libs -vala -webdav PYTHON_SINGLE_TARGET="python2_7 -python3_4" PYTHON_TARGETS="python2_7 python3_4") Домашняя страница: http://spice-space.org https://cgit.freedesktop.org/spice/spice-gtk/ Описание: Set of GObject and Gtk objects for connecting to Spice servers and a client GUI

Сеть

Howto Qemu-kvm Debian 8

Такой простой выбор сетевых опций дает результат превосходящий ожидания. Создаются 3 дополнительных сетевых интерфейса: virbr0, virbr0-nic, vnet0.

$ ip addr
...
4: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:cc:2a:1e brd ff:ff:ff:ff:ff:ff inet 192.168.102.1/24 brd 192.168.102.255 scope global virbr0 valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000 link/ether 52:54:00:cc:2a:1e brd ff:ff:ff:ff:ff:ff
11: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN group default qlen 1000 link/ether fe:54:00:fb:50:45 brd ff:ff:ff:ff:ff:ff inet6 fe80::fc54:ff:fefb:5045/64 scope link valid_lft forever preferred_lft forever

В iptables создается свод правил, вот основные:

$ sudo iptables -L
...
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere 192.168.102.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.102.0/24 anywhere 

C:\Users\user>ipconfig
Windows IP Configuration
Ethernet adapter Ethernet 2: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::90c3:a458:6645:7b9a%7 IPv4 Address. . . . . . . . . . . : 192.168.102.203 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.102.1
Tunnel adapter isatap.{BD8F0DA4-92A8-42BD-A557-23AC89AED941}: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . :
Tunnel adapter IPHTTPSInterface: Connection-specific DNS Suffix . : IPv6 Address. . . . . . . . . . . : 2620:0:a13:8a7:51af:79ae:92b8:828a Temporary IPv6 Address. . . . . . : 2620:0:a13:8a7:b49d:81fe:e509:16e7 Link-local IPv6 Address . . . . . : fe80::51af:79ae:92b8:828a%15 Default Gateway . . . . . . . . . :

Повторяю, все это libvirtd создает сам, ничего для этого делать не надо. В результате имеем нормальный роутинг между хостом и ВМ, можно обмениваться файлами по ssh / scp. Можно пойти дальше и создать шару на Windows, а на Linux хосте настроить samba, но мне это показалось избыточным.

Запуск и инсталляция

Запускаем virt-manager и создаем новую виртуальную машину из локального хранилища.

Howto Qemu-kvm Debian 8

Указываем путь к установочному iso образу Windows.

Howto Qemu-kvm Debian 8

Далее, на 3-м и 4-м шаге будет выбор количества CPU, объем RAM и размер дискового пространства, после чего на 5-м шаге следует выбрать дополнительные конфигурации перед настройкой.

Howto Qemu-kvm Debian 8

Окно дополнительных настроек нужно для того, чтобы выполнить финт ушами. Его смысл в том, чтобы добавить виртуальный флопарь с драйверами из набора virtio-win. Это даст возможность изменить тип жесткого диска: удалить диск с шиной IDE и добавить его же, но с шиной VirtIO. Подробно, в доках RedHat.

Howto Qemu-kvm Debian 8

Howto Qemu-kvm Debian 8

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

В принципе, уже можно начинать инсталляцию, но мы забыли добавить CD-ROM с драйверами virtio-win, а они нам пригодятся, когда диспетчер устройств засверкает желтыми иконками вопросительного знака.

Howto Qemu-kvm Debian 8

Ну вот теперь можно начать установку.

Howto Qemu-kvm Debian 8

Ну хорошо, начали мы установку. А что, если установщик Windows попросит сменить диск? Мне из-за этого пришлось пару раз прервать и начать всю карусель заново, но с вами такого уже не случится.

(qemu) change ide1-cd0 /tmp/windows_8.1_x64_disk2.iso

Особенности виртуализации для ядра Linux

Для исполнения прямых аппаратных запросов в ОС должна иметься библиотека, которая направляла бы эти запросы аппаратной части напрямую. На платформах базы Linux долгое время никакой встроенной системы виртуализации (встроенного гипервизора), просто не существовало. Каждый производитель ПО для виртуализации, который поддерживало технологию аппаратной виртуализации, вынуждены были создавать собственные модули для ядра Linux (vboxdrv в Virtualbox, vmware-service в VMWare и пр.) Естественно, это не могло продолжаться вечно, и компания Qumranet, Inc, выкупленая затем Radhat создала ассоциацию Open Virtualization Alliance, которая была признана решить проблему отсутствия базового гипервизора для ядра Linux. Так и был создан гипервизор KVM или Kernel-based Virtual Machine.

Выводы

Виртуализация – неотъемлемая часть современных корпоративных систем, она позволяет сэкономить колоссальные денежные и энергетические ресурсы. Развитие технологий виртуализации является приоритетным направлением многих организаций. Развиваются такие технологии как как VGAPassthrough (технология «проброса» видеокарты хост-устройства в виртуальную машину) и PCIPassthrough («проброс» PCI устройства).

https://youtube.com/watch?v=Y0YaA4BkLhQ%3Ffeature%3Doembed

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Выводы

В этой статье мы рассмотрели как выполняется установка KVM Ubuntu 20.04, разобрали как полностью подготовить эту среду к работе, а также как создать виртуальные машины и использовать их. Если у вас остались вопросы, спрашивайте в комментариях!

На завершение лекция от яндекса о том что такое виртуализация в Linux:

https://youtube.com/watch?v=Y0YaA4BkLhQ%3Ffeature%3Doembed

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Оцените статью
Хостинги