Установка и настройка виртуального сервера
В консольном варианте установки, настройки и управлением системой, незаменимым инструментом является утилита virsh (надстройка над библиотекой libvirt). У неё большое количество опций и параметров, подробное описание можно получить так:
Man virsh
или вызвать стандартный «help»:
Virsh help
Я всегда придерживаюсь следующих правил при работе с виртуальными серверами:
- Храню iso образы ОС в каталоге /var/lib/libvirt/boot
- Храню образы виртуальных машин в каталоге /var/lib/libvirt/images
- Явно задаю каждой новой виртуальной машине свой статичный IP адрес через DHCP сервер гипервизора.
Приступим к установке первой виртуалки (64-битной серверной убунте 16.04 LTS):
Cd /var/lib/libvirt/boot
sudo wget http://releases.ubuntu.com/16.04/ubuntu-16.04.1-desktop-amd64.iso
Скачав образ запускаем установку:
Sudo virt-install \
—virt-type=kvm \
—name ubuntu1604\
—ram 1024 \
—vcpus=1 \
—os-variant=ubuntu16.04 \
—hvm \
—cdrom=/var/lib/libvirt/boot/ubuntu-16.04.1-server-amd64.iso \
—network network=default,model=virtio \
—graphics vnc \
—disk path=/var/lib/libvirt/images/ubuntu1604.img,size=20,bus=virtio
Переводя все эти параметры на «человеческий язык», то получается, что мы создаём виртуальную машину с ОС Ubuntu 16.04, 1024 МБ ОЗУ, 1 процессором, стандартной сетевой картой (виртуальная машина будет ходить в интернет как-будто из-за NAT), 20 ГБ HDD.
Стоит обратить внимание на параметр —os-variant
, он указывает гипервизору под какую именно ОС следует адаптировать настройки.Список доступных вариантов ОС можно получить, выполнив команду:
Osinfo-query os
Если такой утилиты нет в вашей системе, то устанавливаем:
Sudo apt-get install libosinfo-bin
После запуска установки, в консоли появится вот такая надпись:
Domain installation still in progress. You can reconnect to the console to complete the installation process.
Это нормальная ситуация, продолжать установку мы будем через VNC.Смотрим на каком порту он был поднят у нашей виртуалки (в соседнем терминале, например):
Virsh dumpxml ubuntu1604
…
…
Порт 5900, на локальном адресе 127.0.0.1. Чтобы подключиться к VNC, необходимо использовать Port Forwarding через ssh. Перед тем как это сделать, убедитесь, что tcp forwarding разрешён у демона ssh. Для этого идём в настройки sshd:
Cat /etc/ssh/sshd_config | grep AllowTcpForwarding
Если ничего не нашлось или вы видите:
AllowTcpForwarding no
То правим конфиг на
AllowTcpForwarding yes
и перезагружаем sshd.
Базовые команды управления ВМ
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 -f /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
Настраиваем время
Узнать, какое время на сервере можно с помощью команды date:
Чтобы сменить часовой пояс, необходимо выбрать подходящий файл часовой зоны в /usr/share/zoneinfo. В случае, если у вас часовой пояс Москвы, выполните следующее:
# mv /etc/localtime /etc/localtime.bak
# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Разово синхронизируем время:
Если ntpdate не работает, посмотрите материал, может это ваш случай. Запустим демон синхронизации и запишем его запуск в автозагрузку:
# systemctl start ntpd
# systemctl enable ntpd
ln -s «/usr/lib/systemd/system/ntpd.service» «/etc/systemd/system/multi-user.target.wants/ntpd.service»
Теперь наши часы будут автоматически синхронизироваться с сервером времени.
Более подробно об этой теме написано отдельно в моем материале — установка, настройка и синхронизация времени в CentOS.
Cloning Virtual Machine
Introduction of virt-clone parameters
- View the version.
- — h,—help to view help information.
- — connect=URI to the URI of the virtual machine manager libvirt.
- — o The original virtual machine name, the original virtual machine name, must be closed or paused.
- — n New Virtual Machine name — name New Virtual Machine name.
- —auto-clone automatically generates clone names and storage paths from the original virtual machine configuration.
- — u NEW_UUID, —uuid=NEW_UUID clones the new UUID of the virtual machine. The default value is a randomly generated UUID.
- — M NEW_MAC,—mac=NEW_MAC sets a new Mac address, which is generated randomly by default.
- — f NEW_DISKFILE, —file=NEW_DISKFILE uses the new disk mirror file address for the new client.
- force-copy=TARGET Forced Replication Device.
- nonsparse does not use sparse files to copy disk images.
Create KVM Virtual Machine using virt-manager
The following methods are available with virt-manager for Guest OS installation:
- Local installation media (ISO Image or CD-ROM)
- Network installation (HTTP, FTP, or NFS)
- Network boot (PXE)
- Importing existing disk images
Create new Virtual Machine
From Virtual Machine Manager, click on File → New Virtual Machine to Create to open the wizard to create KVM Virtual Machine using virt-manager
The wizard breaks down the virtual machine creation process into five steps:
- Choosing the installation method.
- Configuring the installation media.
- Memory and CPU configuration.
- Virtual machine storage configuration.
- Naming the Guest OS and networking configuration.
Select Installation Media
Select Local install media (ISO Image or CDROM) and click on the Forward button.
Clicking on the Forward button will take you to Step 2 where you have to specify the ISO image location.
Select your ISO which you plan to use to create KVM Virtual Machine using
automatically detects the operating system based on the install media. It uses the OS information database provided by .
At the time of writing this article, CentOS 8 was not part of Virtual Manager
Un-check the option to «automatically detect from the installation media/source» if the Virtual Manager fails to get the source information and choose Generic (default)
On the next screen, specify the memory and CPU that you want allocate for the virtual machine:
Define Storage for VM
- The wizard shows the maximum amount of CPUs and memory you can allocate. Configure these settings and click Forward to configure storage for the virtual machine:
- Make sure you assign sufficient space for your virtual machine.
- By default, it creates a virtual disk at the location, which is the default pool.
- If there are any other custom storage pools defined on the system, select create custom storage and either directly enter the path of the disk or click on the Manage button, which will open the Locate or create storage volume dialog box where you can select an existing volume or create a new one from the defined storage pool, if any available.
Assign Guest VM Name and Configure Network
- The next and final step is naming the guest and networking configuration.
- The default machine name is based on the selected OS. But since I am using generic Default, the name is not populated automatically. I will change it to vm_1.
- You can change it to whatever name you want to give but note that only underscores (_), periods (.), and hyphens (-) are supported:
Advertisement
If you wish to further configure the virtual machine’s hardware first, check the Customize configuration before install box first before clicking Finish. Or you can click on the bulb icon (as shown below) to open the configuration wizard for respective VM
Below is a sample screenshot of VM Setting’s section
Create VM Snapshot in Virtual manager
- You can also create snapshots in Virtual Manager.
- Select the VM for which you wish to create snapshot
- Click on Snapshot icon. Follow the below screenshot
- Click on + sign to take snapshot of the current state of the VM
Lastly I hope the steps from the article to create KVM Virtual Machine using Virtual Manager on Linux was helpful. So, let me know your suggestions and feedback using the comment section.
References:Create KVM Virtual Machine using Virtual Manager
Установка и настройка гипервизора
Я покажу, как настраивать гипервизор, на примере Debian Linux 9.6.0 — Х64-86. Ты можешь использовать любой дистрибутив Linux, который тебе по душе.
Когда ты определишься с выбором железа и его наконец-то привезут, придет время ставить гипервизор. При установке ОС все делаем, как обычно, за исключением разметки дисков. Неопытные администраторы часто выбирают опцию «Автоматически разбить все дисковое пространство без использования LVM». Тогда все данные будут записаны на один том, что нехорошо по нескольким причинам. Во-первых, если жесткий диск выйдет из строя, ты потеряешь все данные. Во-вторых, изменение файловой системы доставит массу хлопот.
В общем, чтобы избежать лишних телодвижений и потери времени, рекомендую использовать разметку диска с LVM.
Logical Volume Manager
Менеджер логических томов (LVM) — это подсистема, доступная в Linux и OS/2, построенная поверх Device Mapper. Ее задача — представление разных областей с одного жесткого диска или областей с нескольких жестких дисков в виде одного логического тома. LVM создает из физических томов (PV — Phisical Volumes) логическую группу томов (VG — Volumes Group). Она, в свою очередь, состоит из логических томов (LV — Logical Volume).
Сейчас во всех дистрибутивах Linux с ядром 2.6 и выше есть поддержка LVM2. Для использования LVM2 на ОС с ядром 2.4 надо устанавливать патч.
После того как система обнаружила жесткие накопители, запустится менеджер разбивки жестких дисков. Выбираем пункт Guided — use entire disk and set up LVM.
Теперь выбираем диск, на который будет установлена наша группа томов.
Система предложит варианты разметки носителя. Выбираем «Записать все файлы на один раздел» и идем дальше.
После сохранения изменений мы получим одну логическую группу и два тома в ней. Первый — это корневой раздел, а второй — это файл подкачки. Тут многие зададут вопрос: а почему не выбрать разметку вручную и не создать LVM самому?
Я отвечу просто: при создании логической группы VG загрузочный раздел boot не пишется в VG, а создается отдельным разделом с файловой системой ext2. Если этого не учесть, то загрузочный том окажется в логической группе. Это обречет тебя на мучения и страдания при восстановлении загрузочного тома. Именно поэтому загрузочный раздел отправляется на том без LVM.
Переходим к конфигурации логической группы для гипервизора. Выбираем пункт «Конфигурация менеджера логических томов».
Система оповестит о том, что все изменения будут записаны на диск. Соглашаемся.
Создадим новую группу — к примеру, назовем ее vg_sata .
Какой диск выбрать в kvm — lvm, raw (img) или qcow2
В kvm есть несколько типов дисков, которые вы можете использовать в своей работе. Они имеют принципиальные отличия как по своей работе, так и по способам бэкапа. Выбирать тот или иной тип нужно в зависимости от ваших задач. Рассмотрим эти типы подробнее.
LVM. Тут все понятно. Использование lvm томов в виде дисков виртуальных машин. Такой диск будет блочным устройством и должен работать быстрее всех остальных типов, так как нет лишней прослойки в виде файловой системы.
Плюсы:
- Снэпшоты средствами самого lvm, с них легко снять бэкап без остановки виртуальной машины.
- Максимальное быстродействие.
- Легко изменить размер диска.
Минусы:
- Более сложное управление по сравнению с дисками в виде отдельных файлов.
- Менее гибкое управление пространством диска. Если весь диск разбить на lvm разделы для виртуалок, то места на нем не останется, даже если вируталки будут пустые.
- Более сложный перенос на другой сервер.
RAW. Это обычный формат сырых данных. Среди дисков в виде файлов это будет самый простой и быстрый вариант. Все данные пишутся как есть без дополнительных обработок и служебной информации. Формат является универсальным для большинства популярных гипервизоров.
Плюсы:
- Максимальная простота и производительность среди образов в виде файла.
- Универсальный формат с поддержкой в большинстве гипервизоров.
- Легкость переноса виртуальной машины на другой сервер. Достаточно просто скопировать файл.
Минусы:
- Не поддерживает снепшоты ни в каком виде.
- Занимает сразу все выделенное пространство на диске, даже если внутри виртуальной машины место будет свободно. Из-за отсутствия фрагментации в некоторых случаях это может оказаться плюсом.
QCOW2. Родной формат для гипервизора QEMU. Расшифровывается как QEMU Copy-on-write. Этот формат позволяет создавать динамические диски для виртуальных машин, а так же поддерживает снепшоты. Теоретически, скорость работы должна хоть и не сильно, но уступать RAW. Как обстоит дело на практике, я не знаю, не замерял и подробно эту информацию не проверял.
Плюсы:
- Поддержка снепшотов и динамических дисков. Как следствие — более удобное управление дисковым пространством.
- Легкость переноса виртуальной машины на другой сервер. Достаточно просто скопировать файл.
Минусы:
Более низкая производительность, по сравнению с другими типами образов.
У каждого типа есть свои преимущества и недостатки. Lvm проще всего бэкапить, но им сложнее всего управлять. Для того, кто хорошо знаком с lvm это не проблема, если сталкиваешься первый раз, то возникает много вопросов. У raw нет снепшотов, лично для меня это большой минус, я этот формат вообще не рассматриваю. Если нет максимальной нагрузки на дисковую подсистему, то QCOW2 мне кажется наиболее приемлемым вариантом. Собственно, ниже и пойдет рассказ, как совместить удобство управления QCOW2 и простоту бэкапов и снэпшотов lvm. Я покажу, как сделать живой бэкап виртуальной машины kvm в формате qcow2 без остановки виртуальной машины.
Настройка пользовательского сеанса KVM
Создание подключения к сеансу
Запустим Менеджер виртуальных машин (virt-manager) из меню используемой графической среды.
Главное окно Virt Manager
В главном окне менеджера виртуальных машин, нажмём правой кнопкой мыши по QEMU/KVM, затем в контекстном меню выберем вариант Отключиться и Удалить. Подтвердим удаление.
В меню Файл выберем Добавить соединение.
Создание пользовательского сеанса KVM
В поле Гипервизор выберем пункт QEMU/KVM сеанс пользователя, затем установим флажок в чекбокс Подключаться автоматически и нажмём Подключиться. Новый пункт появится в списке.
По умолчанию предлагается использовать каталог ~/.local/share/libvirt/images для хранения дисковых образов виртуальных машин, однако для удобства мы создадим новые.
Это опциональное действие. Можно использовать пул default для любых целей.
В главном окне менеджера выделим пункт QEMU/KVM сеанс пользователя, затем в меню Правка выберем пункт Свойства подключения и переключимся на вкладку Пространство данных.
Настройки пула пользовательского сеанса
Создадим два каталога: images для дисковых образов виртуальных машин и iso для ISO образов, из которых будет производиться установка операционных систем:
mkdir -p ~/virt/{images,iso}
В левой панели окна менеджера пространств данных нажмём кнопку Добавить пул (с символом плюс).
Добавление пользовательского пула
В поле Название для пула с дисковыми образами укажем images, Тип — каталог в файловой системе, а Target Path — каталог на диске (в нашем случае — созданный ранее ~/virt/images). Нажмём Готово и пул появится в списке. Подтвердим сохранение изменений.
Повторим то же самое, но для ISO образов:
- название — iso;
- target path — ~/virt/iso.
Настроенные пулы пользовательского сеанса
Если всё сделано верно, в левой панели появятся два новых пула — images и iso. Выберем каждый и убедимся, что в чекбоксе Автозапуск при загрузке установлен флажок. Если это не так, исправим и нажмём Применить.
Пул с именем default теперь допускается удалить, хотя это и не обязательно. Для этого выберем его, нажмём кнопку Остановить пул, а затем Удалить пул и подтвердим намерение.
Настройка сети в пользовательском сеансе
Создадим сетевой мост для виртуальных машин:
sudo nmcli con add type bridge autoconnect yes ifname virbr0 ipv4.method shared ipv4.address 192.168.122.1/24
Добавим основное проводное соединение в качестве ведущего для моста:
sudo nmcli con add type bridge-slave autoconnect yes ifname enp3s0 master virbr0
Здесь вместо enp3s0 укажем физический интерфейс проводного соединения (может быть получен из вывода nmcli device status).
Разрешим использование моста в qemu-bridge-helper:
echo allow virbr0 | sudo tee -a /etc/qemu/bridge.conf
Добавим правила для файрвола:
sudo firewall-cmd --zone libvirt --add-interface virbr0 --permanent sudo firewall-cmd --zone libvirt --add-service dhcp --permanent sudo firewall-cmd --zone libvirt --add-service dhcpv6 --permanent sudo firewall-cmd --zone libvirt --add-service dns --permanent sudo firewall-cmd --reload
На этом настройка пользовательского сеанса завершена и можно приступать к установке гостевых операционных систем.
Troubleshooting KVM and VirtManager Setup
1. If you see the following error when attempting to launch VirtManager remotely, make sure that you use the wrapper script () to launch it, as described above.
X11 connection rejected because of wrong authentication. Traceback (most recent call last): File "/usr/share/virt-manager/virt-manager.py", line 383, in main() File "/usr/share/virt-manager/virt-manager.py", line 286, in main raise gtk_error RuntimeError: could not open display
2. If you see the following D-Bus error:
D-Bus library appears to be incorrectly set up; failed to read machine uuid: UUID file '/var/lib/dbus/machine-id'
Then run the command below and reboot the host machine.
$ sudo sh -c 'dbus-uuidgen > /var/lib/dbus/machine-id'
3. If you have font issue while running VirtManager, install the following font, and relaunch it.
$ sudo yum install dejavu-lgc-sans-fonts
Install KVM on CentOS 7
Issue the following command to install latest qemu package and also virt-manager which provides a graphical interface to manage virtual machines.
Yum install -y qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer
-
qemu-kvm
= QEMU emulator -
qemu-img
= QEMU disk image manager -
virt-install
= Command line tool to create virtual machines. -
libvirt
= Provides libvirtd daemon that manages virtual machines and controls hypervisor. -
libvirt-client
= provides client-side API for accessing servers and also provides the virsh utility which provides command line tool to manage virtual machines. -
virt-viewer
– Graphical console