Виртуальная машина на базе Qemu KVM (часть вторая)

KVM (Kernel-based Virtual Machine) — программное решение, обеспечивающее виртуализацию в среде Linux на платформе x86, которая поддерживает аппаратную виртуализацию на базе Intel VT (Virtualization Technology) либо AMD SVM (Secure Virtual Machine).

Давайте создадим и настроим виртуальную машину при помощи терминала, т.е. без графической оболочки на хосте. Конечно графическая оболочка нам понадобится для того чтобы установить например windows, но это будет на машине, с которой мы будем удалённо подключаться к нашему хосту виртуальных машин. Делать это мы будем с помощью VNC.

Предположим наша сеть лежит в диапазоне адресов 192.168.3.0 - 192.168.3.255.
И наши адреса будут такими:

* 192.168.3.1 Общий шлюз
* 192.168.3.103 Сервер носитель (хост)
* 192.168.3.204 Виртуальная машина

Этапы работы:

* Установка пакетов qemu kvm

* Копирование образа дистрибутива на сервер носитель, ставить будем Windows 7.

* Настройка сетевого моста сервера носителя

* Установка виртуальной операционной системы через терминал


И снова учитываем момент на стадии установки сервера носителя! Развёрнутый образ виртуальной машины, по умолчанию, разместится в директорию /var/lib/libvirt/images/. Поэтому, я например, при установке сервера хоста, точку монтирования /var разместил на отдельном большом разделе.


Обновим нашу ubuntu:
sudo apt update && sudo apt dist-upgrade -y && sudo apt-get autoremove -y && sudo apt-get autoclean

Проверка аппаратной поддержки:
ставим чекер проца
sudo apt-get install cpu-checker
kvm-ok

Если команда говорит что "KVM acceleration can be used" то можем продолжать.

Установка qemu-kvm:
sudo apt-get install qemu-kvm libvirt-bin virt-manager virt-viewer -y

По умолчанию менеджер виртуальных машин на этапе установки, ищет образ установочника в каталоге /var/lib/libvirt/images/, (кстати, туда же и расположится развёрнутая виртуальная машина в формате *.img)

Далее этап копирования образа дистрибутива на хост. Как говорилось ранее скопировать образ нужно в "/var/lib/libvirt/images/". Что для этого нужно:


Вариант Windows:
Установим программу winscp https://winscp.net/eng/docs/lang:ru
Соединение с хостом будет проходить по тому же порту, который настроен в SSH, по умолчанию 22.
Далее в привычном двухпанельном режиме копируем образ в доступную пользователю, с помощью которого мы авторизовались при создании соединения, директорию. Ну а далее соединяемся с помощью PUTTY с нашим хостом по SSH, чтобы через терминал уже переместить образ в нужную нам "/var/lib/libvirt/images/". В моём случае команда выглядит так:
sudo mv /home/mradmin/win7.iso /var/lib/libvirt/images/

Вариант Ubuntu:
Нам на помощь придёт утилита для передачи файлов через ssh, называемая просто "scp".
Скопировать сразу в "/var/lib/libvirt/images/" у нас прав нет, поэтому сначала скопируем в свой домашний каталог, также как и в случае с winscp.
В моём случае команды выглядят так:
sudo scp /home/user/win7.iso mradmin@192.168.3.103:/home/mradmin/
Далее подтверждаете сертификат (yes), затем пароль текущего юзера, и далее пароль юзера на хосте, т.е. юзера через которого цепляемся к хосту (в моём случае mradmin)

Соединяемся просто по SSH с хостом:
sudo ssh mradmin@192.168.3.103
И переносим образ в нужную нам "/var/lib/libvirt/images/":
sudo mv /home/mradmin/win7.iso /var/lib/libvirt/images/

Теперь нужно сказать носителю, что его сетевой интерфейс "eth0" теперь станет мостом для нашего виртуального гостя. Для этого файл сетевых настроек (sudo nano /etc/network/interfaces) "сервера хоста" приводим к такому вот виду:


#auto eth0
#iface eth0 inet static

auto br0
iface br0 inet static
address 192.168.3.103
gateway 192.168.3.1
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.3.255
dns-nameservers 208.67.220.220
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0

##########
Перезагружаем наш сервер!

Ну а теперь самое ИНТЕРЕСНОЕ:

Создавать виртуальную машину мы будем с помощью команды virt-install, эта команда поможет нам создать новый KVM, Xen или линуксовый контейнер, использующий гипервизор "libvirt"

Рассмотрим опции команды:

--name= - имя виртуальной машины

--ram= - оперативная память в МЕГАБАЙТАХ.

--cpu host - этот параметр присвоит виртуальному CPU такую же модель как у CPU хоста, что приведёт к большей производительности с одной стороны, но тогда при миграции виртуальной машины на другой, могут быть проблемы идентификации. Можно не указывать.

--cdrom=CDROM - если нужно подключить реальный привод к виртуальной машине. В нашем случае: (--cdrom=/var/lib/libvirt/images/win7.iso)

--os-variant=win7 - указываем оптимизацию под конкретную версию оси.

другие варианты:

win7 : Microsoft Windows 7
vista : Microsoft Windows Vista
winxp64 : Microsoft Windows XP (x86_64)
winxp : Microsoft Windows XP
win2k8 : Microsoft Windows Server 2008
win2k3 : Microsoft Windows Server 2003
freebsd8 : FreeBSD 8.x
generic : Generic
debianwheezy : Debian Wheezy
debiansqueeze : Debian Squeeze
debianlenny : Debian Lenny
fedora18 : Fedora 18
fedora17 : Fedora 17
fedora16 : Fedora 16
fedora15 : Fedora 15
mageia1 : Mageia 1 and later
mes5.1 : Mandriva Enterprise Server 5.1 and later
rhel6 : Red Hat Enterprise Linux 6
rhel5.4 : Red Hat Enterprise Linux 5.4 or later
rhel4 : Red Hat Enterprise Linux 4
sles11 : Suse Linux Enterprise Server 11
sles10 : Suse Linux Enterprise Server
opensuse12 : openSuse 12
opensuse11 : openSuse 11
ubuntutrusty : Ubuntu 14.04 LTS (Trusty Tahr)
ubuntusaucy : Ubuntu 13.10 (Saucy Salamander)
ubunturaring : Ubuntu 13.04 (Raring Ringtail)
ubuntuquantal : Ubuntu 12.10 (Quantal Quetzal)
ubuntuprecise : Ubuntu 12.04 LTS (Precise Pangolin)
ubuntulucid : Ubuntu 10.04 LTS (Lucid Lynx)


--livecd
Ориентируем установочник что наш дистрибутивный образ является "live CD" и поэтому гостевая система должна грузиться с CDROM девайса.

--boot= - приоритет загрузки, примеры: --boot cdrom,fd,hd,network,menu=on в нашем случае: загрузка будет сначала с виртуального cdrom а затем с жёсткого диска: --boot=cdrom,hd

--disk= - Указываем файл основного "стореджа" или жёсткого диска гостевой системы в нашем случае:
--disk=path=win7hd,size=50,bus=virtio
где:
path=win7hd - название файла контейнера виртуального жёсткого диска.
bus=virtio - дисковая шина, может принимать: 'ide', 'sata', 'scsi', 'usb', 'virtio' или 'xen'.
но в нашем случае virtio, потому что диск виртуальный.
size=50 - Указываем размер в гигабайтах

--bridge=br0 - настройка сети, указываем что будем пользовать мост хоста.

--graphics=vnc,password=12345,listen=0.0.0.0 - указываем тип графической оболочки и пароль для удалённого подключения с любой машины в сети (listen=0.0.0.0).

--autostart - Запуск виртуальной машины при загрузке хоста.

#*#
#*# начало команды:
#*#


sudo virt-install --name=win7 --ram=512 --cpu host --cdrom=/var/lib/libvirt/images/win7.iso --os-variant=win7 --livecd --boot=cdrom,hd --disk=path=win7hd,size=50,bus=virtio --bridge=br0 --graphics=vnc,password=12345,listen=0.0.0.0 --video=cirrus --autostart


#*#
#*# конец команды.
#*#

#######Полученный результат:
Начинается установка...
Создание файла хранилища win7hd 50 GB 00:00
Создание домена... | 0 B 00:00
Domain installation still in progress. Waiting for installation to complete.
error: XDG_RUNTIME_DIR not set in the environment.
Cannot open display:
Выполните «virt-viewer --help» для просмотра полного списка параметров
Domain creation completed. You can restart your domain by running:
virsh --connect qemu:///system start win7

тут же в терминале набираем:
sudo netstat -nap | egrep '(kvm|qemu)'
Убеждаемся что порт слушается: tcp 5900.

#*##*##*##*##*##*#
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 1380/qemu-system-x8
unix 2 [ ACC ] STREAM LISTENING 12344 1380/qemu-system-x8 /var/lib/libvirt/qemu/win7.monitor
unix 3 [ ] STREAM CONNECTED 11613 1380/qemu-system-x8 /var/lib/libvirt/qemu/win7.monitor
#*##*##*##*##*##*#
или можно набрать это:
sudo netstat -tunelp | grep LISTEN

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

#Вариант из Windows:
Воспользуемся софтиной UltraVNC Viewer http://www.uvnc.com.
Запускаем UltraVNC Viewer и подключаемся к 192.168.3.103:5900. Далее вьюер спросит пароль, указанный нами в команде "virt-install", в нашем случае "12345".
И далее мы в привычном режиме проводим установку windows 7.

*************
#Вариант из ubuntu:
Воспользуемся приложением KRDC
Запускаем и подключаемся к 192.168.3.103:5900. Далее вьюер спросит пароль, указанный нами в команде "virt-install", в нашем случае "12345".
И далее мы в привычном режиме проводим установку windows 7.

*************

Чтобы удалить виртуальную машину "win7" в терминале хоста выполняем команды:
virsh
destroy win7
undefine win7

Результат:
#################
virsh # destroy win7
Домен win7 разрушен
virsh # undefine win7
Определение домена win7 удалено
#####################

# полезно узнать:

Если будем устанавливать несколько виртуалок то нужно иметь в виду что для каждой виртуальной машины порт будет отличаться на 1. Для второй машины нужно подключаться к порту 5901, для третьей — к 5902 и тд.


Управление виртуальными машинами через virsh:

virsh

# просмотр запущенных вирт машин через консоль:
list --all

# остановка вирт машины "virt01" через консоль:
shutdown virt01

# Запуск неактивной виртуальной машины "virt01":
start virt01

# Принудительная остановка виртуальной машины "virt01":
destroy virt01

и далее короткий список:

dominfo - Просмотр сведений о виртуальной машине.
domid - Просмотр идентификатора виртуальной машины.
domuuid - Просмотр UUID виртуальной машины.
domname - Просмотр имени виртуальной машины.
domstate - Просмотр состояния виртуальной машины.
quit - Закрыть интерактивный терминал.
reboot - Перезагрузить виртуальную машину.
restore - Восстановить сохраненную в файле виртуальную машину.
resume - Возобновить работу приостановленной виртуальной машины.
save - Сохранить состояние виртуальной машины в файл.
shutdown - Корректно завершить работу виртуальной машины.
suspend - Приостановить работу виртуальной машины.
undefine - Удалить все файлы виртуальной машины.
migrate - Перенести виртуальную машину на другой узел.

# Создание автоклона virt002 из virt01 через консоль:
# останавливаем virt01 машину, затем:
sudo su
virt-clone -o virt01 -n virt002 --file /var/lib/libvirt/images/virt002.img


/////////////////////////////////////////////////////////////////////////////////////////////////////////


------------------------------------------------------- --------------------------------------------------------------------------
счетчик посещений