Разное

Kvm debian 9: How to install KVM server on Debian 9/10 Headless Server

Содержание

Установка kvm debian 9 — Unix How

Могу предложить такой вот рабочий  вариант установки KVM.

 Сперва нам нужно будет установить пакет qemu-kvm, чтобы работать с виртуальной машиной. 

  • Выполняем в консоли команду
$ sudo apt install -y qemu-kvm libvirt0 virt-manager bridge-utils
$ sudo reboot
  • После этого создаем интерфейс моста для возможности подключения к виртуальным машинам других компьютеров.
  • Устанавливаем сам пакет
$ sudo apt install -y bridge-utils
  • Далее работаем над сетевыми интерфейсами. ens3 зависит от того, какое у вас устройство ethernet. Выглядит это так
$ ifconfig -a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
state UP group default qlen 1000
    link/ether 52:54:00:51:d5:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.87/24 brd 192.168.11.255 scope global dynamic ens3
       valid_lft 42567sec preferred_lft 42567sec
    inet6 fe80::5054:ff:fe51:d501/64 scope link
       valid_lft forever preferred_lft forever
  • Нужно теперь добавить настройку  br0 в /etc/network/interfaces. Выполняем
$ sudo reboot
  • Перезагружаем систему.

Для использования DHCP необходимо следующее:

$ cat /etc/network/interfaces 

# interfaces (5) файл, используемый ifup (8) и ifdown (8) 

auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
      bridge_ports ens3
      bridge_stp off
      bridge_maxwait 0

Для применения статического адреса IP редактируем файл:

$ vi /etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
      address 192. 168.11.93
      netmask 255.255.255.0
      network 192.168.11.0
      broadcast 192.168.11.255
      gateway 192.168.11.1
      dns-nameservers 192.168.11.2 192.168.11.1
      dns-search hiroom2.com
      bridge_ports ens3
      bridge_stp off
      bridge_maxwait 0

После создания моста bro0 имеет одинаковый mac адрес с ens3, причем IP присваивается в этом случае br0 как:

$ ifconfig -a

1: lo: <LOOPBACK, UP, LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
group default qlen 1 
    link / loopback 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 
    inet 127.0.0.1/8 scope host lo 
       valid_lft forever preferred_lft forever 
    inet6 :: 1/128 scope host 
       valid_lft forever preferred_lft forever 

2: ens3: <BROADCAST, MULTICAST, UP, LOWER_UP> mtu 1500 qdisc pfifo_fast 
master br0 состояние UP group default qlen 1000 
    link / ether 52: 54: 00: 51: d5: 01 brd ff: ff: ff: ff: ff: ff 

3: br0: <BROADCAST, MULTICAST, UP, LOWER_UP> mtu 1500 qdisc noqueue state 

UP group default qlen 1000 
    link / эфир 52: 54: 00: 51: d5: 01 brd ff: ff: ff: ff: ff: ff
    inet 192.168.11.87/24 brd 192.168.11.255 scope global br0 
       valid_lft forever preferred_lft forever 
    inet6 fe80 :: 5054: ff: fe51: d501 / 64 scope link 
       valid_lft forever preferred_lft forever
  • Создаем группу LIBVIRT. Нужно это для запуска команды libvirt без команды sudo
$ sudo gpasswd libvirt -a <username>

После создаем каталог ISO. Для этого будем перемещать debian-9.0.0-amd64-netinst.iso в сам каталог  iso. Выполняем:

$ sudo mkdir /var/lib/libvirt/iso 
$ sudo mv debian-9.0.0-amd64-netinst.iso /var/lib/libvirt/iso/ 
$ sudo chown libvirt-qemu: libvirt  /var/ lib/libvirt/ISO/Debian-9.0.0-amd64-netinst.iso

Теперь перейдем к созданию виртуальной машины с virt-manager.

Выполняем команду:

$ virt-manager

Появится вот такое окошко:

В вверху слева выбираем в опции file — Создать новую виртуальную машину.  

После этого нам необходимо будет выбрать сам установочный носитель. У нас это debian-9 . . .( В каталоге ISO находится)

Далее выбираем «Обзор(Browse), нажимаем добавить + , вводим имя хранилища,  Каталог файловой системы выбираем DIR:

Далее необходимо обозначить путь пула хранилища ввода. Делается это вот здесь:

Теперь находим наш каталог Debian 9:

Следующим шагом выбираем тип ОС:

Далее определяем размер ядра и количество памяти:

Делаем хранилище как на скриншоте ниже:

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

Вот после таких танцев получаем установку на виртуальную машину.

ООО МааСофтваре — Ошибка 404: Страница не найдена

test

Ошибка 404: Страница не найдена

Ошибка 404: Страница не найдена

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

Назад  Наверх

Март 2021
  Пн  Вт  Ср  Чт  Пт  Сб  Вс  
  1  2  3  4  5  6  7  
  8  9  10  11  12  13  14  
  15  16  17  18  19  20  21  
  22  23  24  25  26  27  28  
  29  30  31      
 30 марта 2021 года, вторник 

Новости

[. ..] Архив новостей.

Новое на сайте

Сейчас на сайте

Гостей: 2
Пользователей: 0
Роботов: 2
Всего пользователей: 32

Другие ресурсы

Linux: Debian 9 KVM

Устанавливаем пакеты:

# apt -y install qemu-kvm libvirt-daemon libvirt-daemon-system virtinst bridge-utils

Для того, чтобы иметь возможность управлять
виртуальными машинами (ВМ) от обычного пользователя, вы должны добавить
этого пользователя в группы kvm и libvirt:

 
# adduser <youruser> kvm
# adduser <youruser> libvirt
 
или
 
# sudo gpasswd libvirt -a <username> 
# sudo gpasswd kvm -a <username> 

  Посмотреть список доменов:

 
# virsh list --all
 

Включить vhost-net.

# modprobe vhost_net


# lsmod | grep vhost 


vhost_net               20480     0 

tun                            28672     1         vhost_net 

vhost                       45056     1          vhost_net 

macvtap                  24576     1         vhost_net 

# echo vhost_net >> /etc/modules

libvirt defaults to qemu:///session for non-root. So from <youruser> you’ll need to do:

# virsh —connect qemu:///system list —all

You can use LIBVIRT_DEFAULT_URI to change this.

Создание гостевой ВМ

Самый простой способ для создания и управления гостевыми ВМ это использовать графическое приложение Virtual Machine Manager virt-manager.

Также,
вы можете создать гостевую ВМ в командной строке. Ниже приведен пример
для создания гостевой ВМ Debian Squeeze с именем squeeze-amd64:

 

# virt-install —virt-type kvm —name squeeze-amd64 —memory 512 —cdrom ~/iso/Debian/cdimage. debian.org_mirror_cdimage_archive_6.0.10_live_amd64_iso_hybrid_debian_live_6.0.10_amd64_gnome_desktop.iso —disk size=4 —os-variant debiansqueeze

Since the guest has no network connection yet, you will need to use the GUI virt-viewer to complete the install.

You can avoid pulling the ISO by using the —location option. To obtain text console for the installation you can also provide —extra-args «console=ttyS0»:

# virt-install —virt-type kvm —name squeeze-amd64 \
—location http://httpredir.debian.org/debian/dists/squeeze/main/installer-amd64/ \
—extra-args «console=ttyS0» -v —os-variant debiansqueeze \
—disk size=4 —memory 512

Managing VMs from the command-line

You can then use the virsh(1) command to start and stop virtual machines. VMs can be generated using virtinst. For more details see the libvirt page. Virtual machines can also be controlled using the kvm command in a similar fashion to QEMU. Below are some frequently used commands:

Start a configured VM guest «VMGUEST»:

# virsh start VMGUEST

Notify the VM guest «VMGUEST» to graceful shutdown:

# virsh shutdown VMGUEST

Force the VM guest «VMGUEST» to shutdown in case it is hanged, i.e. graceful shutdown not work:

# virsh destroy VMGUEST

Configure Bridge networking. 

 

# vi /etc/network/interfaces 

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens33

# change like follows

iface ens3 inet manual

#iface ens3 inet static

#address 10.0.0.30

#network 10.0.0.0

#netmask 255.255.255.0

#broadcast 10. 0.0.255

#gateway 10.0.0.1

#dns-nameservers 10.0.0.30

# add bridge interface

iface br0 inet static
address 10.0.0.30
network 10.0.0.0
netmask 255.255.255.0
broadcast 10.0.0.255
gateway 10.0.0.1
dns-nameservers 10.0.0.30
bridge_ports ens3
bridge_stp off
auto br0

#reboot

#ip addr 

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 52:54:00:99:d3:a8 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:99:d3:a8 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.30/24 brd 10.0.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe99:d3a8/64 scope link
       valid_lft forever preferred_lft forever










Определить языкАзербайджанскийАлбанскийАнглийскийАрабскийАрмянскийАфрикаансБаскскийБелорусскийБенгальскийБирманскийБолгарскийБоснийскийВаллийскийВенгерскийВьетнамскийГалисийскийГреческийГрузинскийГуджаратиДатскийЗулуИвритИгбоИдишИндонезийскийИрландскийИсландскийИспанскийИтальянскийЙорубаКазахскийКаннадаКаталанскийКитайский (Упр)Китайский (Трад)КорейскийКреольский (Гаити)КхмерскийЛаосскийЛатинскийЛатышскийЛитовскийМакедонскийМалагасийскийМалайскийМалайяламМальтийскийМаориМаратхиМонгольскийНемецкийНепалиНидерландскийНорвежскийПанджабиПерсидскийПольскийПортугальскийРумынскийРусскийСебуанскийСербскийСесотоСингальскийСловацкийСловенскийСомалиСуахилиСуданскийТагальскийТаджикскийТайскийТамильскийТелугуТурецкийУзбекскийУкраинскийУрдуФинскийФранцузскийХаусаХиндиХмонгХорватскийЧеваЧешскийШведскийЭсперантоЭстонскийЯванскийЯпонский АзербайджанскийАлбанскийАнглийскийАрабскийАрмянскийАфрикаансБаскскийБелорусскийБенгальскийБирманскийБолгарскийБоснийскийВаллийскийВенгерскийВьетнамскийГалисийскийГреческийГрузинскийГуджаратиДатскийЗулуИвритИгбоИдишИндонезийскийИрландскийИсландскийИспанскийИтальянскийЙорубаКазахскийКаннадаКаталанскийКитайский (Упр)Китайский (Трад)КорейскийКреольский (Гаити)КхмерскийЛаосскийЛатинскийЛатышскийЛитовскийМакедонскийМалагасийскийМалайскийМалайяламМальтийскийМаориМаратхиМонгольскийНемецкийНепалиНидерландскийНорвежскийПанджабиПерсидскийПольскийПортугальскийРумынскийРусскийСебуанскийСербскийСесотоСингальскийСловацкийСловенскийСомалиСуахилиСуданскийТагальскийТаджикскийТайскийТамильскийТелугуТурецкийУзбекскийУкраинскийУрдуФинскийФранцузскийХаусаХиндиХмонгХорватскийЧеваЧешскийШведскийЭсперантоЭстонскийЯванскийЯпонский

Звуковая функция ограничена 200 символами

Глава 1.

Начало работы с QEMU и KVM

В данной главе мы обсудим следующие вопросы:

  • Установка и настройка QEMU

  • Управление образами диска с помощью qemu-img

  • Подготовка образов для установки ОС через qemu-nbd

  • Установка некоторой пользовательской ОС на оброс посредством debootstrap

  • Изменение размера некоторого образа

  • Применение предварительно имевшихся образов

  • Исполнение виртуальных машин с применением qemu-system-*

  • Запуск ВМ QEMU с поддержкой KVM

  • Подключение к исполняемому экземпляру с использованием VNC

QEMU (Quick Emulator) является основным компонентом комплекта технологии виртуализации QEMU/ KVM. Он предоставляет аппаратную виртуализацию и эмуляцию процессора. QEMU исполняется в пространстве пользователя и, без необходимости в ядре, драйверы всё ещё могут предоставлять быструю эмуляцию системы. QEMU поддерживает два режима операционной системы:

  • Эмуляция всей системы, при которой QEMU эмулирует всю вычислительную систему, ключая тип её процессора и периферийных устройств

  • Эмуляция режима пользователя, при которой QEMU может исполнять некий процесс, который был откомпиллирован в архитектурах, имеющих другую собственную архитектуру ЦПУ

В этой книге мы намереваемся сосредоточиться на эмуляции системы целиком с полным аппаратным ускорением, предоставляемым гипервизором KVM (Kernel-based Virtual Machine).

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

Установка и настройка QEMU

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

Приготовление

В зависимости от вашего дистрибутива Linux само название пакета и команду установки могут отличаться. Вы можете применять свою систему диспетчера пакетов, например apt, dnf или yum для поиска каких- либо пакетов, содержащих строку QEMU и ознакомиться с теми, которые доступны для вашего конкретного случая. Все исходные годы могут быть выгружены с официального вебсайта проекта по адресу http://www.qemu-project.org/download/#source.

Как это сделать

Чтобы установить QEMU из пакетов в дистрибутиве Ubuntu/ Debian выполните следующие шаги:

  1. Обновите индексацию своего пакета:

    
    root@kvm:~# apt-get update
     	   

  2. Установите сам пакет:

    
    root@kvm:~# apt-get install -y qemu
     	   

В дистрибутивах CentOS/RHEL выполните:

  1. 
    root@kvm:~# yum install qemu-kvm
     	   

Чтобы установить из исходного кода выполните процедуру:

  1. Вначале загрузите весь архив:

    
    root@kvm:~#cd /usr/src && wget
    http://download. qemu-project.org/qemu-2.8.0.tar.xz
     	   

  2. Распакуйте файлы из этого архива:

    
    root@kvm:/usr/src# tar xvJf qemu-2.8.0.tar.xz && cd qemu-2.8.0
     	   

  3. Настройте и скомпиллируйте данный исходный код:

    
    root@kvm:/usr/src/qemu-2.8.0# ./configure
    root@kvm:/usr/src/qemu-2.8.0# make && make install
     	   


Как это работает

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


root@kvm:~# dpkg --list | grep qemu
ii ipxe-qemu 1.0.0+git-20150424.a25a16d-1ubuntu1 all PXE boot firmware - ROM images for qemu
ii qemu 1:2.5+dfsg-5ubuntu10.8 amd64 fast processor emulator
ii qemu-block-extra:amd64 1:2.5+dfsg-5ubuntu10.8 amd64 extra block backend modules for qemu-system and qemu-utils
ii qemu-slof 20151103+dfsg-1ubuntu1 all Slimline Open Firmware -- QEMU PowerPC version
ii qemu-system 1:2.5+dfsg-5ubuntu10.8 amd64 QEMU full system emulation binaries
ii qemu-system-arm 1:2.5+dfsg-5ubuntu10.8 amd64 QEMU full system emulation binaries (arm)
ii qemu-system-common 1:2.5+dfsg-5ubuntu10.8 amd64 QEMU full system emulation binaries (common files)
ii qemu-system-mips 1:2.5+dfsg-5ubuntu10.8 amd64 QEMU full system emulation binaries (mips)
ii qemu-system-misc 1:2.5+dfsg-5ubuntu10.8 amd64 QEMU full system emulation binaries (miscelaneous)
ii qemu-system-ppc 1:2.5+dfsg-5ubuntu10.8 amd64 QEMU full system emulation binaries (ppc)
ii qemu-system-sparc 1:2.5+dfsg-5ubuntu10.8 amd64 QEMU full system emulation binaries (sparc)
ii qemu-system-x86 1:2.5+dfsg-5ubuntu10.8 amd64 QEMU full system emulation binaries (x86)
ii qemu-user 1:2. 5+dfsg-5ubuntu10.8 amd64 QEMU user mode emulation binaries
ii qemu-user-binfmt 1:2.5+dfsg-5ubuntu10.8 amd64 QEMU user mode binfmt registration for qemu-user
ii qemu-utils 1:2.5+dfsg-5ubuntu10.8 amd64 QEMU utilities
root@kvm:~#
 	   

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

Заслуживает внимания тот факт, что все исполняемые файлы упомянутых выше пакетов начинаются с префикса QEMU.
Вы можете применять завершение клавиши tab для просмотра
списка всех доступных для исполнения файлов:


root@kvm:~# qemuqemu-aarch64 qemu-io qemu-mips64el qemu-ppc64 qemu-sparc32plus qemu-system-lm32 qemu-system-mipsel qemu-system-sh5 qemu-system-xtensa
qemu-alpha qemu-m68k qemu-mipsel qemu-ppc64abi32 qemu-sparc64 qemu-system-m68k qemu-system-moxie qemu-system-sh5eb qemu-system-xtensaeb
qemu-arm qemu-make-debian-root qemu-mipsn32 qemu-ppc64le qemu-system-aarch64 qemu-system-microblaze qemu-system-or32 qemu-system-sparc qemu-tilegx
qemu-armeb qemu-microblaze qemu-mipsn32el qemu-s390x qemu-system-alpha qemu-system-microblazeel qemu-system-ppc qemu-system-sparc64 qemu-unicore32
qemu-cris qemu-microblazeel qemu-nbd qemu-sh5 qemu-system-arm qemu-system-mips qemu-system-ppc64 qemu-system-tricore qemu-x86_64
qemu-i386 qemu-mips qemu-or32 qemu-sh5eb qemu-system-cris qemu-system-mips64 qemu-system-ppc64le qemu-system-unicore32
qemu-img qemu-mips64 qemu-ppc qemu-sparc qemu-system-i386 qemu-system-mips64el qemu-system-ppcemb qemu-system-x86_64
root@kvm:~#
 	   

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

w3.org/1999/xhtml»> Управление образами дисков при помощи qemu-img

Чтобы исполнять виртуальные машины, QEMU требуются образы для хранения определённой файловой системы данной
гостевой ОС. Такой образ сам по себе имеет тип некоторого файла и он представляет всю гостевую файловую систему,
расположенную в некотором виртуальном диске. QEMU поддерживает различные образы и предоставляет инструменты
для создания и управления ими. В данном рецепте мы намереваемся построить некий пустой образ диска с помощью
утилиты qemu-img.


Приготовление

Чтобы воспользоваться данным рецептом, нам необходимо иметь установленной утилиту
qemu-img.. Если вы следовали всем шагам в первом рецепте, вы должны
её иметь. Чтобы проверить какие типы образов поддерживаются в вашем дистрибутиве Linux, исполните
следующую команду:


root@kvm:~# qemu-img -h | grep Supported
Supported formats: bochs vvfat rbd vpc parallels tftp ftp ftps raw https qcow dmg http qcow2 quorum null-aio cloop vdi iscsi null-co vhdx blkverify file vmdk host_cdrom blkdebug host_device sheepdog qed nbd
root@kvm:~#
 	   

Из предыдущего вывода мы можем обнаружить, что имеется много поддерживаемых образов в данной тестовой
системе, которые мы можем применять. Убедитесь, что ваша версия QEMU поддерживает тип сырого (raw) образа,
поскольку он является типом по умолчанию и именно его мы собираемся применять в данном рецепте. одним из
наиболее часто применяемых типов является qcow2, который поддерживает
копирование при записи {Прим. пер.: механизм, при котором все изменения
осуществляются новой записью
}, сжатием, шифрованием, а также созданием моментальных снимков.
Мы собираемся усилиться с его помощью в последующих рецептах.
{Прим. пер.: для справки: основной формат, применяемый в VMWare/ ESXi
.vmdk, в Citrix/ XenServer .xva,
в Microsoft/ Hyper-V .vhdx Подробнее см. {Прим.
пер.: см. Также ознакомьтесь….
}

Замечание

Заметьте, пожалуйста, что хотя QEMU поддерживает множество форматов, это совсем не означает, что вы
можете исполнять в нём эти виртуальные машины. Однако, qemu-img
может быть использован для преобразования различных образов в форматы raw
и qcow2. Для лучшей производительности применяйте raw
или qcow2.


Как это сделать…

Для создания пустого образа raw определённого размера и проверки того
то этот файл был создан на данном хосте:

  1. Создайте образ raw с названием
    debian.img и размером 10 ГБ:

    
    root@kvm:~# qemu-img create -f raw debian.img 10G
    Formatting 'debian.img', fmt=raw size=10737418240
    root@kvm:~#
     	   

  2. Проверьте что файл был создан:

    
    root@kvm:~# ls -lah debian.img
    -rw-r--r-- 1 root root 10G Feb 10 16:58 debian.img
    root@kvm:~#
     	   

  3. Опросите тип файла:

    
    root@kvm:~# file -s debian.img
    debian.img: data
    root@kvm:~#
     	   

  4. Получите дополнительную информацию о данном образе:

    
    root@kvm:~# qemu-img info debian. img
    image: debian.img
    file format: raw
    virtual size: 10G (10737418240 bytes)
    disk size: 0
    root@kvm:~#
     	   


Как это работает…

Утилита qemu-img позволяет нам создавать, преобразовывать и
изменять образы гостей.

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

На шаге 4 мы воспользовались подкомандой info для получения
дополнительной информации о данном имеющемся образе. Отметим, что имеющийся размер диска, отображаемый в
настоящий момент равен нулю. Мы собираемся создать что- то в своём следующем рецепте.


Также ознакомьтесь…

В данном рецепте мы перечислили поддерживаемые QEMU форматы дисков. Ниже мы представляем краткое описание
наиболее общих типов, с которыми вы можете встретиться:

  • raw: Формат сырого образа диска. Он является форматом по умолчанию
    и может быть одним из самых быстрых форматов на основе файла. Если вы отформатируете этот образ некоторой
    файловой системой, которая поддерживает пустые места, например, EXT3, тогда пространство будут использовать
    только имеющие данные сектора. Основным недостатком таких сырых образов является отсутствие свойств, что делает
    их идеальным средством для тестирования и прототипирования.

  • qcow2: как уже упоминалось в предыдущем разделе, это формат, обладающий
    одним из самых богатых набором свойств. Он поддерживает моментальные снимки ВМ, сжатие и шифрование за счёт
    небольшого снижения производительности. {Прим. пер.: для запоминания аббревиатуры:
    QEMU
    Copy-
    On-
    Write
    }.

  • qcow: Это более старый формат QEMU, который поддерживает файлы
    резервных копий, компактные файлы образов, шифрование и компрессию.

  • dmg: Это формат образа диска для Mac. Данный образ диска Mac
    предоставляет защиту безопасным паролем и сжатие, а также наиболее часто применяется для распространения
    програмного обеспечения вместо того, чтобы исполнять виртуальные машины.

  • nbd: Сетевые блочные устройства (network block device), обычно
    применяются для доступа к удалённым устройствам хранения.

  • vdi: Этот формат диска применяется программным обеспечением
    Oracle VirtualBox и может использоваться для исполнения виртуальных машин на платформах с различными ЦПУ.

  • vmdk: Это тип образа диска VMWare, в котором отдельный виртуальный
    жёсткий диск может объединять множество файлов.

  • vhdx: Этот формат применяет Microsoft Hyper-V. Он предоставляет большую
    ёмкость хранения, защиту от разрушения данных в процессе отказов электропитания, а также оптимизацию чтения/
    записи для больших образов дисков.

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

Подготовка образов для установки ОС при помощи qemu-nbd

В предыдущем рецепте мы создали некий пустой образ raw. В данном рецепт мы собираемся сделать в нём
некий раздел и какую- то файловую систему, подготовив этот образ для полной установки гостевой ОС.
При создании таких раздела и файловой системы вам следует рассмотреть тот тип загрузки, который создаст этот
виртуальный экземпляр. Если ваше приложение исполняется внутри ВМ с ограниченными операциями ввода/ вывода, вы
можете рассмотреть для его файловой системы XFS. В данном рецепте мы собираемся применить EXT4, так как большая
часть дистрибутивов Linux боддерживают её сразу после установки.


Приготовление

Для данного рецепта нам понадобятся следующие инструменты:

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


Как это сделать…

Выполните следующие обозначенные шаги чтобы разметить диск и создать некую файловую систему в своём
пустом образе:

  1. Загрузите необходимый вам модуль ядра nbd:

    
    root@kvm:~# modprobe nbd
    root@kvm:~#
     	   

  2. Воспользовавшись инструментом qemu-nbd, свяжите имеющийся файл
    пустого образа с блочным устройством /dev/nbd0:

    
    root@kvm:~# qemu-nbd --format=raw --connect=/dev/nbd0 debian.img
    root@kvm:~#
     	   

  3. Создайте в этом блочном устройстве два раздела. Один будет применяться для подкачки (swap), а другой будет
    выступать в роли того корневого раздела, который требуется вашей гостевой ОС:

    
    root@kvm:~# sfdisk /dev/nbd0 << EOF
    >,1024,82
    >;
    >EOF
    Checking that no-one is using this disk right now ...
    OK
    Disk /dev/nbd0: cannot get geometry
    
    Disk /dev/nbd0: 1305 cylinders, 255 heads, 63 sectors/track
    
    sfdisk: ERROR: sector 0 does not have an msdos signature
    /dev/nbd0: unrecognized partition table type
    Old situation:
    No partitions found
    New situation:
    Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
    
     Device Boot Start End #cyls #blocks Id System
    /dev/nbd0p1 0+ 1023 1024- 8225279+ 82 Linux swap / Solaris
    /dev/nbd0p2 1024 1304 281 2257132+ 83 Linux
    /dev/nbd0p3 0 - 0 0 0 Empty
    /dev/nbd0p4 0 - 0 0 0 Empty
    Warning: no primary partition is marked bootable (active)
    This does not matter for LILO, but the DOS MBR will not boot this disk. 
    Successfully wrote the new partition table
    
    Re-reading the partition table ...
    
    If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
    to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
    (See fdisk(8).)
    root@kvm:~#
     	   

  4. После создания разделов перечислите все доступные блочные устройства:
    Code

    
    root@kvm:~# ls -la /dev/nbd0*
    brw-rw---- 1 root disk 43, 0 Feb 10 18:24 /dev/nbd0
    brw-rw---- 1 root disk 43, 1 Feb 10 18:24 /dev/nbd0p1
    brw-rw---- 1 root disk 43, 2 Feb 10 18:24 /dev/nbd0p2
    root@kvm:~#
     	   

  5. Создайте необходимый раздел подкачки:

    
    root@kvm:~# mkswap /dev/nbd0p1
    Setting up swapspace version 1, size = 508 KiB (520192 bytes)
    no label, UUID=c246fe39-1bc5-4978-967c-806264771d69
    root@kvm:~#
     	   

  6. В качестве своего корневого раздела создайте файловую систему EXT4:

    
    root@kvm:~# mkfs.ext4 /dev/nbd0p2
    mke2fs 1.42.13 (17-May-2015)
    Discarding device blocks: failed - Input/output error
    Creating filesystem with 2620928 4k blocks and 655360 inodes
    Filesystem UUID: 2ffa23de-579a-45ad-abbc-2a179de67f11
    Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    root@kvm:~#
     	   


Как это работает…

Мы воспользовались преимуществами функциональности, которые предоставляет модуль ядра
nbd, предоставляя нам возможность связать некий файл образа raw
с блочным устройством при помощи утилиты qemu-nbd. Для получения
дополнительной информации об этом модуле ядра исполните следующий код:


root@kvm:~# modinfo nbd
filename: /lib/modules/4.4.0-62-generic/kernel/drivers/block/nbd.ko
license: GPL
description: Network Block Device
srcversion: C67096AF2AE3C738DBE0B7E
depends:
intree: Y
vermagic: 4.4.0-62-generic SMP mod_unload modversions
parm: nbds_max:number of network block devices to initialize (default: 16) (int)
parm: max_part:number of partitions per device (default: 0) (int)
root@kvm:~#
 	   

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


root@kvm:~# file -s /dev/nbd0
/dev/nbd0: x86 boot sector
root@kvm:~#
 	   

После создания двух новых разделов на шаге 3 изменился тип самого файла образа. Давайте опросим его снова:


root@kvm:~# file -s debian.img
debian.img: x86 boot sector
root@kvm:~#
 	   
Замечание

Мы выбрали использование утилиты sfdisk для создания необходимых
разделов, но вы можете применить интерактивно и утилиту fdisk,
если вы предпочитаете её. Окончательный результат будет одним и тем же.

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

Установка пользовательской ОС в образ при помощи debootstrap

В данном рецепте мы собираемся воспользоваться утилитой debootstrap
для установки дистрибутива Debian в том образе raw, который мы подготовили в двух предыдущих рецептах.
Сама команда debootstrap применяется для самозагрузки некоторой
базовой системы Debian с применением определённого общедоступного зеркала. К концу данного рецепта мы должны
иметь некий образ, содержащий полный дистрибутив Linux готовый к исполнению QEMU.


Приготовление

Для выполнения данного рецепта мы будем нуждаться в следующем:

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


root@kvm:~# ls -la /dev/nbd0*
brw-rw---- 1 root disk 43, 0 Feb 10 18:24 /dev/nbd0
brw-rw---- 1 root disk 43, 1 Feb 10 18:24 /dev/nbd0p1
brw-rw---- 1 root disk 43, 2 Feb 10 18:24 /dev/nbd0p2
root@kvm:~#
 	   

Если что- то находится не на своём месте, повторите, пожалуйста, рецепт Подготовка образов для установки ОС при помощи qemu-nbd по поводу того как связать свой
образ raw с необходимым блочным устройством /deb/nbd0.

Чтобы установить утилиту debootstrap, если она ещё не присутствует
у вас в системе, исполните следующий код:


root@kvm:~# apt install -y debootstrap
...
Setting up debootstrap (1.0.78+nmu1ubuntu1.2) ...
root@kvm:~#
 	   

Как это сделать…

Для установки некоторого нового дистрибутива Debian в своё устройство raw следуйте набросанным далее шагам:

  1. Смонтируйте свой корневой раздел из устройства NBD
    (Network Block Device) и убедитесь что оно
    смонтировалось успешно:

    
    root@kvm:~# mount /dev/nbd0p2 /mnt/
    root@kvm:~# mount | grep mnt
    /dev/nbd0p2 on /mnt type ext4 (rw)
    root@kvm:~#
     	   

  2. Установите самую последнюю стабильную версию дистрибутива Debian в свой корневой раздел смонтированный в
    /mnt из определённого общедоступного репозитория:

    
    root@kvm:~# debootstrap --arch=amd64 --include="openssh-server vim" stable /mnt/ http://httpredir. debian.org/debian/
    ...
    I: Base system installed successfully.
    root@kvm:~#
     	   

  3. Убедитесь что ваша корневая файловая система была создана выведя перечень всех имеющихся в данном
    смонтированном местоположении файлов:

    
    root@kvm:~# ls -lah /mnt/
    total 100K drwxr-xr-x 22 root root 4.0K Feb 10 17:19 .
    drwxr-xr-x 23 root root 4.0K Feb 10 15:29 ..
    drwxr-xr-x 2 root root 4.0K Feb 10 17:19 bin
    drwxr-xr-x 2 root root 4.0K Dec 28 17:42 boot
    drwxr-xr-x 4 root root 4.0K Feb 10 17:18 dev
    drwxr-xr-x 55 root root 4.0K Feb 10 17:19 etc
    drwxr-xr-x 2 root root 4.0K Dec 28 17:42 home
    drwxr-xr-x 12 root root 4.0K Feb 10 17:19 lib
    drwxr-xr-x 2 root root 4.0K Feb 10 17:18 lib64
    drwx------ 2 root root 16K Feb 10 17:06 lost+found
    drwxr-xr-x 2 root root 4.0K Feb 10 17:18 media
    drwxr-xr-x 2 root root 4.0K Feb 10 17:18 mnt
    drwxr-xr-x 2 root root 4.0K Feb 10 17:18 opt
    drwxr-xr-x 2 root root 4.0K Dec 28 17:42 proc
    drwx------ 2 root root 4.0K Feb 10 17:18 root
    drwxr-xr-x 4 root root 4.0K Feb 10 17:19 run
    drwxr-xr-x 2 root root 4.0K Feb 10 17:19 sbin
    drwxr-xr-x 2 root root 4.0K Feb 10 17:18 srv
    drwxr-xr-x 2 root root 4.0K Apr 6 2015 sys
    drwxrwxrwt 2 root root 4.0K Feb 10 17:18 tmp
    drwxr-xr-x 10 root root 4.0K Feb 10 17:18 usr
    drwxr-xr-x 11 root root 4.0K Feb 10 17:18 var
    root@kvm:~#
     	   

  4. Свяжите весь каталог устройств со своего хоста в выстраиваемую файловую систему образа и смонтируйте их:

    
    root@kvm:~# mount --bind /dev/ /mnt/dev
    root@kvm:~#
     	   

  5. Проверьте что все устройства nbd теперь присутствуют внутри этого
    смонтированного положения:

    
    root@kvm:~# ls -la /mnt/dev/ | grep nbd0
    brw-rw---- 1 root disk 43, 0 Feb 10 18:24 nbd0
    brw-rw---- 1 root disk 43, 1 Feb 10 18:26 nbd0p1
    brw-rw---- 1 root disk 43, 2 Feb 10 18:26 nbd0p2
    root@kvm:~#
     	   

  6. Измените пространство имён данного каталога, чтобы оно было корневой файловой системой нашего образа
    и убедитесь в успешности данной операции:

    
    root@kvm:~# chroot /mnt/
    root@kvm:/# pwd
    / r
    oot@kvm:/#
     	   

  7. Проверьте номер версии дистрибутива внутри своей среды chroot:

    
    root@kvm:/# cat /etc/debian_version
    8. 7
    root@kvm:/#
     	   


  8. Code

    
    New-VM -Name VM01 -Generation 2
     	   

  9. Смонтируйте виртуальные файловые системы proc и
    sysfs внутри своей среды chroot:

    
    	 proc and sysfs 
    root@kvm:/# mount -t proc none /proc
    root@kvm:/# mount -t sysfs none /sys
    root@kvm:/#
     	   

  10. Всё ещё находясь внутри местоположения своего chroot, установите сам метапакет ядра Debian и утилиты
    grub2:

    
    root@kvm:/# apt-get install -y --force-yes linux-image-amd64 grub2
     	   

    Замечание

    Если вы получите запрос на выбор целевого устройства для установки в нём GRUB, не выбирайте
    никакого и просто продолжите.

  11. Установите GRUB в своём корневом устройстве:

    
    root@kvm:/# grub-install /dev/nbd0 --force
    Installing for i386-pc platform.
    grub-install: warning: this msdos-style partition label has no post-MBR gap; embedding won't be possible.
    grub-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
    Installation finished. No error reported.
    root@kvm:/#
     	   

  12. Обновите настройки GRUB и сам образ initrd:

    
    root@kvm:/# update-grub2
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-3. 16.0-4-amd64
    Found initrd image: /boot/initrd.img-3.16.0-4-amd64
    done
    root@kvm:/#
     	   

  13. Измените пароль root для своего гостя:

    
    root@kvm:/# passwd
    Enter new UNIX password:
    Retype new UNIX password:
    passwd: password updated successfully
    root@kvm:/#
     	   

  14. Разрешите доступ к псевдо- Терминалу внутри ОС своего нового гостя:

    
    root@kvm:/# echo "pts/0" >> /etc/securetty
    root@kvm:/#
     	   

  15. Измените текущий уровень systemd на уровень
    multi-user:

    
    root@kvm:/# systemctl set-default multi-user.target
    Created symlink from /etc/systemd/system/default.target to /lib/systemd/system/multi-user.target.
    root@kvm:/#
     	   

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

    
    root@kvm:/# echo "/dev/sda2 / ext4 defaults,discard 0 0" > /etc/fstab
     	   

  17. Удалите монтирование следующих файловых систем, поскольку мы сделали их теперь используемыми:

    
    root@kvm:/# umount /proc/ /sys/ /dev/
     	   

  18. Выйдите из своей среды chroot:

    
    root@kvm:/# exit
    exit
    root@kvm:~#
     	   

  19. Установите GRUB в своём корневом разделе того блочного устройства, которое связано с образом raw:

    
    root@kvm:~# grub-install /dev/nbd0 --root-directory=/mnt --modules="biosdisk part_msdos" --force
    Installing for i386-pc platform. 
    grub-install: warning: this msdos-style partition label has no post-MBR gap; embedding won't be possible.
    grub-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
    Installation finished. No error reported.
    root@kvm:~#
     	   

  20. Обновите свой файл настроек GRUB чтобы от отражал правильное блочное устройство для данного образа
    гостя:

    
    root@kvm:~# sed -i 's/nbd0p2/sda2/g' /mnt/boot/grub/grub.cfg
    root@kvm:~#
     	   

  21. Размонтируйте своё устройство nbd0:

    
    root@kvm:~# umount /mnt
    root@kvm:~#
     	   

  22. Отсоедините устройство nbd0 от данного образа raw:

    
    root@kvm:~# qemu-nbd --disconnect /dev/nbd0
    /dev/nbd0 disconnected
    root@kvm:~#
     	   


Как это работает…

В предыдущем разделе много чего произошло, поэтому давайте сразу перейдём к командам и обсудим слегка
подробнее то, что в точности произошло и почему.

На 1 шаге мы смонтировали свой корневой раздел, который мы создали ранее в своём устройстве
/dev/nbd0p2 в /mnt, таким
образом, мы можем его применять. Раз монтирование выполнено, на шаге 2 мы устанавливаем весь дистрибутив Debian
в этом устройстве применяя в качестве целевой данную точку монтирования.

Чтобы установить необходимый начальный загрузчик GRUB в данном корневом разделе, мы привязываем и монтируем
свой каталог /dev из имеющейся файловой системы хоста в файловую систему
выстраиваемого образа в /mnt на шаге 4.

Затем на шаге 6 мы применяем инструмент chroot чтобы изменить пространство имён своего каталога с тем, чтобы
оно было /mnt, поэтому мы можем выполнять операции так, как будто мы
напрямую находимся в этой новой ОС.

На шаге 8 мы монтируем виртуальные файловые системы proc и
sysfs внутри данного образа, так как их ожидает начальный загрузчик
GRUB.

На шаге 9 мы продолжаем установку исходного кода своего ядра и инструментов GRUB в подготовке к установке
самого начального загрузчика в его загрузочный раздел и на шаге 10 мы устанавливаем этот начальный
загрузчик.

На шаге 11 были созданы сами файлы настройки GRUB и был обновлён имеющийся образ загрузочного ramdisk.

На шагах 12, 13 и 14 мы изменили установленный пароль root и убедились что мы получаем доступ к певдо- Терминалу,
поэтому мы сможем зарегистрироваться в этой ВМ позже, а также изменили текущий уровень исполнения с определённого
по умолчанию графического интерфейса на многопользовательский.

Так как имеющийся файл fstab сразу после установки ОС Debian в данном образе является пустым, мы добавили точку
монтирования своего корня, иначе наша ВМ не будет иметь возможности запуска. Это было осуществлено на шаге 15.

На шагах 16 и 17 мы выполнили некоторую очистку размонтировав смонтированные нами ранее необходимые файловые
системы и вышли из своей среды chroot.

Вернувшись обратно в файловую систему своего хоста на шаге 18, мы установили GRUB в своём устройстве
nbd0 определив необходимое положение монтирования данного образа.

На шаге 19 мы обновили имя устройства настройки GRUB на sda2,
так как это именно то имя, которое будет возникать внутри данной виртуальной машины после её запуска. Само имя
nbd0p2 присутствует только пока мы вынуждены поддерживать связь между своим
образом raw и соответствующим сетевым блочным устройством ОС нашего хоста. С точки зрения самой ВМ, именно второй
раздел внутри данного созданного нами образа по умолчанию имеет имя sda2.

И, наконец, на шагах 20 и 21 мы выполняем некоторую очистку удаляя имеющуюся точку монтирования и отсоединяя
свой образ raw от сетевого блочного устройства nbd0.

Изменение размера образа

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


Приготовление

В данном разделе мы собираемся применять следующие инструменты:

  • qemu-img

  • losetup

  • tune2fs

  • e2fsck

  • kpartx

  • fdisk

  • resize2fs

Большая часть из этих утилит должна уже быть установлена в Ubuntu, за исключением kpartx.
Чтобы установить его, исполните следующее:


root@kvm:~# apt install kpartx
 	   

Как это сделать…

Приводимые далее шаги демонстрируют как добавить дополнительное пространство в наш образ raw, который
мы создали ранее, расширить раздел корня и изменить размер файловой системы. К окончанию данного рецепта
первоначальный размер файла образа raw должен измениться с 10 ГБ
до 20 ГБ.

  1. Получите текущий размер своего образа:

    
    root@kvm:~# qemu-img info debian.img
    image: debian.img
    file format: raw
    virtual size: 10G (10737418240 bytes)
    disk size: 848M
    root@kvm:~#
     	   

  2. Добавьте дополнительно 10 ГБ к этому образу:

    
    root@kvm:~# qemu-img resize -f raw debian.img +10GB
    Image resized.
    root@kvm:~#
     	   

    Замечание

    Имейте в виду, что не все типы образов поддерживают изменение размера. Чтобы изменить размер такого образа
    вам необходимо преобразовать его вначале в образ raw при помощи команды преобразования
    qemu-img.

  3. Проверьте новый текущий размер образа:

    
    root@kvm:~# qemu-img info debian.img
    image: debian.img
    file format: raw
    virtual size: 20G (21474836480 bytes)
    disk size: 848M
    root@kvm:~#
     	   

  4. Выведите название самого первого неиспользуемого петлевого (loop) устройства:

    
    root@kvm:~# losetup -f
    /dev/loop0
    root@kvm:~#
     	   

  5. Соотнесите самое первое неиспользуемое петлевое устройство со своим файлом raw:

    
    root@kvm:~# losetup /dev/loop1 debian.img
    root@kvm:~#
     	   

  6. Прочтите информацию данного раздела из данного связанного петлевого устройства и создайте необходимое
    соответствие устройства:

    
    root@kvm:~# kpartx -av /dev/loop1
    add map loop1p1 (252:0): 0 1024 linear 7:1 2048
    add map loop1p2 (252:1): 0 20967424 linear 7:1 4096
    root@kvm:~#
     	   

  7. Опросите новые соответствия устройства, представляющие все разделы в данном образе raw:

    
    root@kvm:~# ls -la /dev/mapper
    total 0
    drwxr-xr-x 2 root root 100 Mar 9 19:10 . 
    drwxr-xr-x 20 root root 4760 Mar 9 19:10 ..
    crw------- 1 root root 10, 236 Feb 10 23:25 control
    lrwxrwxrwx 1 root root 7 Mar 9 19:10 loop1p1
    lrwxrwxrwx 1 root root 7 Mar 9 19:10 loop1p2
    root@kvm:~#
     	   

  8. Получите какую- нибудь информацию от того корневого раздела, с которым установлено соответствие:

    
    root@kvm:~# tune2fs -l /dev/mapper/loop1p2
    tune2fs 1.42.13 (17-May-2015)
    Filesystem volume name: <none>
    Last mounted on: /
    Filesystem UUID: 96a73752-489a-435c-8aa0-8c5d1aba3e5f
    Filesystem magic number: 0xEF53
    Filesystem revision #: 1 (dynamic)
    Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize Filesystem flags: signed_directory_hash
    Default mount options: user_xattr acl
    Filesystem state: clean
    Errors behavior: Continue
    Filesystem OS type: Linux
    Inode count: 655360
    Block count: 2620928
    Reserved block count: 131046
    Free blocks: 2362078
    Free inodes: 634148
    First block: 0
    Block size: 4096
    Fragment size: 4096
    Reserved GDT blocks: 639
    Blocks per group: 32768
    Fragments per group: 32768
    Inodes per group: 8192
    Inode blocks per group: 512
    Flex block group size: 16
    Filesystem created: Fri Feb 10 23:29:01 2017
    Last mount time: Thu Mar 9 19:09:25 2017
    Last write time: Thu Mar 9 19:08:23 2017
    Mount count: 12
    Maximum mount count: -1
    Last checked: Fri Feb 10 23:29:01 2017
    Check interval: 0 (<none>)
    Lifetime writes: 1621 MB
    Reserved blocks uid: 0 (user root)
    Reserved blocks gid: 0 (group root)
    First inode: 11
    Inode size: 256
    Required extra isize: 28
    Desired extra isize: 28
    Journal inode: 8
    Default directory hash: half_md4
    Directory Hash Seed: f101cccc-944e-4773-8644-91ebf4bd4f2d
    Journal backup: inode blocks
    root@kvm:~#
     	   

  9. Проверьте данную файловую систему в своём корневом разделе отображаемого устройства:

    
    root@kvm:~# e2fsck /dev/mapper/loop1p2
    e2fsck 1. has_journal /dev/mapper/loop1p2
    tune2fs 1.42.13 (17-May-2015)
    root@kvm:~#
     	   

  10. Убедитесь что журнал был удалён:

    
    root@kvm:~# tune2fs -l /dev/mapper/loop1p2 | grep "features"
    Filesystem features: ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
    root@kvm:~#
     	   

  11. Удалите этот отображаемый раздел:

    
    root@kvm:~# kpartx -dv /dev/loop1
    del devmap : loop1p2
    del devmap : loop1p1
    root@kvm:~#
     	   

  12. Отсоедините данное петлевое устройство от своего образа:

    
    root@kvm:~# losetup -d /dev/loop1
    root@kvm:~#
     	   

  13. Сопоставьте данный образ raw со своим сетевым блочным устройством:

    
    root@kvm:~# qemu-nbd --format=raw --connect=/dev/nbd0 debian.img root@kv
     	   

  14. При помощи fdisk выведите перечень всех доступных разделов,
    затем удалите свой корневой раздел, повторно создайте его и запишите эти изменения:

    
    root@kvm:~# fdisk /dev/nbd0
    
    Command (m for help): p
    
    Disk /dev/nbd0: 21.5 GB, 21474836480 bytes
    255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x00000000
    
     Device Boot Start End Blocks Id System
    /dev/nbd0p1 1 16450559 8225279+ 82 Linux swap / Solaris
    /dev/nbd0p2 16450560 20964824 2257132+ 83 Linux
    
    Command (m for help): d
    Partition number (1-4): 2
    
    Command (m for help): n
    Partition type:
     p primary (1 primary, 0 extended, 3 free)
     e extended
    Select (default p): p
    Partition number (1-4, default 2): 2
    First sector (16450560-41943039, default 16450560):
    Using default value 16450560
    Last sector, +sectors or +size{K,M,G} (16450560-41943039, default 41943039):
    Using default value 41943039
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table. 
    Syncing disks.
    root@kvm:~#
     	   

  15. Соотнесите первое неиспользуемое петлевое устройство со своим файлом образа кфц, как мы это делали на
    шаге 5:

    
    root@kvm:~# losetup /dev/loop1 debian.img
     	   

  16. Прочитайте информацию о данном разделе из сопоставленного петлевого устройства и создайте отображение
    этого устройства:

    
    root@kvm:~# kpartx -av /dev/loop1
    add map loop1p1 (252:2): 0 1024 linear 7:1 2048
    add map loop1p2 (252:3): 0 41938944 linear 7:1 4096
    root@kvm:~#
     	   

  17. После того как разбиение завершено, осуществите проверку файловой системы:

    
    root@kvm:~# e2fsck -f /dev/mapper/loop1p2
    e2fsck 1.42.13 (17-May-2015)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    /dev/mapper/loop1p2: 21212/655360 files (0.2% non-contiguous), 226115/2620928 blocks
    root@kvm:~#
     	   

  18. Измените размер файловой системы в этом корневом разделе данного отображаемого устройства:

    
    root@kvm:~# resize2fs /dev/nbd0p2
    resize2fs 1.42.13 (17-May-2015)
    Resizing the filesystem on /dev/mapper/loop1p2 to 5242368 (4k) blocks.
    The filesystem on /dev/mapper/loop1p2 is now 5242368 (4k) blocks long.
    root@kvm:~#
     	   

  19. Создайте необходимый журнал файловой системы, так как мы удалили его ранее:

    
    root@kvm:~# tune2fs -j /dev/mapper/loop1p2
    tune2fs 1.42.13 (17-May-2015)
    Creating journal inode: done
    root@kvm:~#
     	   

  20. Удалите отображение данного устройства:

    
    New-VM -Name VM01 -Generation 2root@kvm:~# kpartx -dv /dev/loop1
    del devmap : loop1p2
    del devmap : loop1p1
    root@kvm:~# losetup -d /dev/loop1
    root@kvm:~#
     	   

w3.org/1999/xhtml»>
Как это работает…

Изменение размера для ВМ может быть каким- то образом связано с тем, что мы видели во всех шагах
предыдущего раздела. Всё может усложниться если в одном и том же образе имеются несколько разделов Linux, тем
более, если мы применяем LVM
(Logical Volume Management). Давайте пройдём
пошагово по всем выполненным нами ранее командам и более подробно объясним почему мы их выполнили и зачем
мы это сделали.

На шаге 1 мы подтвердили значение текущего размера своего образа, которое составляет 10 ГБ.

На шаге 2 мы добавили 10 ГБ в самый конец данного образа и удостоверились, что в этом новом размере
образа на шаге 3.

Аннулируем тот образ, который мы построили в предыдущих рецептах и который содержал два раздела, подкачки
и корня. Нам нужен способ работать с ними по отдельности. В частности, мы бы желали выделить то дополнительное
пространство, которое мы добавили на шаге 2, в свой корневой раздел. Для того чтобы сделать это, нам необходимо
выставить его как некое блочное устройство, с которым мы просто сможем манипулировать стандартными утилитами
диска и файловой системы. Мы осуществляем это на шаге 5 с применением команды
losetup, что в результате делает соответствие между нашим образом и
неким новым блочным устройством с именем /dev/loop1. На шаге 6 мы
выставляем два индивидуальных раздела как два отображения новых устройств. Причём
/dev/mapper/loop1p2 является тем корневым разделом, к которому
мы бы хотели добавить в конец всё неиспользуемое дисковое пространство.

Прежде чем мы сможем изменить размер отведённый под раздел в своём петлевом устройстве, нам необходимо
проверить целостность его файловой системы и именно это мы выполняем на шаге9. Так как мы применяем файловую
систему с журналом, нам необходимо удалить имеющийся журнал, прежде чем мы изменим размер. Мы выполняем это на
шаге 10 и убеждаемся что наш атрибут has_journal не отображается
после выполнения на шаге 11 команды tune2fs.

Теперь нам необходимо работать напрямую с основным блочным устройством вместо работы с индивидуальными
разделами. Мы удаляем установленное соответствие на шагах 12 и 13 и ассоциируем некое новое блочное устройство
со своим файлом образа при помощи команды qemu-nbd на шаге 14. Наше новое
блочное устройство /dev/nbd0 теперь представляет целиком весь диск данной
гостевой ВМ и он напрямую отображает то, что находится внутри данного образа raw. Мы можем применять это
блочное устройство в точности так же как другой обычный диск и, что ещё более важно, можем применять инструмент,
подобный fdisk для его опроса и манипуляций с расположенными внутри него
разделами.

На шаге 15 мы применяем утилиту fdisk для удаления своего корневого
раздела и его повторного создания. Это не разрушает никакие данные файловой системы, однако изменяет её
метаданные, выделяя то дополнительное пространство, которое мы добавили ранее как часть своего корневого
раздела.

Теепрь, когда данное блочное устройство имеет всё выделенной нашему корневому разделу дисковое пространство,
нам необходимо расширить саму файловую систему, которая располагается поверх него. Мы делаем это вначале
повторно создавая индивидуальное отображение раздела, как мы это делали раньше, чтобы выставить свой корневой
раздел напрямую так, чтобы мы могли могли вновь манипулировать им. Мы делаем это на шагах 16 и 17.

На шагах 18 и 19 мы проверяем целостность своей корневой файловой системы, затем мы изменяем её размер до
максимального значения доступного дискового пространства в том корневом разделе, в котором она расположена.

Наконец, на шаге 20, мы вновь удаляем имеющееся отображение. Теперь данный образ, а именно корневой раздел
внутри данного образа, а также его файловая система EXT4 поверх данного раздела Linux изменены в размере до
20 ГБ.

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

Применение предварительно подготовленных образов

В рецепте Установка пользовательской ОС в образ при
помощи debootstrap мы увидели как применять команду debootstrap
для установки Debian в построенный нами образ. Большинство вендоров Linux предоставляют уже построенные
образы своих дистрибутивов для различных архитектур. Устанавливаемые образы также доступны для ручной
установки необходимых гостевых ОС. В данном рецепте мы собираемся продемонстрировать как получить и
опробовать образы CentOS и Debian, которые уже были построены. В следующем рецепте мы собираемся показать
как запускать QEMU/KVM экземпляры с применением тех же самых образов.


Приготовление

Для данного рецепта нам понадобится QEMU, установленный в ОС нашего хоста. Для получения инструкций о том,
как устанавливать QEMU, пожалуйста, воспользуйтесь рецептом Установка и настройка QEMU в этой главе. Нам также потребуется утилита
wget для загрузки всех образов с наших восходящих общедоступных
репозиториев.


Как это сделать…

Чтобы получить образы Debian Wheezy для использования c QEMU и KVM выполните следующее:

  1. Загрузите необходимый образ, воспользовавшись wget:

    
    root@kvm:~tmp# wget https://people. debian.org/~aurel32/qemu/amd64/debian_wheezy_amd64_standard.qcow2
    --2017-03-09 22:07:20-- 2 Resolving people.debian.org (people.debian.org)... 2001:41c8:1000:21::21:30, 5.153.231.30 Connecting to people.debian.org (people.debian.org)|2001:41c8:1000:21::21:30|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 267064832 (255M) Saving to: ‘debian_wheezy_amd64_standard.qcow2’ debian_wheezy_amd64_standard.qcow2 100% . [===================================>] 254.69M 35.8MB/s in 8.3s 2017-03-09 22:07:29 (30.9 MB/s) - ‘debian_wheezy_amd64_standard.qcow2’ saved [267064832/267064832]
    root@kvm:~#
     	   

  2. Проинспектируйте тип этого образа:

    
    root@kvm:~# qemu-img info debian_wheezy_amd64_standard.qcow2
    image: debian_wheezy_amd64_standard.qcow2
    file format: qcow2
    virtual size: 25G (26843545600 bytes)
    disk size: 261M
    cluster_size: 65536
    Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    root@kvm:~#
     	   

Чтобы получить образы CentOS выполните следующее:

  1. Загрузите необходимый образ, воспользовавшись wget:

    
    root@kvm:/tmp# wget https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2 --2017-03-09 22:11:34-- https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2 Resolving cloud.centos.org (cloud.centos.org)... 2604:4500::2a8a, 136.243.75.209 Connecting to cloud.centos.org (cloud.centos.org)|2604:4500::2a8a|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1361182720 (1.3G) Saving to: ‘CentOS-7-x86_64-GenericCloud.qcow2’
    CentOS-7-x86_64-GenericCloud.qcow2 100%[=========================================>] 1.27G 22.3MB/s in 54s
    2017-03-09 22:12:29 (24. 0 MB/s) - ‘CentOS-7-x86_64-GenericCloud.qcow2’ saved [1361182720/1361182720]
    FINISHED --2017-03-09 22:12:29-- Total wall clock time: 54s Downloaded: 1 files, 1.3G in 54s (24.0 MB/s)
    root@kvm:/tmp# 	   

  2. Проинспектируйте тип полученного образа:

    
    root@kvm:~# qemu-img info CentOS-7-x86_64-GenericCloud.qcow2
    image: CentOS-7-x86_64-GenericCloud.qcow2
    file format: qcow2
    virtual size: 8.0G (8589934592 bytes)
    disk size: 1.3G
    cluster_size: 65536
    Format specific information:
    compat: 0.10
    refcount bits: 16
    root@kvm:~#
     	   


Как это работает…

Имеется множество общедоступных репозиториев во всемирном Интернете, которые предоставляют образы
различных типов, причём наиболее распространённым является qcow2
для применения с QEMU/ KVM. В предыдущем разделе мы воспользовались официальным репозиторием CentOS для
получения необходимого образа и ещё одним другим, содержащим предварительно построенные образы для
Debian.

Оба образа представлены в формате qcow2, что подтверждено на
шаге 2.


Также ознакомьтесь…

До сих пор мы только видели как строить, испытывать, манипулировать и загружать образы. Ы следующем
рецепте мы собираемся сосредоточиться на том, как на самом деле применять образы для запуска экземпляров
QEMU/ KVM/


Дополнительно

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

Выполнение ВМ при помощи qemu-system-*

В данном рецепте мы собираемся продемонстрировать как запускать виртуальные машины при помощи QEMU.
QEMU предоставляет исполняемые файлы, которые могут эмулировать различные архитектуры WGE с применением
либо пользовательских, либо предварительно построенных образов для необходимых гостевых ОС.

Если вы выполнили рецепт рецептом Установка и
настройка QEMU, вы уже должны иметь хост который содержит следующие исполняемые файлы:


root@kvm:~# ls -la /usr/bin/qemu-system-*
-rwxr-xr-x 1 root root 8868848 Jan 25 12:49 /usr/bin/qemu-system-aarch64
-rwxr-xr-x 1 root root 7020544 Jan 25 12:49 /usr/bin/qemu-system-alpha
-rwxr-xr-x 1 root root 8700784 Jan 25 12:49 /usr/bin/qemu-system-arm
-rwxr-xr-x 1 root root 3671488 Jan 25 12:49 /usr/bin/qemu-system-cris
-rwxr-xr-x 1 root root 8363680 Jan 25 12:49 /usr/bin/qemu-system-i386
-rwxr-xr-x 1 root root 3636640 Jan 25 12:49 /usr/bin/qemu-system-lm32
-rwxr-xr-x 1 root root 6982528 Jan 25 12:49 /usr/bin/qemu-system-m68k
-rwxr-xr-x 1 root root 3652224 Jan 25 12:49 /usr/bin/qemu-system-microblaze
-rwxr-xr-x 1 root root 3652224 Jan 25 12:49 /usr/bin/qemu-system-microblazeel
-rwxr-xr-x 1 root root 8132992 Jan 25 12:49 /usr/bin/qemu-system-mips
-rwxr-xr-x 1 root root 8356672 Jan 25 12:49 /usr/bin/qemu-system-mips64
-rwxr-xr-x 1 root root 8374336 Jan 25 12:49 /usr/bin/qemu-system-mips64el
-rwxr-xr-x 1 root root 8128896 Jan 25 12:49 /usr/bin/qemu-system-mipsel
-rwxr-xr-x 1 root root 3578592 Jan 25 12:49 /usr/bin/qemu-system-moxie
-rwxr-xr-x 1 root root 3570848 Jan 25 12:49 /usr/bin/qemu-system-or32
-rwxr-xr-x 1 root root 8701760 Jan 25 12:49 /usr/bin/qemu-system-ppc
-rwxr-xr-x 1 root root 9048000 Jan 25 12:49 /usr/bin/qemu-system-ppc64
lrwxrwxrwx 1 root root 17 Jan 25 12:49 /usr/bin/qemu-system-ppc64le -> qemu-system-ppc64
-rwxr-xr-x 1 root root 8463680 Jan 25 12:49 /usr/bin/qemu-system-ppcemb
-rwxr-xr-x 1 root root 6894528 Jan 25 12:49 /usr/bin/qemu-system-sh5
-rwxr-xr-x 1 root root 6898624 Jan 25 12:49 /usr/bin/qemu-system-sh5eb
-rwxr-xr-x 1 root root 4032000 Jan 25 12:49 /usr/bin/qemu-system-sparc
-rwxr-xr-x 1 root root 7201696 Jan 25 12:49 /usr/bin/qemu-system-sparc64
-rwxr-xr-x 1 root root 3704704 Jan 25 12:49 /usr/bin/qemu-system-tricore
-rwxr-xr-x 1 root root 3554912 Jan 25 12:49 /usr/bin/qemu-system-unicore32
-rwxr-xr-x 1 root root 8418656 Jan 25 12:49 /usr/bin/qemu-system-x86_64
-rwxr-xr-x 1 root root 3653024 Jan 25 12:49 /usr/bin/qemu-system-xtensa
-rwxr-xr-x 1 root root 3642752 Jan 25 12:49 /usr/bin/qemu-system-xtensaeb
root@kvm:~#
 	   

Каждая команда способна запустить экземпляр с эмуляцией QEMU для определённой архитектуры ЦПУ. Для данного
рецепта мы собираемся воспользоваться утилитой qemu-system-x86_64 .


Приготовление

Для завершения данного рецепта вам необходимо следующее:

Давайте взглянем на то какие архитектуры ЦПУ поддерживает QEMU в данной системе хоста:


root@kvm:~# qemu-system-x86_64 --cpu help
x86 qemu64 QEMU Virtual CPU version 2.5+
x86 phenom AMD Phenom(tm) 9550 Quad-Core Processor
x86 core2duo Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz
x86 kvm64 Common KVM processor
x86 qemu32 QEMU Virtual CPU version 2.5+
x86 kvm32 Common 32-bit KVM processor
x86 coreduo Genuine Intel(R) CPU T2600 @ 2.16GHz
x86 486
x86 pentium
x86 pentium2
x86 pentium3
x86 athlon QEMU Virtual CPU version 2.5+
x86 n270 Intel(R) Atom(TM) CPU N270 @ 1.60GHz
x86 Conroe Intel Celeron_4x0 (Conroe/Merom Class Core 2)
x86 Penryn Intel Core 2 Duo P9xxx (Penryn Class Core 2)
x86 Nehalem Intel Core i7 9xx (Nehalem Class Core i7)
x86 Westmere Westmere E56xx/L56xx/X56xx (Nehalem-C)
x86 SandyBridge Intel Xeon E312xx (Sandy Bridge)
x86 IvyBridge Intel Xeon E3-12xx v2 (Ivy Bridge)
x86 Haswell-noTSX Intel Core Processor (Haswell, no TSX)
x86 Haswell Intel Core Processor (Haswell)
x86 Broadwell-noTSX Intel Core Processor (Broadwell, no TSX)
x86 Broadwell Intel Core Processor (Broadwell)
x86 Opteron_G1 AMD Opteron 240 (Gen 1 Class Opteron)
x86 Opteron_G2 AMD Opteron 22xx (Gen 2 Class Opteron)
x86 Opteron_G3 AMD Opteron 23xx (Gen 3 Class Opteron)
x86 Opteron_G4 AMD Opteron 62xx class CPU
x86 Opteron_G5 AMD Opteron 63xx class CPU
x86 host KVM processor with all supported host features (only available in KVM mode)

Recognized CPUID flags:
fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 pn clflush ds acpi mmx fxsr sse sse2 ss ht tm ia64 pbe
pni|sse3 pclmulqdq|pclmuldq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cid fma cx16 xtpr pdcm pcid dca sse4. 1|sse4_1 sse4.2|sse4_2 x2apic movbe popcnt tsc-deadline aes xsave osxsave avx f16c rdrand hypervisor
fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f rdseed adx smap pcommit clflushopt clwb avx512pf avx512er avx512cd
syscall nx|xd mmxext fxsr_opt|ffxsr pdpe1gb rdtscp lm|i64 3dnowext 3dnow
lahf_lm cmp_legacy svm extapic cr8legacy abm sse4a misalignsse 3dnowprefetch osvw ibs xop skinit wdt lwp fma4 tce nodeid_msr tbm topoext perfctr_core perfctr_nb
invtsc
xstore xstore-en xcrypt xcrypt-en ace2 ace2-en phe phe-en pmm pmm-en
kvmclock kvm_nopiodelay kvm_mmu kvmclock kvm_asyncpf kvm_steal_time kvm_pv_eoi kvm_pv_unhalt kvmclock-stable-bit
npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pause_filter pfthreshold
xsaveopt xsavec xgetbv1 xsaves
arat
root@kvm:~#
 	   

Из предыдущего вывода мы можем увидеть полный список тех ЦПУ, которые могут передаваться в параметрах
через флаг -cpu для эмуляции этого типа ЦПУ внутри нашей виртуальной
машины.


Как это сделать…

Чтобы запустить некую новую виртуальную машину при помощи утилиты qemu-system
исполните такие шаги:

  1. Запустите некую новую виртуальную машину QEMU с использованием архитектуры ЦПУ
    x86_64:

    
    root@kvm:~# qemu-system-x86_64 -name debian -vnc 146.20.141.254:0 -cpu Nehalem -m 1024 -drive format=raw,index=2,file=debian.img -daemonize
    root@kvm:~#
     	   

  2. Убедитесь что данный экземпляр исполняется:

    
    root@kvm:~# pgrep -lfa qemu
    3527 qemu-system-x86_64 -name debian -vnc 146.20.141.254:0 -m 1024 -drive format=raw,index=2,file=debian.img -daemonize
    root@kvm:~#
     	   

  3. Завершите экземпляр Debian QEMU:

    
    root@kvm:~# pkill qemu
    root@kvm:~#
     	   

  4. Запустите новый экземпляр с применением предварительно построенного образа CentOS:

    
    root@kvm:~# qemu-system-x86_64 -vnc 146. 20.141.254:0 -m 1024 -hda CentOS-7-x86_64-GenericCloud.qcow2 -daemonize
    root@kvm:~#
     	   

  5. Убедитесь что этот экземпляр исполняется:

    
    root@kvm:~# pgrep -lfa qemu
    3546 qemu-system-x86_64 -vnc 146.20.141.254:0 -m 1024 -hda CentOS-7-x86_64-GenericCloud.qcow2 -daemonize
    root@kvm:~#
     	   

  6. Завершите экземпляр CentOS QEMU:

    
    root@kvm:~# pkill qemu
    root@kvm:~#
     	   

    Замечание

    Не забудьте заменить соответствующие IP адреса в параметре -vnc
    теми, которые имеются у вашей машины хоста.



    Как это работает…

    Как запустить некую виртуальную машину при помощи QEMU/ KVM зависит в основном от имеющегося типа образа
    и того, как этот раздел структурирован внутри данного образа.

    Мы воспользовались двумя разными типами образа с различными схемами разделов чтобы продемонстрировать
    это понятие.

    На шаге 1 мы применили команду qemu-system-x86_64 для эмуляции
    некоторой архитектуры ЦПУ x86_64, в частности, мы передали флаг
    -cpu Nehalem, эмулирующий модель определённую модель ЦПУ Nehalem.
    Флагом -vnc мы передали в качестве параметра конкретный адрес IP
    своего сервера. Это запустит какой- то сервер VNC в данной ВМ с тем, чтобы мы могли позже воспользоваться
    неким клиентом VNC для соединения с данным экземпляром QEMU. Мы определили значение объёма памяти, которая
    должна быть выделена данному экземпляру, в данном случае, 1 ГБ, при помощи флага -m.
    Мы проинструктировали QEMU, что мы собираемся использовать некий образ raw посредством опции
    format=raw, а также название и расположение реального образа через
    параметр file=debian.img.

    Напомним, что этот образ содержит два раздела, причём второй раздел содержит корневую файловую систему,
    в которой содержится начальный загрузчик. Очень важно не забывать это, так как нам необходимо определить
    какой индекс раздела следует загужать нашей гостевой ОС. Мы делаем это с помощью флага
    index=2. Наконец, мы передаём параметр
    -daemonize для установки процесса QEMU в фоновый режим.

    На шаге 4 мы запускаем другой экземпляр QEMU, в этот раз применив образ CentOS
    qcow2, который мы загрузили ранее. Мы не должны определять из какого
    раздела нам нужно загружаться в нём на этот раз, так как большинство предварительно построенных образов
    используют первый раздел, или имеют всего один раздел. Мы также применяем флаг
    -hda вместо параметра -drive,
    просто чтобы продемонстрировать что оба варианта можно применять с одним и тем же результатом. Этот флаг
    -hda сообщает QEMU самый первый диск для данного экземпляра, который
    следует загрузить с того имени файла, которое следует за ним.

Запуск QEMU при помощи KVM

В данном рецепте мы собираемся запустить некуб виртуальную машину QEMU с ускорением KVM.
KVM
(Kernel-based Virtual Machine) является полной
технологией виртуализации для архитектур ЦПУ, которые поддерживают расширения виртуализации. Для процессоров
на основе Intel это именно Intel VT, а для ЦПУ AMD это аппаратное расширение AMD-V. Главными частями KVM
являются два загружаемых модуля ядра с именами, первый kvm. ko, который
предоставляет всю основную функциональность виртуализации, а также второй модуль ядра, который определяется
процессором, а именно kvm-intel.ko и
kvm-amd.ko для двух основных производителей ЦПУ.

QEMU яляется определённым компонентом пользовательского пространства для создания виртуальных машин, тогда
как KVM располагается в пространстве ядра. Если вы выполняли компиляцию в рецепте
Выполнение ВМ при помощи qemu-system-*, вы должны были
заметить, что основная разница между исполнением виртуальной машины KVM и исполнением экземпляра QEMU
бкз ускорения состоит всего в одной опции командной строки.


Приготовление

Чтобы запустить некий экземпляр KVM, вам потребуется следующее:

Чтобы проверить поддерживает ли ваш ЦПУ виртуализацию, исполните такой код:


root@kvm:~# cat /proc/cpuinfo | egrep "vmx|svm" | uniq
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm xsaveopt cqm_llc cqm_occup_llc dtherm arat pln pts
root@kvm:~#
 	   

Наличие соответствующего флага vmx (для Intel) или
svm (для AMD) является индикатором того, что ваш ЦПУ поддерживает
все необходимые расширения виртуализации.

Замечание

Данный флаг из вывода команды cpuinfo просто означает, что ваш
процессор поддерживает виртуализацию, однако убедитесь что данное свойство включено в BIOS
{Прим. пер.: FirmWare} вашей системы, в противном случае данный
экземпляр KVM откажет в запуске.

Чтобы вручную загрузить необходимый модуль KVM и гарантировать что он был загружен, выполните следующий
код:


root@kvm:~# modprobe kvm
root@kvm:~# lsmod | grep kvm
kvm 455843 0
root@kvm:~#
 	   

Как это сделать…

Для запуска некоторого экземпляра KVM, проверки того что он запущен и в конце концов его останова
исполните следующее:

  1. Запустите некий экземпляр QEMU с поддержкой KVM:

    
    root@kvm:~# qemu-system-x86_64 -name debian -vnc 146.20.141.254:0 -m 1024 -drive format=raw,index=2,file=debian.img -enable-kvm -daemonize
    root@kvm:~#
     	   

  2. Убедитесь что это экземпляр работает:

    
    root@kvm:~# pgrep -lfa qemu
    4895 qemu-system-x86_64 -name debian -vnc 146.20.141.254:0 -m 1024 -drive format=raw,index=2,file=debian.img -enable-kvm -daemonize
    root@kvm:~#
     	   

    Остановите это экземпляр:

    
    root@kvm:~# pkill qemu
    root@kvm:~#
     	   


Как это работает…

Чтобы запустить виртуальную машину QEMU/KVM, всё что нам требуется сделать в отличии от того, что мы
выполняли в нашем рецепте Установка и настройка QEMU,
это передача флага -enable-kvm в команде
qemu-system-x86_64.

На шаге 1 мы определили некоторое имя для своей ВМ с помощью флага
-name, предоставили IP адрес физического хоста в флаг
-vnc , включили доступ VNC для данного виртуального экземпляра,
выделили 1 ГБ памяти в флаге -m, определили тот раздел, где размещён
начальный загрузчик с помощью параметра index=2, задали формат
образа и, наконец, мы разрешили аппаратное ускорение KVM воспользовавшись параметром
-enable-kvm и демонизировали этот процесс {Прим.
пер.: перевели в фоновый режим
} флагом -daemonize.

На шаге 2 мы убедились, что этот экземпляр исполняется, а на 3 шаге прекратили его.


Также ознакомьтесь…

В качестве альтернативы исполнению напрямую команд qemu-system-*,
в системе Ubuntu имеется пакет qemu-kvm, который предоставляет
все исполняемые файлы /usr/bin/kvm.
Эти файлы обёрнуты в команду qemu-system-x86_64,
а она передаёт им параметр -enable-kvm автоматически.

Чтобы установить этот пакет и вместо всего воспользоваться командой
kvm , исполните следующее:


root@kvm:~# apt install qemu-kvm
...
root@kvm:~# kvm -name debian -vnc 146.20.141.254:0 -cpu Nehalem -m 1024 -drive format=raw,index=2,file=debian.img -daemonize
root@kvm:~# pgrep -lfa qemu
25343 qemu-system-x86_64 -enable-kvm -name debian -vnc 146.20.141.254:0 -cpu Nehalem -m 1024 -drive format=raw,index=2,file=debian.img -daemonize
root@kvm:~#
 	   

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

Подключение к исполняемому экземпляру при помощи VNC

В данном рецепте мы собираемся подключиться к некоторому исполняемому экземпляру KVM с использованием
клиента VNC. После соединения мы намереваемся зарегистрироваться и проверить тип ЦПУ и доступную память
для этого экземпляра. Мы уже видели как запускать экземпляры QEMU/KVM с поддержкой VNC в предыдущих рецептах,
но мы собираемся сделать это снова, на случай если вы читаете книгу от корки до корки.

VNC
(Virtual Network Computing) применяет
пртокол RFB
(Remote Frame Buffer) для удалённого
управления другой системой. Он передаёт все экраны с такого удалённого компьютера обратно своему клиенту,
делая доступным полное управление клавиатурой и мышью.

Имеется множество различных клиентов VNC и реализаций сервера, однако для данного рецепта мы собираемся
применять свободно распространяемую версию, именуемую цыплёнком VNC для macOS. Вы можете загрузить этого
клиента с https://sourceforge.net/projects/cotvnc/.


Приготовление

Чтобы исполнить данный рецепт, вам понадобится следующее:


Как это сделать…
  1. Запустите экземпляр qemu с KVM ускорением:

    
    root@kvm:~# qemu-system-x86_64 -name debian -vnc 146.20.141.254:0 -cpu Nehalem -m 1024 -drive format=raw,index=2,file=debian.img -daemonize
    root@kvm:~#
     	   

  2. Убедитесь что этот экземпляр исполняется:

    
    root@kvm:~# pgrep -lfa qemu
    4987 qemu-system-x86_64 -name debian -vnc 146.20.141.254:0 -cpu Nehalem -m 1024 -drive format=raw,index=2,file=debian.img -daemonize
    root@kvm:~#
     	   

  3. Запустите какого- то клиента VNC и подключите его к серверу VNC по настроенным на шаге 1 IP адресу и
    порту отображения:


  4. Зарегистрируйтесь на нужном вам экземпляре под пользователем root, затем проверьте тип ЦПУ и доступную
    память, как это показано здесь:


w3.org/1999/xhtml»>
Как это работает…

На шаге 1 мы запускаем новй экземпляр QEMU с ускорением KVM и включаем сервер VNC в нём с определёнными
IP адресом и потром дисплея. Мы определили объём доступной памяти и название данной модели ЦПУ.

На шаге 4 мы регистрируемся в этом экземпляре применяя пользователя root и тот пароль, который мы
создали при построении данного образа, затем получаем необходимую информацию ЦПУ исполнив команду
lscpu. От метим, что название модели ЦПУ соответствует той, что мы
определяем во флаге -cpu при запуске данной виртуальной машины.
Далее мы проверяем выделение памяти при помощи команды free,
которая также соответствует ранее определённому параметром -m
значению.

Глава 3. Построение сетей KVM при помощи libvirt

В этой главе мы намерены рассмотреть такие вопросы:

  • Мост Linux

  • Open vSwitch

  • Настройка сетевой среды пересылки NAT

  • Настройка сетевой среды с мостом

  • Настройка сквозной сетевой среды PCIe

  • Манипулирование интерфесами сетевой среды

В libvirt мы можем определять различные типы сетевых сред для наших гостевых KVM при помощи уже известного нам
синтаксиса определений XML и инструментов пространства пользователя virsh
и virt-install. В этой главе мы намерены развернуть три типа сетевых сред,
изучить соответствующий сетевой формат XML и рассмотреть примеры того как определять виртуальные интерфейсы для
своих экземпляров KVM и как ими манипулировать.

Чтобы иметь возможность подключать виртуальные машины к ОС своего хоста или друг к другу, мы собираемся
воспользоваться имеющимся мостом Linux и демонами Open vSwitch
(OVS), инструментами пространства пользователя и
модулями ядра. Обе технологии построения программного моста великолепны при создании
Software-defined Networking
(SDN, программно определяемой сетевой среды) различной
сложности неким согласованным и простым в обращении образом. И мост Linux, и OVS, оба действуют как мост/ коммутатор,
к которым могут подключаться имеющиеся у наших гостевых KVM виртуальные интерфейсы.

Имея это в виду, давайте начнём узнавать подробности программных мостов в Linux.

Мост Linux является неким программно определяемым устройством 2 уровня, который предоставляет необходимую функциональность
какого- то физического устройства моста. Он способен переправлять кадры между гостевыми KVM, ОС своего хоста и виртуальными
машинами, запущенными на прочих серверах или в иных сетевых средах. Мост Linux состоит из двух компонентов —
инструмента администрирования пространства пользователя, который мы намерены применять в данном рецепте и какого- то
модуля ядра, который и выполняет всю работу по соединению воедино множества сегментов Ethernet. Каждый создаваемый нами
программный мост может иметь некое число подключённых к нему портов, где и происходит переадресация сетевого обмена в обоих
направлениях. При создании экземпляров KVM мы можем подключать их виртуальные интерфейсы, которые ассоциированы с таким
мостом, что аналогично вставке какого- то сетевого кабеля от некой NIC сервера в устройство моста/ коммутатора. Выступая в
роли устройства 2 уровня, имеющийся мост Linux работает с MAC адресами и выполняет сопровождение некоторой структуры
ядра по отслеживанию портов и ассоциированных MAC адресов в виде некоей таблицы
Content Addressable Memory
(CAM, ассоциативной памяти).

В данном рецепте мы намерены создать некий новый мост Linux и воспользоваться утилитой
brctl для манипуляций с ним.


Приготовление

В данном рецепте нам потребуется следующее:

  • Современное ядро Linux с включёнными возможностями 802.1d Ethernet.

    Для проверки того скомпилировано ли ваше ядро с такой функциональностью или выставлены ли модули ядра, исполните такие
    команды:

    
    root@kvm:~# cat /boot/config-`uname -r` | grep -i bridg
    # PC-card bridges
    CONFIG_BRIDGE_NETFILTER=y
    CONFIG_NF_TABLES_BRIDGE=m
    CONFIG_BRIDGE_NF_EBTABLES=m
    CONFIG_BRIDGE_EBT_BROUTE=m
    CONFIG_BRIDGE_EBT_T_FILTER=m
    CONFIG_BRIDGE_EBT_T_NAT=m
    CONFIG_BRIDGE_EBT_802_3=m
    CONFIG_BRIDGE_EBT_AMONG=m
    CONFIG_BRIDGE_EBT_ARP=m
    CONFIG_BRIDGE_EBT_IP=m
    CONFIG_BRIDGE_EBT_IP6=m
    CONFIG_BRIDGE_EBT_LIMIT=m
    CONFIG_BRIDGE_EBT_MARK=m
    CONFIG_BRIDGE_EBT_PKTTYPE=m
    CONFIG_BRIDGE_EBT_STP=m
    CONFIG_BRIDGE_EBT_VLAN=m
    CONFIG_BRIDGE_EBT_ARPREPLY=m
    CONFIG_BRIDGE_EBT_DNAT=m
    CONFIG_BRIDGE_EBT_MARK_T=m
    CONFIG_BRIDGE_EBT_REDIRECT=m
    CONFIG_BRIDGE_EBT_SNAT=m
    CONFIG_BRIDGE_EBT_LOG=m
    # CONFIG_BRIDGE_EBT_ULOG is not set
    CONFIG_BRIDGE_EBT_NFLOG=m
    CONFIG_BRIDGE=m
    CONFIG_BRIDGE_IGMP_SNOOPING=y
    CONFIG_BRIDGE_VLAN_FILTERING=y
    CONFIG_SSB_B43_PCI_BRIDGE=y
    CONFIG_DVB_DDBRIDGE=m
    CONFIG_EDAC_SBRIDGE=m
    # VME Bridge Drivers
    root@kvm:~#
    		

  • Собственно модуль ядра bridge.

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

    
    root@kvm:~# lsmod | grep bridge
    bridge 110925 0
    stp 12976 2 garp,bridge
    llc 14552 3 stp,garp,bridge
    root@kvm:~#
    root@kvm:~# modinfo bridge
    filename: /lib/modules/3.13.0-107-generic/kernel/net/bridge/bridge. ko
    alias: rtnl-link-bridge
    version: 2.3
    license: GPL
    srcversion: 49D4B615F0B11CA696D8623
    depends: stp,llc
    intree: Y
    vermagic: 3.13.0-107-generic SMP mod_unload modversions
    signer: Magrathea: Glacier signing key
    sig_key: E1:07:B2:8D:F0:77:39:2F:D6:2D:FD:D7:92:BF:3B:1D:BD:57:0C:D8
    sig_hashalgo: sha512
    root@kvm:~#
    		

  • Пакет bridge-utils, который предоставляет необходимые инструменты для
    создания моста Linux и манипуляции им.

  • Возможность создания новых гостей KVM при помощи libvirt или соответствующих утилит QEMU или некого имеющегося
    экземпляра KVM из наших предыдущих глав.


Как это сделать…

Чтобы создавать, перечислять и манипулировать новым мостом, выполните следующие шаги:

  1. Установите необходимый пакет моста Linux, если его ещё нет:

    
    root@kvm:~# apt install bridge-utils
     	   

  2. Постройте новый экземпляр KVM при помощи сырого образа из нашего рецепта Главы 1
    Установка пользовательской ОС в образ при помощи debootstrap
    если вы не читаете эту книгу от корки до корки:

    
    root@kvm:~# virt-install --name kvm1 --ram 1024 --disk path=/tmp/debian.img,format=raw --graphics vnc,listen=146.20.141.158 --noautoconsole --hvm --import
    
    Starting install...
    Creating domain... | 0 B 00:00
    Domain creation completed. You can restart your domain by running:
     virsh --connect qemu:///system start kvm1
    root@kvm:~#
     	   

  3. Перечислите все доступные устройства мостов:

    
    root@kvm:~# brctl show
    bridge name      bridge id             STP enabled     interfaces
    virbr0           8000. fe5400559bd6     yes             vnet0
    root@kvm:~#
     	   

  4. Выключите свой виртуальный мост, удалите его и убедитесь в его удалении:

    
    root@kvm:~# ifconfig virbr0 down
    root@kvm:~# brctl delbr virbr0
    root@kvm:~# brctl show
    bridge name bridge id STP enabled interfaces
    root@kvm:~#
     	   

  5. Создайте некий новый мост и поднимите его:

    
    root@kvm:~# brctl addbr virbr0
    root@kvm:~# brctl show
    bridge name     bridge id            STP enabled interfaces
    virbr0          8000.000000000000    no
    root@kvm:~# ifconfig virbr0 up
    root@kvm:~#
     	   

  6. Назначьте мосту некий IP адрес:

    
    root@kvm:~# ip addr add 192.168.122.1 dev virbr0
    root@kvm:~# ip addr show virbr0
    39: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
     link/ether 32:7d:3f:80:d7:c6 brd ff:ff:ff:ff:ff:ff
     inet 192.168.122.1/32 scope global virbr0
     valid_lft forever preferred_lft forever
     inet6 fe80::307d:3fff:fe80:d7c6/64 scope link
     valid_lft forever preferred_lft forever
    root@kvm:~#
     	   

  7. Перечислите все сетевые интерфейсы ОС своего хоста:

    
    root@kvm:~# ip a s | grep vnet
    38: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
    root@kvm:~#
     	   

  8. Добавьте имеющийся виртуальный интерфейс vnet0 в свой мост:

    
    root@kvm:~# brctl addif virbr0 vnet0
    root@kvm:~# brctl show virbr0
    bridge name     bridge id             STP enabled     interfaces
    virbr0          8000.fe5400559bd6     no              vnet0
    root@kvm:~#
     	   

  9. Включите в своём мосте Spanning Tree Protocol
    (STP, протокол связующего дерева):

    
    root@kvm:~# brctl stp virbr0 on
    root@kvm:~# brctl showstp virbr0
    virbr0
     bridge id 8000. fe5400559bd6
     designated root 8000.fe5400559bd6
     root port 0 path cost 0
     max age 20.00 bridge max age 20.00
     hello time 2.00 bridge hello time 2.00
     forward delay 15.00 bridge forward delay 15.00
     ageing time 300.00
     hello timer 0.26 tcn timer 0.00
     topology change timer 0.00 gc timer 90.89
     flags
    
    
    vnet0 (1)
     port id 8001 state forwarding
     designated root 8000.fe5400559bd6 path cost 100
     designated bridge 8000.fe5400559bd6 message age timer 0.00
     designated port 8001 forward delay timer 0.00
     designated cost 0 hold timer 0.00
     flags
    
    root@kvm:~#
     	   

  10. Из экземпляра KVM поднимите интерфейс, запросите IP- адрес и проверьте подключение к ОС его хоста:

    
    root@debian:~# ifconfig eth0 up
    root@debian:~# dhclient eth0
    root@debian:~# ip a s eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
     link/ether 52:54:00:55:9b:d6 brd ff:ff:ff:ff:ff:ff
     inet 192.168.122.92/24 brd 192.168.122.255 scope global eth0
     valid_lft forever preferred_lft forever
     inet6 fe80::5054:ff:fe55:9bd6/64 scope link
     valid_lft forever preferred_lft forever
    root@debian:~#
    root@debian:~# ping 192.168.122.1 -c 3
    PING 192.168.122.1 (192.168.122.1) 56(84) bytes of data.
    64 bytes from 192.168.122.1: icmp_seq=1 ttl=64 time=0.276 ms
    64 bytes from 192.168.122.1: icmp_seq=2 ttl=64 time=0.226 ms
    64 bytes from 192.168.122.1: icmp_seq=3 ttl=64 time=0.259 ms
    
    --- 192.168.122.1 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 1999ms
    rtt min/avg/max/mdev = 0.226/0.253/0.276/0.027 ms
    root@debian:~#
     	   


Как это работает…

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

  • Был создан некий новый мост Linux с теми названием и IP адресом, которые определены в файле настройки
    /etc/libvirt/qemu/networks/default. xml

  • Была запущена служба dnsmasq с какой- то конфигурацией, определённой в
    файле /var/lib/libvirt/dnsmasq/default.conf

Давайте изучим установленные по умолчанию настройки моста libvirt:


root@kvm:~# cat /etc/libvirt/qemu/networks/default.xml
<network>
 <name>default</name>
 <bridge name="virbr0"/>
 <forward/>
 <ip address="192.168.122.1" netmask="255.255.255.0">
   <dhcp>
     <range start="192.168.122.2" end="192.168.122.254"/>
   </dhcp>
 </ip>
</network>
root@kvm:~#
		

Именно эту сетевую среду по умолчанию создал для нас libvirt, определив соответствующие название моста, адрес IP и
тот диапазон IP, который используется запущенным сервером DHCP. Позднее в этой главе мы намерены обсудить более подробно
сетевую среду libvirt; тем не менее мы показали её здесь чтобы помочь вам понять откуда появились все наши адреса IP
и само название моста.

Мы можем обнаружить, что в ОС нашего хоста исполняется некий сервер DHCP и просмотреть его файл настройки с помощью
такой команды:


root@kvm:~# pgrep -lfa dnsmasq
38983 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf
root@kvm:~# cat /var/lib/libvirt/dnsmasq/default.conf
##WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
##OVERWRITTEN AND LOST. Changes to this configuration should be made using:
## virsh net-edit default
## or other application using the libvirt API.
##
## dnsmasq conf file created by libvirt
strict-order
user=libvirt-dnsmasq
pid-file=/var/run/libvirt/network/default.pid
except-interface=lo
bind-dynamic
interface=virbr0
dhcp-range=192. 168.122.2,192.168.122.254
dhcp-no-override
dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases
dhcp-lease-max=253
dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
root@kvm:~#
		

В приведённом выше файле настроек отметим как устанавливается соответствие диапазона IP адресов для имеющейся службы
DHCP и самого названия нашего виртуального моста, которые настроены в файле сетевой среды libvirt установок по умолчанию,
который мы рассматривали выше.

Имея всё это в виду, давайте пройдём по всем выполненным нами ранее шагам.

На шаге 1 мы установили инструментарий пространства пользователя brctl, который
мы будем применять для создания, настройки и инспектирования конфигурации своего моста Linux в своём ядре Linux.

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

На шаге 3 мы вызвали свою утилиту bridge для перечисления всех доступных
устройств моста. Из полученного вывода мы можем обнаружить что в настоящий момент у нас имеется один мост с названием
virbr0, который был автоматически создан libvirt. Отметим, что в колонке
интерфейса мы можем видеть интерфейс vnet0. Именно эта виртуальная NIC выставляется
в ОС нащего хоста при запуске нами соответствующего экземпляра KVM. Это означает, что наша виртуальная машина подключена
к мосту своего хоста.

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

На шаге 5 мы повторно создаём необходимый мост и опять поднимаем его. Мы делаем это чтобы показать шаги, необходимые
при создании какого- то нового моста.

На шаге 6 мы повторно назначаем тот же самый IP адрес своему мосту и просматриваем его.

На шагах 7 и 8 мы перечисляем все виртуальные интерфейсы в ОС своего хоста. Поскольку у нас имеется в настоящий момент
только одна гостевая KVM, которая исполняется в нашем сервере, мы видим всего один виртуальный интерфейс, то есть
vnet0. Затем мы переходим к добавлению/ подключению своего виртуального NIC
к созданному мосту.

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

Наконец, на шаге 10 мы подключаемся к своей гостевой KVM при помощи консоли, перечисляем настройки её сетевых интерфейсов
и убеждаемся что мы способны выполнить пинг к имеющемуся в ОС её хоста мосту. Для этого нам требуется поднять этот сетевой
интерфейс внутри своего гостя с помощью ifconfig eth0 up, затем получить некий
IP адрес при помощи команды dhclient eth0 от того сервера
dnsmasq, который запущен на нашем хосте.


Также ознакомьтесь…

Существует ещё ряд полезных команд, которые могут применяться для имеющегося моста Linux.

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


root@kvm:~# brctl showmacs virbr0
port no  mac addr               is local?      ageing timer
  1      52:54:00:55:9b:d6      no             268. ]

root@debian:~# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 52:54:00:55:9b:d6 brd ff:ff:ff:ff:ff:ff
 inet6 fe80::5054:ff:fe55:9bd6/64 scope link
 valid_lft forever preferred_lft forever
root@debian:~#
		

Второй MAC адрес является адресом самого нашего моста и его MAC адрес имеющегося виртуального интерфейса, относящегося к
имеющейся виртуальной машине, который выставляется ОС его хоста. Чтобы убедиться в этом исполните такую команду:


root@kvm:~# ifconfig | grep "fe:54:00:55:9b:d6"
virbr0 Link encap:Ethernet HWaddr fe:54:00:55:9b:d6
vnet0  Link encap:Ethernet HWaddr fe:54:00:55:9b:d6
root@kvm:~#
		

Когда наш мост видит некий кадр в одном из своих портов, он записывает значение времени, затем после того как на
протяжении установленного промежутка времени он не наблюдает тот же самый MAC адрес снова, он удалит эту запись из
своей таблицы CAM. Мы можем устанавливать в секундах этот временной предел до того как истечёт срок действия записи MAC
адреса выполняя такую команду:


root@kvm:~# brctl setageing virbr0 600
root@kvm:~#
		

Команда brctl хорошо документирована; чтобы перечислить все доступные субкоманды,
запустите её без параметров:


root@kvm:~# brctl
Usage: brctl [commands]
commands:
        addbr <bridge> add bridge
        delbr <bridge> delete bridge
        addif <bridge> <device> add interface to bridge
        delif <bridge> <device> delete interface from bridge
        hairpin <bridge> <port> {on|off} turn hairpin on/off
        setageing <bridge> <time> set ageing time
        setbridgeprio <bridge> <prio> set bridge priority
        setfd <bridge> <time> set bridge forward delay
        sethello <bridge> <time> set hello time
        setmaxage <bridge> <time> set max message age
        setpathcost <bridge> <port> <cost> set path cost
        setportprio <bridge> <port> <prio> set port priority
        show [ <bridge> ] show a list of bridges
        showmacs <bridge> show a list of mac addrs
        showstp <bridge> show bridge stp info
        stp <bridge> {on|off} turn stp on/off
root@kvm:~#
		

Большинство дистрибутивов Linux пакуют в свой состав обсуждаемую утилиту brctl
и именно её мы и применяем в данном рецепте. Однако, чтобы воспользоваться самой последней версией или если
пакет не доступен в вашем дистрибутиве, мы можем построить эту утилиту из исходного кда клонировав её проект с
git, а затем выполнив настройку и скомпилировав её:


root@kvm:~# cd /usr/src/
root@kvm:/usr/src# apt-get update && apt-get install build-essential automake pkg-config git
root@kvm:/usr/src# git clone git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/bridge-utils.git
Cloning into 'bridge-utils'...
remote: Counting objects: 654, done.
remote: Total 654 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (654/654), 131.72 KiB | 198.00 KiB/s, done.
Resolving deltas: 100% (425/425), done.
Checking connectivity... done.
root@kvm:/usr/src# cd bridge-utils/
root@kvm:/usr/src/bridge-utils# autoconf
root@kvm:/usr/src/bridge-utils# ./configure && make && make install
root@kvm:/usr/src/bridge-utils# brctl --version
bridge-utils, 1.5
root@kvm:/usr/src/bridge-utils#
		

В своём предыдущем выводе мы можем наблюдать что вначале мы клонировали имеющийся для проекта
bridge-utils репозиторий git,
а потом скомпилировали полученный исходный код.

В хосте RedHat/CentOS этот процесс аналогичный:


[root@centos ~]# cd /usr/src/
[root@centos src]#
[root@centos src]# yum groupinstall "Development tools"
[root@centos src]# git clone git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/bridge-utils.git
Cloning into 'bridge-utils'...
remote: Counting objects: 654, done.
remote: Total 654 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (654/654), 131.72 KiB | 198.00 KiB/s, done.
Resolving deltas: 100% (425/425), done.
Checking connectivity... done.
[root@centos src]# cd bridge-utils
[root@centos bridge-utils]# autoconf
[root@centos bridge-utils]# . /configure && make && make install
[root@centos bridge-utils]# brctl --version
bridge-utils, 1.5
[root@centos bridge-utils]#
		

OVS является другим программно определяемым устройством моста/ коммутатора, который может применяться для создания
различных виртуальных сетевых топологий и подключать к ним экземпляры KVM. OVS может использоваться вместо моста Linux
и предоставляет расширенный набор свойств, включающих в свой состав политики маршрутизации,
ACL
(Access Control Lists, списки контролья доступа)
политики QoS
(Quality of Service, качества обслуживания), отслеживание сетевого
обмена, управление потоком, выставление тегов VLAN, туннелирование GRE и многое другое.

В данном рецепте мы намереваемся установить, настроить и применить мост OVS для подключения некоего экземпляра KVM к ОС
его хоста аналогично тому как мы это делали в своём предыдущем рецепте с помощью моста Linux.


Приготовление

Для работы с этим рецептом нам понадобятся гарантии следующего:

  • Мост Linux удалён, в случае его наличия, а OVS установлен

  • У нас имеется запущенным по крайней мере один экземпляр KVM


Как это сделать…

Для создания некого нового моста OVS и подключения имеющегося виртуального интерфейса некой гостевой KVM следуйте
таким шагам:

  1. Если он имеется, удалите существующий мост Linux:

    
    root@kvm:~# brctl show
    bridge name      bridge id             STP enabled      interfaces
    virbr0           8000.fe5400559bd6     yes              vnet0
    root@kvm:~# ifconfig virbr0 down
    root@kvm:~# brctl delbr virbr0
    root@kvm:~# brctl show
    bridge name bridge id STP enabled interfaces
    root@kvm:~#
     	   

    Совет

    В некоторых дистрибутивах Linux помогает выгрузка соответствующего модуля ядра для моста KVM перед
    использованием OVS. Чтобы сделать это выполните root@kvm:/usr/src# modprobe -r
    bridge
    .

  2. Установите необходимый пакет OVS в Ubuntu:

    
    root@kvm:~# apt-get install openvswitch-switch
    ...
    Setting up openvswitch-common (2.0.2-0ubuntu0.14.04.3) ...
    Setting up openvswitch-switch (2.0.2-0ubuntu0.14.04.3) ...
    openvswitch-switch start/running
    ...
    root@kvm:~#
     	   

  3. Убедитесь что соответствующие процессы OVS исполняются:

    
    root@kvm:~# pgrep -lfa switch
    22255 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor
    22264 ovs-vswitchd: monitoring pid 22265 (healthy)
    22265 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
    root@kvm:~#
     	   

  4. Проверьте загрузку необходимого модуля ядра OVS:

    
    root@kvm:~# lsmod | grep switch
    openvswitch       70989   0
    gre               13796   1 openvswitch
    vxlan             37611   1 openvswitch
    libcrc32c         12644   1 openvswitch
    root@kvm:~#
     	   

  5. Перечислите все доступные коммутаторы OVS:

    
    root@kvm:~# ovs-vsctl show
    e5164e3e-7897-4717-b766-eae1918077b0
     ovs_version: "2.0.2"
    root@kvm:~#
     	   

  6. Создайте некий новый коммутатор OVS:

    
    root@kvm:~# ovs-vsctl add-br virbr1
    root@kvm:~# ovs-vsctl show
    e5164e3e-7897-4717-b766-eae1918077b0
     Bridge "virbr1"
       Port "virbr1"
         Interface "virbr1"
           type: internal
     ovs_version: "2.0.2"
    root@kvm:~#
     	   

  7. Добавьте имеющийся интерфейс исполняемого экземпляра KVM в созданный коммутатор OVS:

    
    root@kvm:~# ovs-vsctl add-port virbr1 vnet0
    root@kvm:~# ovs-vsctl show
    e5164e3e-7897-4717-b766-eae1918077b0
     Bridge "virbr1"
       Port "virbr1"
         Interface "virbr1"
           type: internal
       Port "vnet0"
         Interface "vnet0"
     ovs_version: "2.0.2"
    root@kvm:~#
     	   

  8. Настройте IP адрес самого коммутатора OVS:

    
    root@kvm:~# ip addr add 192.168.122.1/24 dev virbr1
    root@kvm:~# ip addr show virbr1
    41: virbr1: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
     link/ether b2:52:e0:73:89:4e brd ff:ff:ff:ff:ff:ff
     inet 192.168.122.1/24 scope global virbr1
     valid_lft forever preferred_lft forever
     inet6 fe80::b0a8:c2ff:fed4:bb3f/64 scope link
     valid_lft forever preferred_lft forever
    root@kvm:~#
     	   

  9. Настройте некий IP адрес внутри своей гостевой KVM и проверьте связь с ОС её хоста (если ваш образ не имеет настроенного
    доступа к консоли, подключитесь к нему при помощи VNC:

    
    root@debian:~# ifconfig eth0 up && ip addr add 192.168.122.210/24 dev eth0
    root@debian:~# ip addr show eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
     link/ether 52:54:00:55:9b:d6 brd ff:ff:ff:ff:ff:ff
     inet 192.168.122.210/24 scope global eth0
     valid_lft forever preferred_lft forever
     inet6 fe80::5054:ff:fe55:9bd6/64 scope link
     valid_lft forever preferred_lft forever
    root@debian:~# ping 192.168.122.1
    PING 192.168.122.1 (192.168.122.1) 56(84) bytes of data.
    64 bytes from 192.168.C
    --- 192.168.122.1 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2001ms
    rtt min/avg/max/mdev = 0.243/0.449/0.711/0.195 ms
    root@debian:~#
     	   


Как это работает…

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

На шаге 2 мы устанавливаем пакет OVS, который также запускает основной необходимый демон OVS
ovs-vswitchd, который отвечает за создание необходимых мостов/ коммутаторов и
их изменение в ОС данного хоста.

На шаге 4 мы проверяем что модуль ядра OVS загружен, а на шаге 5 мы перечисляем все доступные коммутаторы OVS в
данном хосте.

На шагах 6 и 7 мы создаём некий новый коммутатор OVS и добавляем имеющийся виртуальный интерфейс KVM в этот
коммутатор.

Тот процесс сервера ovsdb, который также был запущен после установки основного
пакета, и который мы видели на шаге 3, является неким механизмом базы данных, который применяет
RPC
(Remote Procedure Calls) JSON для взаимодействия со своим
основным демоном OVS. Данный процесс сервера ovsdb запоминает информацию, например,
относительно потоков, портов и QoS своего коммутатора, чтобы упоминуть хотя бы
некоторую из возможной. Вы можете опрашивать эту базу данных исполняя такую команду:


root@kvm:~# ovsdb-client list-dbs
Open_vSwitch
root@kvm:~# ovsdb-client list-tables
Table
-------------------------
Port
Manager
Bridge
Interface
SSL
IPFIX
Open_vSwitch
Queue
NetFlow
Mirror
QoS
Controller
Flow_Table
sFlow
Flow_Sample_Collector_Set
root@kvm:~# ovsdb-client dump Open_vSwitch
...
Port table
_uuid bond_downdelay bond_fake_iface bond_mode bond_updelay external_ids fake_bridge interfaces lacp mac name other_config qos statistics status tag trunks vlan_mode
------------------------------------ -------------- --------------- --------- ------------ ------------ ----------- -------------------------------------- ---- --- -------- ------------ --- ---------- ------ --- ------ ---------
9b4b743d-66b2-4779-9dd8-404b3aa55e18 0 false [] 0 {} false [e7ed4e2b-a73c-46c7-adeb-a203be56587c] [] [] "virbr1" {} [] {} {} [] [] []
f2a033aa-9072-4be3-808e-6e0fce67ce7b 0 false [] 0 {} false [86a10eed-698f-4ccc-b3b7-dd20c13e3ee3] [] [] "vnet0" {} [] {} {} [] [] []
...
root@kvm:~#
		

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

На шагах 8 и 9 мы назначаем IP адреса созданному коммутатору OVS и имеющейся гостевой KVM и проверяем что мы способны
достигать полученный мост хоста изнутри своей виртуальной машины.


Также ознакомьтесь…

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

Для удаления имеющегося виртуального интерфейса KVM из соответствующего коммутатора OVS выполните такую команду:


root@kvm:~# ovs-vsctl del-port virbr1 vnet0
root@kvm:~#
		

Чтобы полностью удалить имеющийся коммутатор OVS исполните такую команду:


root@kvm:~# ovs-vsctl del-br virbr1 && ovs-vsctl show
e5164e3e-7897-4717-b766-eae1918077b0
 ovs_version: "2.0.2"
root@kvm:~#
		
Замечание

Для получения дополнительных сведений относительно OVS посетите, пожалуйста
веб сайт проекта.

Настройка переадресации NAT сетевой среды

После своего запуска, libvirt создаёт некую сетевую среду по умолчанию в
своём файле настроек /etc/libvirt/qemu/networks/default.xml. При построении
какой- то новой KVM без определения каких бы то ни было новых сетевых параметров, она будет использовать такие
настройки по умолчанию для взаимодействия с ОС своего хоста и прочими гостями, а также с сетевыми средами. Устанавливаемая
по умолчанию сетевая среда libvirt применяет метод
NAT
(Network Address Translation, трансляции сетевых адресов).
NAT предоставляет соответствие одного IP адреса другому, изменяя имеющийся IP адрес в самом заголовке данной IP дейтаграммы
пакета. Это в особенности полезно когда наш хост предоставляет один IP адрес, позволяющий множеству гостей в одном и том
же хосте применять этот адрес для установления исходящих соединений. Адреса таких виртуальных машин по существу
транслируются чтобы проявляться как IP адрес этой машины хоста.

Сетевая среда переадресации по умолчанию определяет и настраивает некий мост Linux для подключения к нему имеющихся
гостей. В данном рецепте мы собираемся создать некую новую сеть NAT и подключить к ней свою гостевую KVM.


Приготовление

В данном рецепте нам понадобится следующее:

  • Некий хост Linux с установленным libvirt и его запущенным демоном.

  • Установленные в ОС рассматриваемого хоста пакеты iptables и
    iproute2. Если вы устанавливали libvirt
    из некого пакета, имеются шансы что эти iptables и
    iproute2 уже установлены, как зависимости самого пакета
    libvirt. Если же вы строили libvirt
    из исходного кода, вам может потребоваться установить их вручную.

  • Исполняемые экземпляры KVM.


Как это сделать…

Для настройки некоей новой сетевой среды NAT и подключения к ней какого- то экземпляра KVM выполните следующее:

  1. Перечислите все доступные сети:

    
    root@kvm:~# virsh net-list --all
     Name       State    Autostart     Persistent
    ----------------------------------------------------------
     default    active    yes          yes
    
    root@kvm:~#
     	   

  2. Выдайте дамп имеющихся установок вашей сети по умолчанию:

    
    root@kvm:~# virsh net-dumpxml default
    <network connections='1'>
     <name>default</name>
     <uuid>2ab5d22c-5928-4304-920e-bc43b8731bcf</uuid>
     <forward mode='nat'>
       <nat>
         <port start='1024' end='65535'/>
       </nat>
     </forward>
     <bridge name='virbr0' stp='on' delay='0'/>
     <ip address='192.168.122.1' netmask='255.255.255.0'>
       <dhcp>
         <range start='192.168.122.2' end='192.168.122.254'/>
       </dhcp>
     </ip>
    </network>
    
    root@kvm:~#
     	   

  3. Сравните это с файлом определения XML для сети по умолчанию:

    
    root@kvm:~# cat /etc/libvirt/qemu/networks/default.xml
    <network>
     <name>default</name>
     <bridge name="virbr0"/>
     <forward/>
     <ip address="192.168.122.1" netmask="255.255.255.0">
       <dhcp>
         <range start="192.168.122.2" end="192.168.122.254"/>
       </dhcp>
     </ip>
    </network>
    root@kvm:~#
     	   

  4. Перечислите все запущенные в вашем хосте экземпляры:

    
    root@kvm:~# virsh list --all
     Id    Name    State
    ----------------------------------------------------
     3    kvm1     running
    
    root@kvm:~#
     	   

  5. Убедитесь что ваши экземпляры KVM подключены к установленному по умолчанию мосту Linux:

    
    root@kvm:~# brctl show
    bridge name    bridge id           STP enabled    interfaces
    virbr0         8000.fe5400559bd6   yes            vnet0
    root@kvm:~#
     	   

  6. Создайте некое новое определение сети NAT:

    
    root@kvm:~# cat nat_net.xml
    <network>
     <name>nat_net</name>
     <bridge name="virbr1"/>
     <forward/>
     <ip address="10.10.10.1" netmask="255.255.255.0">
       <dhcp>
         <range start="10.10.10.2" end="10.10.10.254"/>
       </dhcp>
     </ip>
    </network>
    root@kvm:~#
     	   

  7. Определите эту новую сетевую среду:

    
    root@kvm:~# virsh net-define nat_net.xml
    Network nat_net defined from nat_net.xml
    
    root@kvm:~# virsh net-list --all
     Name       State      Autostart    Persistent
    ----------------------------------------------------------
     default    active     yes          yes
     nat_net    inactive   no           yes
    
    root@kvm:~#
     	   

  8. Запустите эту новую сетевую среду и установите её автоматический старт:

    
    root@kvm:~# virsh net-start nat_net
    Network nat_net started
    
    root@kvm:~# virsh net-autostart nat_net
    Network nat_net marked as autostarted
    
    root@kvm:~# virsh net-list
     Name      State     Autostart    Persistent
    ----------------------------------------------------------
     default   active    yes          yes
     nat_net   active    yes          yes
    
    root@kvm:~#
     	   

  9. Получите дополнительные сведения относительно этой новой сети:

    
    root@kvm:~# virsh net-info nat_net
    Name: nat_net
    UUID: fba2ca2b-8ca7-4dbb-beee-14799ee04bc3
    Active: yes
    Persistent: yes
    Autostart: yes
    Bridge: virbr1
    
    root@kvm:~#
     	   

  10. Измените соответствующее определение своего экземпляра kvm1 и измените название
    сетевой среды его источника:

    
    root@kvm:~# virsh edit kvm1
    .]
    
    Debian GNU/Linux 8 debian ttyS0
    
    debian login: root
    Password:
    ...
    root@debian:~# ip a s eth0 | grep inet
     inet 10.10.10.92/24 brd 10.10.10.255 scope global eth0
     inet6 fe80::5054:ff:fe55:9bd6/64 scope link
    root@debian:~# ifconfig eth0 up && dhclient eth0
    root@debian:~# ping 10.10.10.1 -c 3
    PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data.
    64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=0.313 ms
    64 bytes from 10.10.10.1: icmp_seq=2 ttl=64 time=0.136 ms
    64 bytes from 10.10.10.1: icmp_seq=3 ttl=64 time=0.253 ms
    
    --- 10.10.10.1 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2000ms
    rtt min/avg/max/mdev = 0.136/0.234/0.313/0.073 ms
    root@debian:~#
     	   

  11. В ОС своего хоста опросите какие службы DHCP запущены:

    
    root@kvm:~# pgrep -lfa dnsmasq
    38983 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf
    40098 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/nat_net.conf
    root@kvm:~#
     	   

  12. Проверьте установленный IP для интерфейса своего нового моста:

    
    root@kvm:~# ip a s virbr1
    43: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
     link/ether 52:54:00:ba:8e:2c brd ff:ff:ff:ff:ff:ff
     inet 10.10.10.1/24 brd 10.10.10.255 scope global virbr1
       valid_lft forever preferred_lft forever
    root@kvm:~#
     	   

  13. Выведите список правил iptables для имеющейся таблицы NAT:

    
    root@kvm:~# iptables -L -n -t nat
    Chain PREROUTING (policy ACCEPT)
    target prot opt source destination
    
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    
    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination
    
    Chain POSTROUTING (policy ACCEPT)
    target prot opt source destination
    RETURN all -- 10.10.10.0/24 224.0.0.0/24
    RETURN all -- 10.10.10.0/24 255.255.255.255
    MASQUERADE tcp -- 10.10.10.0/24 !10.10.10.0/24 masq ports: 1024-65535
    MASQUERADE udp -- 10.10.10.0/24 !10.10.10.0/24 masq ports: 1024-65535
    MASQUERADE all -- 10.10.10.0/24 !10.10.10.0/24
    RETURN all -- 192.168.122.0/24 224.0.0.0/24
    RETURN all -- 192.168.122.0/24 255.255.255.255
    MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
    MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
    MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
    RETURN all -- 192.168.122.0/24 224.0.0.0/24
    RETURN all -- 192.168.122.0/24 255.255.255.255
    MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
    MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
    MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
    root@kvm:~#
     	   


Как это работает…

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

На шаге 2 мы изучаем имеющиеся настройки в этой установленной по умолчанию сетевой среды. Его определение XML использует
следующие атрибуты:

  • Атрибут <network> является корневым элементом, указывающим libvirt
    что мы определяем некую сетевую среду.

  • Элемент <name> определяет само название этой сете вой среды и требует
    его уникальности.

  • Атрибут <uuid> предоставляет некий глобальный уникальный идентификатор
    для нашей виртуальной сетевой среды и, если он опущен, он выработается автоматически.

  • Элемент <forward> и его атрибут режима определяют ту сеть, с которой
    соединяется весь стек сети хоста при помощи NAT. Если этот элемент опущен, libvirt создаст некую изолированную сеть.

  • Субэлемент <nat> далее определяет соответствующий диапазон
    <port>, который будет применяться когда данный хост выполняет NAT.

  • Элемент <bridge> определяет создаваемый мост, его название и параметры
    STP.

  • Атрибут <ip> определяет необходимый диапазон IP для существующего сервера
    DHCP под назначение адресов всем гостевым ВМ.

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

На шагах 4 и 5 мы проверяем что у нас имеется запущенный экземпляр, подключённый к установленному по умолчанию мосту
Linux.

На шаге 6 мы создаём некое новое определение сетевой среды при помощи сети по умолчанию в качестве шаблона.
Мы изменяем её название и определяем новый диапазон IP.

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

После получения на шаге 9 дополнительной информации относительно вновь созданной сетевой среды мы продолжаем на шаге 10
изменять имеющееся определение XML соответствующей гостевой KVM. Чтобы сделать эту ВМ частью нашей новой сети всё что требуется,
это обновить её элемент <source network>.

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

Затем мы подключаемся к запущенной гостевой KVM и убеждаемся что её сетевой интерфейс eth0 получил некий IP адрес от
своего сервера DHCP запущенного в этом хосте и что этот IP является частью того диапазона адресов, который мы настроили
ранее. Мы также проверяем соединение при помощи команды ping.

Вернувшись в ОС своего хоста, на шагах 14 и 15 мы проверяем что службы DHCP запущены. Относительно вывода команды
pgrep, обратите внимание что теперь у нас имеются два запущенных процесса
dnsmasq: по одному для каждой из определённых сетей.

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

Настройка сетевой среды через мосты

Полностью снарядив себя мостами мы можем подключать свои гостевые KVM напрямую к сетевой среде своего хоста без
использования NAT. Однако такая установка требует некоего IP адреса, который является частью подсети самого хоста,
причём для каждой виртуальной машины. Если у вас нет возможности выделять настолько много IP адресов, рассмотрите
применение сети NAT, как это описано в выданном ранее рецепте Настройка
переадресации NAT сетевой среды. При таком режиме построения сетевой среды ваши виртуальнве машины всё ещё используют
для связи имеющийся мост ОС своего хоста; однако этот мост поглощает все физические интерфейсы, которые вы намерены
применять для своих гостей.


Приготовление

В этом рецепте нам потребуется следующее:

  • Некий сервер с по крайней мере двумя физическими интерфейсами

  • Возможность предоставлять и запускать экземпляры KVM с помощью libvirt

  • Запущенный экземпляр KVM


Как это сделать…

Для определения некоторой новой сетевой среды с мостом и подключения к ней гостей выполните следующие шаги:

  1. Отключите тот интерфейс, который мы намерены использовать для моста:

    
    root@kvm:~# ifdown eth2
    root@kvm:~#
     	   

  2. Измените файл сетевых настроек в своём хосте и замените его блок eth2
    следующим, если ваш хост это ОС с Debian/ Ubuntu:

    
    root@kvm:~# vim /etc/network/interfaces
    ...
     auto virbr2
     iface virbr2 inet static
         address 192.168.1.2
         netmask 255.255.255.0
         network 192.168.1.0
         broadcast 192.168.1.255
         gateway 192.168.1.1
         bridge_ports eth2
         bridge_stp on
         bridge_maxwait 0
    ...
    root@kvm:~#
     	   

  3. Если вы применяете дистрибутивы RedHat/CentOS, вместо этого замените следующие два файла:

    
    oot@kvm:~# cat /etc/sysconfig/ifcfg-eth2
    DEVICE=eth2
    NAME=eth2
    NM_CONTROLLED=yes
    ONBOOT=yes
    TYPE=Ethernet
    BRIDGE=virbr2
    root@kvm:~# cat /etc/sysconfig/ifcfg-bridge_net
    DEVICE=virbr2
    NAME=virbr2
    NM_CONTROLLED=yes
    ONBOOT=yes
    TYPE=Bridge
    STP=on
    IPADDR=192.168.1.2
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    root@kvm:~#
     	   

  4. Поднимите свой новый интерфейс:

    
    root@kvm:~# ifup virbr2
    root@kvm:~#
     	   

  5. Отключите отправку пакетов в iptables, которые появляются из ваших
    гостевых ВМ:

    
    root@kvm:~# sysctl -w net.bridge.bridge-nf-call-iptables=0
    net.bridge.bridge-nf-call-iptables = 0
    root@kvm:~# sysctl -w net.bridge.bridge-nf-call-iptables=0
    net.bridge.bridge-nf-call-iptables = 0
    root@kvm:~# sysctl -w net.bridge.bridge-nf-call-arptables=0
    net.bridge.bridge-nf-call-arptables = 0
    root@kvm:~#
     	   

  6. Перечислите все мосты в своём хосте:

    
    root@kvm:~# # brctl show
     bridge name     bridge id            STP enabled     interfaces
     virbr0          8000.000000000000    yes
     virbr2          8000.000a0ac60210    yes             eth2
    root@kvm:~#
     	   

  7. Измените определение XML для своего экземпляра KVM:

    
    root@kvm:~# virsh edit kvm1
    ...
     <interface type='bridge'>
       <source bridge='virbr2'/>
     </interface>
    ...
    
    Domain kvm1 XML configuration edited.
    
    root@kvm:~#
     	   

  8. Перезапустите этот экземпляр KVM:

    
    root@kvm:~# virsh destroy kvm1
    Domain kvm1 destroyed
    
    root@kvm:~# virsh start kvm1
    Domain kvm1 started
    
    root@kvm:~#
     	   


Как это работает…

Для настройки сетевой среды с мостом на шагах 1 и 2 мы вначале выключаем некий физический интерфейс
(в данном примере eth2), чтобы поглотить его (сделать его некоторой
частью того нового моста, который мы намерены создать). Затем мы создаём некую сетевую конфигурацию, определяем
новый необходимый мост и тот физический интерфейс, который мы намерены сделать частью этого моста. Это на самом деле
устанавливает соответствие той подсети что мы настраиваем в данном физическом интерфейсе данному мосту. Если ваш
сервер имеет только один сетевой интерфейс, вы всё ещё можете поглотить его. Однако вам потребуется некий
дополнительный способ подключения к этому серверу, так как после того как вы отключите свой основной интерфейс,
вы потеряете связь и устранение неисправностей может стать невозможным через какое- то подключение SSH.

После того как этот новый мост настроен, мы запускаем его на шаге 3.

На шаге 4 мы указываем своему ядру не применять правила iptable ни к какому обмену, появляющемуся у наших
виртуальных гостей подключаемых к этому мосту Linux, поскольку мы не применяем никаких правил NAT.

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

На шаге 6 мы изменяем имеющееся определение XML своего экземпляра kvm1, в
котором мы задаём необходимый тип сетевой среды который мы желаем применять; для данного рецепта это сеть с мостом
(bridge). Если вы вспомните рецепт
Настройка переадресации NAT сетевой среды, мы использовали тип
сети (network) вместо сети с мостом и мы определяли некое название сети
libvirt вместо самого названия моста.

Наконец, после перезапуска своего экземпляра KVM на шаге 7, наша гостевая ОС должна теперь иметь возможность
достигать прочие экземпляры, которые являются частью той же самой подсети без использования NAT.

Настройка проброса PCI сетевой среды

Обсуждаемый нами гипервизор KVM поддерживает прямое подключение устройств PCI из ОС своего хоста в его виртуальные
машины. Мы можем применять эту функциональность для подключения сетевого интерфейса напрямую в имеющуюся гостевую
ОС без необходимости применения NAT или программно определяемого моста.

В данном рецепте мы намерены подключить некую NIC
(Network Interface Card), которая поддерживает
SR-IOV
(Single Root I/O Virtualization,
виртуализацию ввода/ вывода с единым корнем) из своего хоста в соответствующего гостя KVM. SR-IOV представляет
собой спецификацию, которая позволяет устройству PCIe
(Peripheral Component Interconnect Express)
выступать в виде множества физических устройств {Прим. пер.: виртуальных функций},
которые могут совместно применяться многими виртуальными машинами в одном и том же хосте, выполняя проброс на уровне
самого супервизора, тем самым достигая естественной сетевой скорости. Поставщики облачных решений, такие как
Amazon AWS выставляют эту функциональность для своих вычислительных экземпляров EC2 через вызовы API.


Приготовление

Для полного исполнения данного рецепта нам потребуется следующее:

  • Некий физический хост с NIC, которая поддерживает SR-IOV

  • Коммутатор с возможностями 802.1Qbh, подключаемый к этому физическому
    серверу

  • ЦПУ с расширениями либо Intel VT-d, либо AMD IOMMU

  • Хост Linux с установленным libvirt готовый к предоставлению экземпляров
    KVM


Как это сделать…

Для настройки сетевой среды со сквозным PCIe проделайте следующие шаги:

  1. Выведите список всех устройств ОС своего хоста:

    
    root@kvm:~# virsh nodedev-list --tree
    computer
     |
     +- net_lo_00_00_00_00_00_00
     +- net_ovs_system_0a_c6_62_34_19_b4
     +- net_virbr1_nic_52_54_00_ba_8e_2c
     +- net_vnet0_fe_54_00_55_9b_d6
     ...
     |
     +- pci_0000_00_03_0
     | |
     | +- pci_0000_03_00_0
     | | |
     | | +- net_eth0_58_20_b1_00_b8_61
     | |
     | +- pci_0000_03_00_1
     | |
     | +- net_eth2_58_20_b1_00_b8_61
     |
     ...
     root@kvm:~#
     	   

  2. Перечислите все адаптеры PCI Ethernet:

    
    root@kvm:~# lspci | grep Ethernet
    03:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    03:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    root@kvm:~#
     	   

  3. Получите дополнительные сведения относительно той NIC, которую использует устройство
    eth2:

    
    root@kvm:~# virsh nodedev-dumpxml pci_0000_03_00_1
    <device>
     <name>pci_0000_03_00_1</name>
     <path>/sys/devices/pci0000:00/0000:00:03.0/0000:03:00.1</path>
     <parent>pci_0000_00_03_0</parent>
     <driver>
       <name>ixgbe</name>
     </driver>
     <capability type='pci'>
       <domain>0</domain>
       <bus>3</bus>
       <slot>0</slot>
       <function>1</function>
       <product>82599ES 10-Gigabit SFI/SFP+ Network Connection</product>
       <vendor>Intel Corporation</vendor>
     </capability>
    </device>
    
    root@kvm:~#
     	   

  4. Преобразуйте домен, шину, слот и значения функций в шестнадцатеричные числа:

    
    root@kvm:~# printf %x 0
    0
    root@kvm:~# printf %x 3
    3
    root@kvm:~# printf %x 0
    0
    root@kvm:~# printf %x 1
    1
    root@kvm:~#
     	   

  5. Создайте некий новый файл определения сетевой среды libvirt:

    
    root@kvm:~# cat passthrough_net.xml
    <network>
     <name>passthrough_net</name>
     <forward mode='hostdev' managed='yes'>
       <pf dev='eth2'/>
     </forward>
    </network>
    root@kvm:~#
     	   

  6. Определите, запустите и включите автоматический старт своей новой сетевой среды
    libvirt:

    
    root@kvm:~# virsh net-define passthrough_net.xml
    Network passthrough_net defined from passthrough_net.xml
    
    root@kvm:~# virsh net-start passthrough_net
    Network passthrough_nett started
    
    root@kvm:~# virsh net-autostart passthrough_net
    Network passthrough_net marked as autostarted
    
    root@kvm:~# virsh net-list
     Name               State      Autostart    Persistent
    ----------------------------------------------------------
     default            active    yes           yes
     passthrough_net    active    yes           yes
    
    root@kvm:~#
     	   

  7. Измените XML определение своей гостевой KVM:

    
    root@kvm:~# virsh edit kvm1
    ...
     <devices>
     ...
     <interface type='hostdev' managed='yes'>
       <source>
         <address type='pci' domain='0x0' bus='0x00' slot='0x07' function='0x0'/>
       </source>
       <virtualport type='802.1Qbh' />
     </interface>
     <interface type='network'>
       <source network='passthrough_net'>
     </interface>
     ...
     </devices>
    ...
    
    Domain kvm1 XML configuration edited.
    
    root@kvm:~#
     	   

  8. Перезапустите этот экземпляр KVM:

    
    root@kvm:~# virsh destroy kvm1
    Domain kvm1 destroyed
    
    root@kvm:~# virsh start kvm1
    Domain kvm1 started
    
    root@kvm:~#
     	   

  9. Выведите перечень VF
    (Virtual Functions), предоставляемых NIC SR-IOV:

    
    root@kvm:~# virsh net-dumpxml passthrough_net
    <network connections='1'>
       <name>passthrough_net</name>
       <uuid>a4233231-d353-a112-3422-3451ac78623a</uuid>
       <forward mode='hostdev' managed='yes'>
         <pf dev='eth2'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x1'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x3'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x5'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x7'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x1'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x3'/>
         <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x5'/>
       </forward>
    </network>
    root@kvm:~#
     	   


Как это работает…

Чтобы напрямую подключать NIC PCIe от ОС своего хоста в его гостевые ВМ нам вначале необходимо получить некую
информацию об аппаратных средствах этого устройства, такую как домен, шина, слот и идентификаторы функций. На шаге 1
мы собираем информацию обо всех доступных устройствах в сервере своего хоста. Нас интересуют сетевой интерфейс,
применяемый для eth2; более того мы выписываем из полученного вывода уникальную идентификацию PCI —
в данном случае pci_0000_03_00_1.

Чтобы убедится что это на самом деле NIC, который мы бы хотели выставить своему гостю, мы перечисляем все устройства
PCI на шаге 2. Из этого вывода мы можем обнаружить, что идентификатор его PCI тот же самый,
03:00.1.

Применяя PCI ID с шага 1 на шаге 3 мы продолжим собирать дополнительную информацию относительно NIC.
Обратите внимание, что 0000_03_00_1 ID разбивается далее на идентификатор домена,
идентификатор шины, идентификатор слота и идентификатор функции, как это показано в соответствующих атрибутах XML.
Мы намерены воспользоваться ими на шаге 7; однако вначале нам необходимо преобразовать их в шестнадцатеричные числа,
что мы и делаем на шаге 4.

На шагах 5 и 6 мы определяем некую новую сетевую среду libvirt для своих
гостей и включаем автоматический сатр в случае перезапуска сервера своего хоста. Если вы выполняли прочие рецепты из
этой главы, вы уже должны быть знакомы с большинством атрибутов в таком файле XML определений для той сети, которую мы
только что создали. Режим hostdev определённый в атрибуте
<forward> является именно тем, что инструктирует
libvirt что наша новая сетевая среда намерена применять проброс PCI.
Соответствующий параметр managed=yes, как это определено в нашем атрибуте
<forward> сообщает libvirt
вначале отключить это устройство PCI от хоста перед передачей его соответствующему гостю и повторно подключать его в этот
хост после останова такого гостя. Наконец, субэлемент <pf> определяет
тот физический интерфейс, который будет виртуализован и представлен соответствующему гостю.

Замечание

Для получения дополнительных сведений относительно доступных атрибутов XML, обращайтесь, пожалуйста, к
http://libvirt.org/formatdomain.html.

На щаге 7 мы изменяем определение XML своего экземпляра KVM, определяя тот ID PCI, который мы получили на шаге 3 и
определяем некий интерфейс, который будет применять новую сквозную сетевую среду PCIe, которую мы создали на шагах 5 и 6.

На шаге 8 мы перезапускаем свой экземпляр KVM и наконец проверяем что наше физическое устройство PCI NIC теперь
является частью новой сквозной сетевой среды, определённой нами ранее. Обратите внимание на наличие множества устройств с
типом PCI. Это происходит потому, что данное проброшенное устройство PCIe, которое мы будем применять, поддерживает
SR-IOV. Все гостевые KVM, которые будут пользоваться этой сетевой средой теперь будут способны напрямую применять NIC
своего хоста назначая одно из перечисленных виртуальных устройств PCie.

Манипулирование сетевыми интерфейсами

Libvirt предоставляет удобный способ управления сетевыми интерфейсами в имеющемся хосте через уже знакомый нам синтаксис
определений XML. Мы можем применять команду virsh для определения, предоставления и
удаления мостов Linux, а также получать дополнительную информацию относительно имеющихся сетевых интерфейсов, как мы это
уже наблюдали в данной главе.

В данном рецепте мы намерены определить некий новый мост Linux, создать его и наконец удалить его с помощью
virsh. Если вы вспомните наши более ранние рецепты, мы можем манипулировать
имеющимся мостом Linux через такие утилиты как brctl. Для libvirt, однако, у нас
имеется некий способ контроля этого программным путём через написание соответствующего файла определения и использование
соответствующих компоновок API, которые мы рассмотрим в Главе 7,
Применение Python для построения экземпляров KVM и управления ими.


Приготовление

Для данного рецепта нам потребуются:


Как это сделать…

Для создания нового интерфейса моста при помощи libvirt выполните такие команды:

  1. Создайте некий новый файл настройки интерфейса моста:

    
    root@kvm:~# cat test_bridge.xml
    <interface type='bridge' name='test_bridge'>
     <start mode="onboot"/>
       <protocol family='ipv4'>
     <ip address='192.168.1.100' prefix='24'/>
     </protocol>
     <bridge>
       <interface type='ethernet' name='vnet0'>
         <mac address='fe:54:00:55:9b:d6'/>
       </interface>
     </bridge>
    </interface>
    root@kvm:~#
     	   

  2. Перечислите все известные libvirt интерфейсы:

    
    root@kvm:~# virsh iface-list --all
     Name            State       MAC Address
    ---------------------------------------------------
     bond0           active      58:20:b1:00:b8:61
     bond0.129       active      bc:76:4e:20:10:6b
     bond0.229       active      bc:76:4e:20:17:7e
     eth0            active      58:20:b1:00:b8:61
     eth2            active      58:20:b1:00:b8:61
     lo              active      00:00:00:00:00:00
     test_bridge     inactive
    
    root@kvm:~#
     	   

  3. Запустите полученный новый интерфейс моста:

    
    root@kvm:~# virsh iface-start test_bridge
    Interface test_bridge started
    
    root@kvm:~# virsh iface-list --all | grep test_bridge
     test_bridge    active    4a:1e:48:e1:e7:de
    root@kvm:~#
     	   

  4. Перечислите все устройства моста в этом хосте:

    
    root@kvm:~# brctl show
    bridge name       bridge id           STP enabled   interfaces
    test_bridge       8000.000000000000   no
    virbr0            8000.000000000000   yes
    virbr1            8000.525400ba8e2c   yes           virbr1-nic
                                                        vnet0
    root@kvm:~#
     	   

  5. Проверьте все активные сетевые настройки своего нового моста:

    
    root@kvm:~# ip a s test_bridge
    46: test_bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
     link/ether 4a:1e:48:e1:e7:de brd ff:ff:ff:ff:ff:ff
     inet 192.168.1.100/24 brd 192.168.1.255 scope global test_bridge
     valid_lft forever preferred_lft forever
     inet6 fe80::481e:48ff:fee1:e7de/64 scope link
     valid_lft forever preferred_lft forever
    root@kvm:~#
     	   

  6. Определите этот новый интерфейс:

    
    root@kvm:~# virsh iface-define test_bridge.xml
    Interface test_bridge defined from test_bridge.xml
    
    root@kvm:~#
     	   

  7. Получите значение MAC адреса моста:

    
    root@kvm:~# virsh iface-mac test_bridge
    4a:1e:48:e1:e7:de
    
    root@kvm:~#
     	   

  8. Получите название созданного моста предоставив его MAC адрес:

    
    root@kvm:~# virsh iface-name 4a:1e:48:e1:e7:de
    test_bridge
    
    root@kvm:~#
     	   

  9. Удалите созданный интерфейс следующим образом:

    
    root@kvm:~# virsh iface-destroy test_bridge
    Interface test_bridge destroyed
    
    root@kvm:~# virsh iface-list --all | grep test_bridge
     test_bridge inactive
    root@kvm:~# virsh iface-undefine test_bridge
    Interface test_bridge undefined
    
    root@kvm:~# virsh iface-list --all | grep test_bridge
    root@kvm:~#
     	   


Как это работает…

На шаге 1 мы записываем необходимое определение XML для своего нового сетевого интерфейса. Мы определяем мост по
значению типа, некого IP адреса для его интерфейса и необязательного какого- то MAC адреса.

На шагах 2 и 3 мы определяем этот новый мост и выводим его в списке. Определение такого интерфейса не делает
автоматически его активным, поэтому на шаге 4 мы активируем его.

Как показано на шаге 5, активация этого моста создаёт его реальный интерфейс в этом хосте.

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

На шагах 7 и 8 мы получаем и название и MAC адрес при помощи утилиты virsh,
а, наконец, на шаге 9 мы удаляем созданный интерфейс bridge.

KVM на Debian. « Debian.pro

Несколько недель назад я выбрал себе KVM для виртуализации. Сразу отвечу на вопросы «почему?»: виртуальные машины под KVM шустры и позволяют запускать любую ОС. Еретические ОС я не пробовал, но Debian и FreeBSD бегают под KVM+Debian очень и очень неплохо — это признают даже бывалые администраторы.

Если вы готовы за скорость заплатить удобством настройки и использования хост-машины — просим под кат.

Устанавливал я KVM на машинку с процессором core i7. Рекомендую использовать именно многоядерные процессоры с HT. При том не стоит отдавать виртуальным машинам виртуальных процессоров больше, чем есть ядер на хост-машине. В случае с i7 я получил 8 ядер, которые в дальнейшем смогу разделить как пожелаю между контейнерами.  Если раздать больше процессоров чем есть — это может сказаться на производительности.

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

cat /proc/cpuinfo | egrep ‘(svm|vmx)’

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

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

sudo apt-get install kvm libvirt-bin virtinst bridge-utils

После чего стоит перезагрузить хост. Конечно же стоит использовать последнее доступное стабильное linux-ядро, доступное в репозиториях.

Проверяем, установился ли KVM:

virsh -c qemu:///system list —all

Вывод команды опять же должен быть не пустым и не содержать ошибок вида «команда не найдена».

Приступим к настройке сети на хост машине. Приведем файл /etc/network/interfaces к следующему виду:

auto lo

iface lo inet loopback
auto  eth0
iface eth0 inet static
auto br0
iface br0 inet static
address   178.ххх.ххх.137
netmask   255.255.255.192

network 178.ххх.ххх.0
broadcast 178.ххх.ххх.191
gateway   178.ххх.ххх.129
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

После чего применяем все сетевые настройки:

/etc/init.d/networking restart

Для удобства создадим каталоги:

mkdir /iso && mkdir /vms

И скачаем образ установочный образ debian:

cd /iso && wget -c http://cdimage.debian.org/debian-cd/5.0.4/amd64/iso-cd/debian-504-amd64-CD-1.iso

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

virt-install -n vm1 -r 1024 -f /vms/vm1.img -s 50 -c /iso/debian-cd/5.0.4/amd64/iso-cd/debian-504-amd64-CD-1.iso —accelerate —os-type=linux —os-variant=generic26 -v —vnc -w bridge:br0

Расскажу о приведенных выше опциях:

-n vm1 — имя домена (виртуальной машины)

-r 1024 — количество оперативной памяти

-f /vms/vm1.img — расположение «жесткого диска».

-s 50 — размер «жесткого диска»

-c /iso/debian-cd/5.0.4/amd64/iso-cd/debian-504-amd64-CD-1.iso — указываем iso образ, с которого будем производить установку системы. Рекомендую запускать 64х битные образы под 64й битной ОС хост-машины.

—accelerate —os-type=linux —os-variant=generic26 -v — оптимизируем VDS для работы с виртуальным Linux с ядром 2.6.хх

—vnc — запускаем VNC-сервер для доступа к виртуальной машине.

-w bridge:br0 — указываем, что виртуальная машина должна использовать сетевлй мост br0  хост-машины

Теперь перейдем к установке ОС на виртуальную машину.

На вашем компьютере (не на сервере, а на рабочей станции с графической средой) вводим команды:

ssh -L 5900:localhost:5900 root@178.ххх.ххх.137

И во второй консоли:

vncviewer localhost:5900

Теперь вы должны увидеть в VNC установщик Debian. Ставим всё как обычно (возможно вам будет недоступна сеть). После того, как установщик Debian отправит систему в перезагрузку — виртуальная машина выключится, вместо того, чтобы перезагрузиться.

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

virsh -c qemu:///system setvcpus vm1 2

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

virsh -c qemu:///system start vm1

Теперь нужно настроить сеть на виртуальной машине. Заходим на неё по VNC и приводим файл /etc/network/interfaces к следующему виду:

auto lo

iface lo inet loopback

allow-hotplug eth0

iface eth0 inet static

address 178.xxx.xxx.177

netmask 255.255.255.192

network 178.xxx.xxx.128

broadcast 178.xxx.xxx.191

gateway 178.xxx.xxx.137

Шлюзом необходимо указать ip-адрес хост-сервера. Так же стоит прописать NS в файл /etc/resolv.conf

Теперь ваша виртуальная машина работает и доступна из сети (а в моём случае она стала доступна и из интернета).

Осталось сделать aptitude update && aptitude upgrade && aptitude install openssh-server и зайти на виртуальный сервер по SSH.

Пользуясь случаем расскажу вам, что у хостера QS.biz сдаются в аренду VDS на KVM.

KVM (Kernel-based Virtual Machine) [Мозаика системного администрирования]

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

Программное обеспечение KVM состоит из загружаемого модуля ядра (называемого kvm.ko), предоставляющего базовый сервис виртуализации, процессорно-специфического загружаемого модуля kvm-amd.ko либо kvm-intel.ko, и компонентов пользовательского режима (модифицированного QEMU). Все компоненты программного обеспечения KVM открыты. Компонент ядра, необходимый для работы KVM, включён в основную ветку ядра Linux начиная с версии 2.6.20 (февраль 2007 года). KVM был также портирован на FreeBSD как модуль ядра. Ведётся работа по включению модификаций, необходимых для работы с KVM, в основную ветку QEMU.

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

http://www.linux-kvm.org/

Debian 8:

apt-get install qemu-kvm \
                libvirt-bin \
                bridge-utils \
                virtinst

Debian 9:

apt-get install qemu-kvm \
                libvirt-clients \
                libvirt-daemon-system \
                virtinst \
                bridge-utils

  • qemu-kvm — гипервизор

  • ibvirt-clients — набор библиотек libvirt для взаимодействия с гипервизором
  • libvirt-daemon-system — демон libvirtd

  • bridge-utils — сетевые утилиты

  • virtinst — инструменты и библиотеки для управления виртуальными машинами
rights-kvm.sh
#!/bin/bash
 
path=/mnt/kvm
#chgrp libvirt-qemu $path
chown -R libvirt-qemu $path
chmod -R 600 $path
chgrp -R libvirt-qemu $path
chmod 6770 $path

MAC адреса

Используется диапазон адресов: 52:54:00:xx:xx:xx

Настройка сетевых интерфейсов

libvirt

virtinst

Список ОС:

virt-install --os-variant list

virsh

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

virsh pool-define-as --name kvm --type dir --target /home/kvm
virsh pool-list --all
virsh pool-start guest_images
virsh pool-autostart guest_images

Основные команды для работы с гостевым доменом:

Список и статус доменов
virsh list
Запуск
virsh start ИМЯ_ГОСТЕВОГО_ДОМЕНА
Остановка
virsh destroy ИМЯ_ГОСТЕВОГО_ДОМЕНА
Перезагрузка
virsh reboot ИМЯ_ГОСТЕВОГО_ДОМЕНА
Удаление
virsh undefine ИМЯ_ГОСТЕВОГО_ДОМЕНА

guest disk image management system — tools

kernel-based_virtual_machine/kernel-based_virtual_machine.txt · Последние изменения: 2019-11-26 11:18 — GreyWolf

Как установить KVM-сервер на Debian 9/10 Headless Server

Виртуальная машина на основе ядра (KVM) — это модуль виртуализации для ядра Linux, который превращает его в гипервизор. Как я могу установить KVM с мостовой сетью, настроить гостевую операционную систему в качестве внутренней технологии виртуализации для неграфического сервера Debain Linux 9.x / 10.x?

Вы можете использовать KVM для запуска нескольких операционных систем, таких как Windows, * BSD, Linux, с использованием виртуальных машин. У каждой виртуальной машины есть свой частный диск, видеокарта, сетевая карта и многое другое.

Шаги по установке KVM-сервера на сервер Debian Linux 9.x / 10.x

  1. Хост-сервер, расположенный в удаленном центре обработки данных, является автономным сервером.
  2. Все команды в этом руководстве вводятся в сеансе на основе ssh.
  3. Для установки гостевой операционной системы необходим клиент vnc.
  4. В этом руководстве вы узнаете , как установить программное обеспечение KVM на сервер Debian Linux 9.x и использовать KVM для настройки вашей первой гостевой виртуальной машины.

Выполните шаги по установке KVM в Debian Linux 9.x / 10.x безголовый сервер

Шаг 1: Установите kvm

Введите следующую команду apt-get / apt:
$ sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils libguestfs-tools genisoimage virtinst libosinfo-bin

Разрешить обычному пользователю управлять виртуальной машиной

Если вы хотите, чтобы обычный / обычный пользователь мог управлять виртуальными машинами. Добавьте пользователя vivek в libvirt и libvirt-qemu с помощью команды usermod:
$ sudo adduser vivek libvirt
$ sudo adduser vivek libvirt-qemu

Обновите членство в группе с помощью команды newgrp:
$ newgrp libvirt
$ new-grp qemu

Проверьте свое членство в группе с помощью команды id:
$ id
Обратите внимание, что вам необходимо использовать следующую команду для подключения к KVM-серверу:
$ virsh --connect qemu: /// system
$ virsh - -connect qemu: /// системная команда
$ virsh --connect qemu: /// системный список --all

Шаг 2. Проверьте установку kvm на Debain.

Выполните следующую команду egrep, чтобы убедиться, что Intel VMX или AMD SVM поддерживается вашим процессором:
$ egrep --color 'vmx | svm' / proc / cpuinfo
Примеры выходных данных:

 rf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand_deadline_timer eprid_smept_smebase_save_vx f16c rdrami_flex_lahp_lm epb_lm xsave_f16c rdrand_lahf_lm xsave_f16c rdrami_lahf_lm epb_lm_pb_lmx
флаги: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebspfm_perfcddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm epb kaiser tpr_shadow vnmi flexpriority ept vpid id fsgsbase smeprat erms 900
 

Шаг 3. Настройте мостовую сеть в Debian

Я собираюсь создать мост Интерфейс br0 в качестве сетевого подключения в конфигурации гостевых виртуальных машин для интерфейса eth0:
$ sudo vi / etc / network / interfaces.d / br0
Добавьте следующее:

 ## убедитесь, что вся конфигурация, относящаяся к eth0, удалена ##
авто br0
iface br0 inet static
адрес 192.168.2.23 ## настроить / netmask / broadcast / gateway в соответствии с вашими настройками
широковещательный 192.168.2.255
маска сети 255.255.255.0
шлюз 192.168.2.254
bridge_ports eth0 # замените eth0 на ваше настоящее имя интерфейса
bridge_stp off # отключить протокол связующего дерева
        bridge_waitport 0 # без задержки до того, как порт станет доступным
        bridge_fd 0 # без задержки пересылки 

Перезапустите сетевую службу в Linux:
$ sudo systemctl restart network-manager
Чтобы увидеть текущие настройки сети для KVM, запустите:
$ sudo virsh net-list --all
Примеры выходных данных:

 Имя Состояние Автостарт Постоянный
-------------------------------------------------- --------
 по умолчанию неактивен нет да 

Вам необходимо настроить гостевой домен KVM в мостовой сети.Итак, создайте файл с именем bridge.xml, используя следующий текстовый редактор, например команду NA:
$ sudo vi /root/bridged.xml
Добавьте следующую конфигурацию:

 <сеть>
   br0 
  
  <название моста = "br0" />
 

Сохраните и закройте файл в vi / vim.
$ sudo virsh net-define --file /root/bridged.xml
$ sudo virsh net-autostart br0
$ sudo virsh net-start br0

Шаг 4. Создайте свою первую виртуальную машину с помощью установщика ISO-образа

Я собираюсь создать CentOS 7.х ВМ. Сначала возьмите последний ISO-образ CentOS 7.x:
$ cd / var / lib / libvirt / boot /
$ sudo wget https://mirrors.kernel.org/centos/7/isos/x86_64/CentOS-7- x86_64-DVD-1708.iso

Создать виртуальную машину CentOS 7

В этом примере я создаю виртуальную машину CentOS 7.x с 2 ГБ ОЗУ, 2 ядрами ЦП, 1 ником и 40 ГБ дискового пространства, введите:
$ sudo virt-install \
--virt-type = kvm \
- -name centos7 \
--ram 2048 \
--vcpus = 2 \
--os-variant = rhel7 \
--virt-type = kvm \
--hvm \
--cdrom = / var / lib / libvirt / загрузка / CentOS-7-x86_64-DVD-1708.iso \
--network = bridge = br0, model = virtio \
--graphics vnc \
--disk path = / var / lib / libvirt / images / centos7.qcow2, size = 40, bus = virtio, format = qcow2

Чтобы настроить вход vnc с другого терминала через ssh, введите:
$ sudo virsh dumpxml centos7 | grep vnc

Вы также можете использовать следующую команду:
$ sudo virsh vncdisplay centos7
Запишите значение порта (т.е.е. 5901). Вам необходимо использовать SSH-клиент для настройки туннеля и VNC-клиента для доступа к удаленному vnc-серверу. Введите следующую команду переадресации порта SSH со своего клиента / рабочего стола:
$ ssh [email protected] -L 5901: 127.0.0.1: 5901
После того, как вы установили туннель ssh, вы можете направить свой клиент VNC на свой собственный адрес 127.0.0.1 (localhost) и порт 5901 следующим образом:

Рис.01: клиент VNC для завершения установки CentOS 7.x

Вы должны увидеть экран гостевой установки CentOS Linux 7:

Рис.02: Установка CentOS 7.x на ВМ

на базе KVM
Теперь просто следуйте инструкциям на экране и установите CentOS 7. После установки нажмите кнопку перезагрузки. Удаленный сервер закрыл соединение с нашим клиентом VNC. Вы можете повторно подключиться через KVM-клиент, чтобы настроить остальную часть сервера, включая сеанс на основе SSH или брандмауэр.

Шаг 5. Используйте virt-builder для создания ВМ

Вышеупомянутый метод (virt-install) работает нормально, но если вам нужно быстро создать новые виртуальные машины, попробуйте virt-builder.

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

$ virt-builder --список | подробнее
Вы можете использовать команду grep для фильтрации только виртуальных машин на основе архитектуры x86_64:
$ virt-builder --list | grep x86_64
Примеры выходных данных:

 opensuse-13.1 x86_64 openSUSE 13.1
opensuse-13.2 x86_64 openSUSE 13.2
opensuse-42.1 x86_64 openSUSE Leap 42.1
opensuse-перекати-поле x86_64 openSUSE-перекати-поле
centos-6 x86_64 CentOS 6.6
CentOS-7.0 x86_64 CentOS 7.0
CentOS-7.1 x86_64 CentOS 7.1
CentOS-7.2 x86_64 CentOS 7.2
CentOS-7.3 x86_64 CentOS 7.3
CentOS-7.4 x86_64 CentOS 7.4
cirros-0.3.1 x86_64 CirrOS 0.3.1
cirros-0.3.5 x86_64 CirrOS 0.3.5
debian-6 x86_64 Debian 6 (сжатие)
debian-7 x86_64 Debian 7 (хриплый)
debian-8 x86_64 Debian 8 (Джесси)
debian-9 x86_64 Debian 9 (растяжение)
Fedora-18 x86_64 Fedora® 18
Fedora-19 x86_64 Fedora® 19
Fedora-20 x86_64 Fedora® 20
fedora-21 x86_64 Сервер Fedora® 21
fedora-22 x86_64 Сервер Fedora® 22
fedora-23 x86_64 Сервер Fedora® 23
fedora-24 x86_64 Сервер Fedora® 24
fedora-25 x86_64 Сервер Fedora® 25
fedora-26 x86_64 Сервер Fedora® 26
fedora-27 x86_64 Сервер Fedora® 27
freebsd-11.1 x86_64 FreeBSD 11.1
Scientificlinux-6 x86_64 Scientific Linux 6.5
ubuntu-10.04 x86_64 Ubuntu 10.04 (Lucid)
ubuntu-12.04 x86_64 Ubuntu 12.04 (точный)
ubuntu-14.04 x86_64 Ubuntu 14.04 (надежный)
ubuntu-16.04 x86_64 Ubuntu 16.04 (Xenial) 

Чтобы увидеть дополнительные примечания для любого запуска ОС:
$ virt-builder --notes ubuntu-16.04
$ virt-builder --notes debian-9

Примеры выходных данных:

 Debian 9 (растянуть)

Это минимальная установка Debian.
Этот образ не содержит ключей хоста SSH. Для их восстановления используйте:

    --firstboot-command "dpkg-reconfigure openssh-server"

Этот шаблон был сгенерирован скриптом в дереве исходных текстов libguestfs:
    строитель / шаблоны / make-template.ml
Связанные файлы, используемые для подготовки этого шаблона, можно найти в
тот же каталог. 

Создать виртуальную машину Debian 9.x

Создайте виртуальную машину Debian 9 с 10 ГБ дискового пространства, 2 ГБ оперативной памяти, 2 виртуальных процессора и случайным паролем для учетной записи root, запустите:
$ sudo virt-builder debian-9 \
--size = 10G \
--format qcow2 -o / var / lib / libvirt / images / debian9-vm1.qcow2 \
--hostname debain9-vm1 \
--network \
--timezone Asia / Kolkata

Наконец, импортируйте образ с помощью команды virt-install:
$ sudo virt-install --import --name debian9-vm1 \
--ram 2048 \
--vcpu 2 \
- путь к диску = / var / lib / libvirt / images / debian9-vm1.qcow2, format = qcow2 \
--os-option debian9 \
--network = bridge = br0, model = virtio \
--noautoconsole

Примеры выходных данных:

 Запуск установки ...
Создание домена...
Создание домена завершено. 

Вы можете войти в свою виртуальную машину, используя пароль x0E4iZ8sHjA6ekb6 для учетной записи root:
$ sudo virsh list --all
$ virsh console debian9-vm1

Необходимо отключить учетную запись root для сеанса ssh и создать ключи ssh для вашей виртуальной машины. Войдите в систему, как указано выше:
# dpkg-reconfigure openssh-server
# useradd -r -m -d / home / vivek -s / bin / bash vivek
# passwd vivek
# systemctl enable ssh
### [Отключить пользователя root вход при использовании ssh] ###
# echo 'PermitRootLogin no' >> / etc / ssh / sshd_config
# systemctl restart ssh
# ip as

Убедитесь, что вы можете войти, используя IP-адрес для пользователя vivek, и используйте 'su - 'чтобы стать пользователем root:
$ ssh vivek @ 192.168.2.132
$ су -

Полезные команды

Давайте посмотрим на некоторые полезные команды.

Найдите список допустимых вариантов ОС

$ osinfo-query os | меньше
$ osinfo-query os | grep debian
$ osinfo-query os | grep freebsd

Список работающих vms / доменов

$ sudo virsh list

Shutodwn vm / домен под названием debian9-vm1

$ sudo virsh выключение debian9-vm1

Запустите vm / домен под названием debian9-vm1

$ sudo virsh start debian9-vm1

Приостановить vm / домен с именем debian9-vm1

$ sudo virsh приостановить debian9-vm1

Перезагрузка (мягкая и безопасная перезагрузка) vm / домена с именем debian9-vm1

$ sudo virsh перезагрузка debian9-vm1

Сброс (аппаратный сброс / небезопасно) vm / домена с именем debian9-vm1

$ sudo virsh сбросить debian9-vm1

Удалить / удалить vm / домен с именем debian9-vm1

$ sudo virsh undefine debian9-vm1
$ sudo virsh destroy debian9-vm1

Чтобы увидеть полный список команд virsh, введите
$ virsh help | меньше
$ вирш справка | grep перезагрузка

Настройка KVM-сервера Debian 9

Из этого туториала Вы узнаете, как настроить сервер Debian 9 в качестве узла KVM, а не для настройки KVM в Ubuntu 16.04.

Информация о версии

  • libvirtd (библиотека libvirt) 3.0.0
  • Эмулятор QEMU версии 2.8.1 (Debian 1: 2.8 + dfsg-6 + deb9u2)

Ступени

Выполните команду ниже, чтобы проверить, поддерживает ли система KVM. Вы должны увидеть число больше 0.

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

Установите большинство необходимых пакетов.

  sudo apt-get install \
qemu-kvm мост-утилит libvirt-daemon \
libvirt-демон-система
  

Пакет Virtinst

Теперь мы хотим установить пакет virtinst, чтобы можно было установить гостей с помощью команды virtinstall.
К сожалению, здесь есть рекомендация пакета virt-viewer, для которого потребуется много пакетов на основе графического интерфейса.
Таким образом, в зависимости от того, используете ли вы автономный или настольный KVM-хост, выберите один из следующих двух вариантов:

Хосты KVM без головы:

  sudo apt-get install --no-install-рекомендует virtinst -y

# Теперь устанавливаем его рекомендации, кроме virt-viewer
sudo apt-get install \
libosinfo-l10n python-gi-cairo python-setuptools python-криптография \
python-idna python-openssl python-socks python-ntlm \
python-криптография, python-idna, python-ipaddress, python-openssl -y
  

Настольные KVM-хосты:
Если у вашего KVM-хоста уже есть графический интерфейс, вы, вероятно, захотите просто пойти дальше и установить все рекомендации, которые будут включать virt-viewer.

  sudo apt-get install virtinst -y
  

Добавить пользователя в Libvirt

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

  sudo adduser $ ПОЛЬЗОВАТЕЛЬ libvirt
  

Убедитесь, что все в порядке, запустив:

  sudo virsh -c qemu: /// список систем
  

Вы должны увидеть следующий результат:

  Идентификатор Имя Состояние
-------------------------------------------------- -
  

Настройка сети по умолчанию

Я почти уверен, что Debian 9 не установит автоматически или, возможно, не запустит автоматически сеть по умолчанию.Вы можете создать его.

Последнее обновление: 9 мая 2020 г.
Первая публикация: 16 августа 2018 г.

Debian 9: установить KVM для виртуализации

Virt-manager - это интерфейсный инструмент с графическим интерфейсом для libvirt. Создайте виртуальную машину с помощью virt-manager.

$ virt-manager
 

Нажмите «Новая виртуальная машина» в левом верхнем углу.

Выберите установочный носитель. В этой статье используется файл debian-9.0.0-amd64-netinst.iso в каталоге iso.

Нажмите кнопку «Обзор» в разделе «Использовать ISO-образ».

Каталог iso пока не найден.Щелкните значок «+», чтобы добавить каталог iso. Введите имя пула хранения и выберите «dir: Filesystem Directory».

Путь входного пула хранения.

Каталог iso можно найти. Выберите debian-9.0.0-amd64-netinst.iso.

дебиан-9.Выбран 0.0-amd64-netinst.iso. Выберите тип ОС для расчета объема памяти. После этого размер памяти можно изменить.

Введите номер ядра и размер памяти.

Создайте хранилище.

Выберите сеть.«Виртуальная сеть« по умолчанию »: NAT» может быть доступна с другой машины, а «Виртуальная сеть« по умолчанию »: NAT» недоступна. Обе сети могут получить доступ к другой машине.

Начинается установка ОС на виртуальную машину.

Как установить и использовать QEMU в Debian 9 - Linux Подсказка

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

QEMU выполняет полную эмуляцию системы. Итак, QEMU может запускать программы, написанные для другой архитектуры, на вашей машине Debian 9. Например, программы, написанные для процессоров на базе ARM, можно запускать на процессорах x86 с помощью QEMU.

В этой статье я покажу вам, как установить и использовать QEMU в Debian 9 Stretch. Давайте начнем.

QEMU

можно комбинировать с KVM для использования функций аппаратной виртуализации вашего ЦП.QEMU + KVM обеспечит вам почти полную производительность оборудования.

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

Я рекомендую вам включить аппаратную виртуализацию. Если вы этого не сделаете, QEMU будет работать очень медленно.

Включение аппаратной виртуализации:

Если у вас процессор Intel, то все, что вам нужно сделать, это включить VT-x или VT-d в BIOS вашей материнской платы.

Для ЦП AMD необходимо включить AMD-v в BIOS материнской платы.

Если ваш ЦП поддерживает аппаратную виртуализацию, и вы включили ее в BIOS своего компьютера, то вы можете проверить, включена ли виртуализация на вашем компьютере Debian 9 Stretch, с помощью следующей команды:

Как видите, виртуализация оборудования включена.

Установка QEMU и KVM:

QEMU не установлен по умолчанию в Debian 9 Stretch.Но он доступен в официальном репозитории пакетов Debian 9 Stretch. Так что вы легко сможете его установить.

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

Кэш репозитория пакетов APT должен быть обновлен.

Теперь установите QEMU с помощью следующей команды:

$ sudo apt install qemu qemu-kvm

Теперь нажмите y , а затем нажмите , чтобы продолжить.

Необходимо установить

KVM и QEMU.

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

В этом разделе я покажу вам, как установить Alpine Linux на виртуальную машину QEMU + KVM.

Создание каталога ВМ:

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

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

Теперь перейдите в каталог виртуальной машины с помощью следующей команды:

Загрузка образа ISO Alpine Linux:

Теперь загрузите стандартный ISO-образ Alpine Linux с https: // alpinelinux.org / downloads / в каталог вашей виртуальной машины.

На момент написания этой статьи образ ISO alpine-standard-3.8.0-x86_64.iso

Создание образа QEMU:

Теперь вам нужно создать образ QEMU. Это виртуальный жесткий диск, на который вы установите Alpine Linux. QEMU имеет собственную команду для создания образа QEMU.

Я собираюсь создать образ QEMU alpine.img и выделить для него 8 ГБ дискового пространства с помощью следующей команды:

$ qemu-img create -f qcow2 alpine.img8G

ПРИМЕЧАНИЕ: Вы можете присвоить образу имя, отличное от alpine.img , и установить для размера диска значение, отличное от 8G (8 гигабайт).

Как видите, создается alpine.img .

Запуск установщика Alpine:

Теперь вы можете запустить эмуляцию QEMU с помощью KVM и установить Alpine Linux на образ alpine.img .

Я собираюсь использовать сценарий оболочки install.sh , чтобы начать установку, поскольку я считаю, что это упрощает понимание и изменение команды позже.

Теперь выполните следующую команду, чтобы создать install.sh :

И введите в него следующие строки:

Теперь сохраните файл с + x , затем нажмите y , а затем нажмите .

ПРИМЕЧАНИЕ: Здесь -m 512 означает, что для виртуальной машины будет выделено 512 МБ памяти (ОЗУ).

Теперь сделайте скрипт install.sh исполняемым с помощью следующей команды:

Теперь запустите сценарий установки с:

Как видите, установщик Alpine загрузился.

Теперь введите root и нажмите . Вы должны войти в систему.

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

Теперь введите свою раскладку клавиатуры (я выбрал us ) и нажмите .

Выберите вариант (я выбрал us ) и нажмите .

Теперь введите свое имя хоста и нажмите .

Теперь выберите свой сетевой интерфейс. По умолчанию это eth0 , что правильно. Поэтому я нажал , чтобы выбрать значение по умолчанию.

Теперь введите IP-адрес вашего сетевого интерфейса. Я выберу IP-адрес по умолчанию: dhcp .По завершении нажмите .

Я выбрал dhcp , поэтому нажал .

Теперь введите новый пароль root и нажмите .

Теперь введите пароль еще раз и нажмите .

Теперь пора выбрать часовой пояс. По умолчанию UTC , но вы можете перечислить другие поддерживаемые часовые пояса, нажав ? и .Я выбираю значение по умолчанию.

Нажмите .

Нажмите .

Нажмите .

Введите sda и нажмите .

Введите sys и нажмите .

Теперь введите y и нажмите .

Устанавливается

Alpine…

Установлен

Alpine Linux.

Загрузка Alpine с alpine.img Образ QEMU:

Теперь создайте другой сценарий оболочки start.sh в каталоге виртуальной машины с помощью следующей команды:

Теперь добавьте к нему следующие строки и сохраните его.

Сделайте скрипт start.sh исполняемым следующим образом:

Наконец, вы можете загрузить свою недавно установленную ОС Alpine с QEMU KVM следующим образом:

Как видите, Alpine Linux загрузился из образа QEMU.

Эмуляция других архитектур с помощью QEMU:

QEMU поддерживает множество архитектур ЦП, как вы можете видеть на скриншоте ниже.

В предыдущих примерах я использовал команду kvm . На самом деле это аппаратная виртуализация qemu-system-x86_64 .

Вы можете заменить все команды kvm на команду qemu-system-x86_64 в предыдущих примерах, и она все равно будет работать.Но он будет работать медленно, так как не будет использовать аппаратную виртуализацию.

Вот как вы устанавливаете и используете QEMU в Debian 9 Stretch. Спасибо, что прочитали эту статью.

Как запустить Debian на виртуальной машине QEMU KVM с использованием Ubuntu или Debian

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

Изображение из Википедии

Шаг 0. Убедитесь, что ваш ЦП поддерживает виртуализацию

(Если вы уже знаете, что ваш ЦП поддерживает виртуализацию и как ее включить, вы можете пропустить этот шаг.)

Чтобы проверить, поддерживает ли ваш ЦП виртуализацию, вы можете ввести любую из следующих команд:

lscpu

egrep --color = auto 'vmx | svm | 0xc0f' / proc / cpuinfo

Вы будете искать вывод, например, vmx, svm или виртуализацию.vmx предназначен для Intel, а svm - для AMD

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

 lscpu
Архитектура: x86_64
Операционные режимы ЦП: 32-разрядный, 64-разрядный
Порядок байтов: Little Endian
ЦП: 8
Он-лайн список ЦП: 0-7
Потоков на ядро: 2
Ядра на сокет: 4
Розетка (и): 1
NUMA узлов: 1
ID поставщика: GenuineIntel
Семейство процессоров: 6
Модель: 60
Название модели: Intel (R) Core (TM) i7-4710HQ CPU @ 2.50 ГГц
Шаг: 3
Процессор МГц: 1272,125
Максимальная частота процессора: 3500.0000
CPU min MHz: 800.0000
BogoMIPS: 4988,38
Виртуализация: VT-x
Кэш L1d: 32 КБ
Кэш L1i: 32 КБ
Кэш L2: 256 КБ
Кэш L3: 6144 КБ
NUMA node0 ЦП: 0-7
Флаги: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tscfm_perfcddddtcp lm constant_tscfm_perfcdddddddddddddddddddddddddddddddddddddcpfmcddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddbx есть tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority eptust vpc_shadow_shadow vnmi flexpriority eptust vpc_dm_sadgsbid_sme1
 

Если вы получите такой вывод: VT-x и или / vmx, как на моем компьютере, то вы узнаете, что ваша ОС поддерживает виртуализацию.Это будет аналогично, если ваш компьютер использует процессор AMD.

Из ранее упомянутой команды egrep, если вы получаете вывод в цвете, например, при получении vmx, то вы узнаете, что ваша ОС поддерживает виртуализацию.

Чтобы включить виртуализацию, вам, вероятно, потребуется открыть BIOS и явно разрешить виртуализацию.

Вы можете узнать больше о включении виртуализации с kvm ниже
https://wiki.archlinux.org/index.php/KVM

Шаг 1: Установите QEMU и KVM

Теперь мы просто устанавливаем qemu и qemu-kvm.Откройте терминал и введите:

sudo apt-get install qemu qemu-kvm

Шаг 2. Получите файл ISO Debian

Загрузите последнюю версию ISO Debian или используйте уже имеющийся. В настоящее время здесь находится последняя версия Debian. Поскольку у меня довольно новый компьютер с процессором Intel, я скачаю версию amd64, которая называется debian-9.6.0-amd64-xfce-CD-1.iso

Шаг 3. Создайте установку для QEMU и KVM

. где мы фактически настраиваем kvm для эмуляции Debian.

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

cd ~ /
mkdir debian

Внутри папки debian мы поместим наш файл ISO и наши файлы qemu / kvm.

Найдите место, куда вы загрузили ISO-файл Debian, и поместите его в только что созданную папку ~ / debian.Я предполагаю, что вы загрузили его в папку ~ / Downloads.

cd ~ / Downloads /
mv debian-9.6.0-amd64-xfce-CD-1.iso ~ / debian /

Шаг 4. Перейдите в каталог ~ / debian и создайте файл образа QEMU

Теперь, когда у нас есть ISO-файл Debian и папка ~ / debian, мы фактически приступим к работе с QEMU. Следующее, что мы сделаем
, - это создадим файл образа QEMU. Это то, что будет содержать вашу виртуальную машину. По сути, это будет похоже на виртуальный жесткий диск.

Команда, которую мы будем использовать, называется qemu-img
. С помощью этой команды мы создадим файл образа с именем virtualdebian.img и предоставим ему 30 ГБ места на жестком диске. Вы можете изменить имя и количество места, которое вы ему предоставите.

qemu-img create -f qcow2 virtualdebian.img 30G

Этот шаг должен занять всего несколько секунд.

Шаг 5: Эмуляция открытия ISO-файла Debian как CD-ROM / DVD-привода и установка Debian на виртуальную машину

Это этап, который займет больше всего времени и на котором вы фактически установите Debian на виртуальную машину.На этом этапе очень важно правильно ввести команду, иначе вы можете потратить часы на отладку. Вы можете просто скопировать и вставить команду, которую я покажу вам ниже. Мы будем использовать команду kvm с множеством параметров. Первая часть команды, kvm -hda virtualdebian.img, сообщает kvm, что виртуальный образ - это virtualdebian.img, который мы создали ранее. Параметр -m 2048 сообщает kvm, что мы предоставляем ему 2 ГБ ОЗУ. Параметр -soundhw all делает все звуки доступными на виртуальной машине.Вы можете прочитать руководство kvm, если хотите узнать о других вариантах. Теперь просто скопируйте и вставьте в свой терминал следующее.

kvm -hda virtualdebian.img -cdrom debian-9.6.0-amd64-xfce-CD-1.iso -m 2048 -net nic -net user -soundhw all

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

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

После завершения установки Debian, чтобы выключить виртуальную машину, просто выключите виртуальную машину Debian, как если бы это была ваша основная ОС (но не выключайте свой основной компьютер). Вам останется только выключить виртуальную машину.

Шаг 6. Запускайте виртуальную машину Debian так часто, как хотите.

Теперь вся тяжелая работа сделана.Вы установили Debian в файл образа. Теперь, с этого момента, все, что вам нужно сделать для запуска вашей виртуальной машины Debian, - это выполнить следующую команду.
kvm -soundhw all -m 2048 -hda ~ / debian / virtualdebian.img

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

 Не удалось получить доступ к модулю ядра KVM: доступ запрещен
qemu-system-x86_64: не удалось инициализировать KVM: в доступе отказано
 

, тогда вам нужно будет добавить sudo к указанной выше команде kvm.

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

Если вы устали от использования виртуальной машины или думаете, что допустили ошибку, вы всегда можете повторить описанные выше шаги. Вы можете удалить файл virtualdebian.img, а затем создать новый, выполнив все остальные шаги.

Разное

Фактически вы можете заменить команду kvm на qemu-system-x86_64 , но не следует этого делать, если kvm доступен.QEMU НАМНОГО медленнее, чем при использовании KVM, и ваш процессор будет работать намного тяжелее при использовании QEMU. Итак, по возможности убедитесь, что вы используете KVM.

Вам понравилась эта статья? Есть что добавить? Давайте обсудим это в комментариях ниже.

pin / debian-vm-install: автоматическая установка виртуальной машины Debian с помощью virt-install и press.cfg

Хотя Debian Stretch еще не выпущен, скрипт использует daily-images .
Если вы хотите использовать Debian Jessie (например, текущую стабильную версию), пожалуйста, проверьте
выпуск v8.0 или обновить DIST_URL

Простой сценарий, использующий virt-install и настраивающий программу установки Debian
для автоматической установки и индивидуальной настройки с использованием preseed
config, чтобы создать недавно установленную гостевую систему Debian KVM.

  Использование: ./install.sh  [MAC_ADDRESS]

  GUEST_NAME используется как гостевое имя хоста, имя виртуальной машины и имя файла образа
  MAC_ADDRESS позволяет использовать определенный MAC в сети, это полезно
                когда DHCP-сервер ожидает, что у вашего гостя будет предопределенный MAC
  

Гостевая ОС - это минимальная установка Debian без графического интерфейса, настроенная с последовательной консолью
для возможности virsh console и сервера OpenSSH с вашим SSH
ключ и / или пароль предварительно настроены.

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

На самом деле, основной смысл совместного использования этого сценария - предоставить пример
автоматическое создание виртуальной машины Debian или база для вашего собственного скрипта.

Предварительные требования

  • virt-install: apt-get install virtinst
  • KVM / qemu: apt-get install qemu-kvm libvirt-daemon # что-то еще?

Что нужно проверить перед первым использованием

  • Установите ваше имя для входа и полное имя в поле preseed.cfg , обновите свое имя GitHub
    в install.sh , чтобы установить ваш SSH-ключ для аутентификации гостем.
    Если вы хотите использовать другой SSH-ключ, а не тот, который есть на GitHub, просто введите
    authorized_keys с по предварительно запрограммируют каталог и удалите команду wget , которая
    получает ключ из GitHub.
    Обновите свое имя для входа в postinst.sh , где установлен ключ SSH.
  • Стоит подумать о включении парольной аутентификации в preseed.cfg
    по крайней мере, во время первого запуска, чтобы вы могли virsh console в случае
    сетевое соединение в гостевой системе не использует DHCP или IP гостя
    неясно.
  • Проверьте размер RAM и размер диска для гостя в аргументах virst-install in
    install.sh и при необходимости измените их.
  • Добавьте apt-get install или что угодно в postinst.sh
    и любые файлы конфигурации, которые вы хотите добавить гостю в postinst
    каталог.

Конфигурация сети

Сценарий

лучше всего работает с мостовой сетью, когда гости могут использовать DHCP.
сервер. Если вам нужно что-то еще, замените br0 в аргументах на
virt-install в install.sh .

Пример конфигурации сети в / etc / network / interfaces :

  авто lo
iface lo inet loopback

auto eth0 # замените eth0 на ваше настоящее имя интерфейса
iface eth0 inet руководство

авто br0
iface br0 inet dhcp
        bridge_ports eth0
        bridge_stp выкл.
        bridge_fd 0
        bridge_maxwait 0
  

Подробнее

libvirt + QEMU + KVM + Debian - wdocs 1.0 документация

Проверить доступ к виртуализации ЦП:

 Судо Вирт-хост-проверка

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

sudo apt-get install cpu-checker
sudo kvm-ok
 

Проверить список источников Debian sources.list :

 deb http://ftp.de.debian.org/debian jessie main non-free
deb-src http://ftp.de.debian.org/debian jessie main несвободный
 

Освободить неиспользуемое пространство в файле-образе qcow2:

 # нулевая заливка гостя
dd if = / dev / zero of = / some / file
rm / некоторые / файл

# выключить ВМ

# на хосте
qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
 

qemu-img

Изображения и снимки - http://azertech.net/content/kvm-qemu-qcow2-qemu-img-and-snapshots

qemu-img инструмент:

 # Показать информацию (размер, резервные файлы, снимки)
qemu-img info 

# Создайте простой файл изображения QCOW2
qemu-img create -f qcow2   g

# Создать образ QCOW2, связанный с базовым образом
qemu-img create -b <базовый_образ> -f qcow2 -l <новое_образ>

# Список снимков
qemu-img snapshot -l <имя_имя>

# Создать снимок
qemu-img snapshot -c <имя-снимка> <имя-образа>

# Применить снимок
qemu-img snapshot -a <имя-снимка> <имя-изображения>

# Удалить снимок
qemu-img snapshot -d <имя-снимка> <имя-изображения>

# Клонировать изображение
qemu-img convert -p -f qcow2  -O qcow2 
 

Вложенная виртуализация

Проверка включена:

 cat / sys / module / kvm_intel / parameters / вложенный
# ДА или НЕТ
 

Включить вложенный модуль на хосте

 sudo sh -c "echo 'options kvm-intel nested = Y'> / etc / modprobe.d / kvm-intel.conf "

# перезагружаем или перезагружаем модуль ядра
modprobe -r kvm_intel
modprobe kvm_intel
 

Конфигурация в virt-manager

Убедитесь, что ваша виртуальная машина выключена. Откройте virt-manager, перейдите на страницу сведений о виртуальной машине для этой виртуальной машины. Щелкните на странице "Процессор". В разделе «Конфигурация» есть две опции: либо введите host-passthrough into to Model, либо установите флажок Copy host CPU configuration (который заполняет значение модели хоста в поле Model). Щелкните Применить. Разница между этими двумя значениями сложна, некоторые подробности указаны в ошибке 1055002.Для вложенного virt вы, вероятно, захотите использовать сквозную передачу хоста, пока не будут решены проблемы с моделью хоста. Однако имейте в виду, что сквозная передача хоста не рекомендуется для общего использования, только для вложенных целей.

Установите KVM, libvirt

 sudo apt-get update
sudo apt-get install qemu-kvm libvirt-bin qemu-utils
# adduser root libvirt
# adduser lee libvirt
 
 / etc / libvirt / # конфиги
/ etc / libvirt / storage / # конфигурации хранилища
/ var / lib / libvirt / # изображения, снимки и т. д.

Либвирт

/var/lib/libvirt/dnsmasq/virbr0.status - MAC / IP / имя хоста доменов

Domain.xml :

 #
# Перенаправление порта на машину
#

<тип домена = 'kvm' xmlns: qemu = 'http: //libvirt.org/schemas/domain/qemu/1.0'>
...
 -> 
...

   
   


#
# Пользовательский загрузчик ::
#


    <загрузчик readonly = 'yes' type = 'pflash'> / path_to / OVMF_CODE-pure-efi.fd 
     /path_to/fedora22_VARS.fd 


#
# Сеть
#


   

 

Виртуальный просмотрщик

 # подключиться через VNC
virt-viewer --connect qemu + ssh: // <пользователь> @ <хост> / system <домен>
 

Вирш CMD

Снимков:

 # получить список снимков
список моментальных снимков virsh <домен>

# получить информацию о снимке
virsh snapshot-info --domain <домен> --snapshotname <снимок>

# создать снимок
virsh snapshot-create-as <домен> --name  --description 

# удалить снимок
virsh snapshot-delete --domain <домен> --snapshotname 

# вернуться к снимку
virsh snapshot-revert <домен> --snapshotname 
 

Управление доменами:

 # определить домен из XML (без запуска)
virsh define <файл.xml>

# undefine domain из XML
virsh undefine <домен>
virsh undefine --nvram  # также удалить nvram
virsh undefine --remove-all-storage  # также удаляет хранилища

# показать список доменов
    virsh list # запускать домены
    virsh list --all # все домены

# генерировать xml из домена
    virsh dumpxml <домен>> <домен> .xml

# создать домен и запустить ВМ
    virsh create 

# принудительно выключить ВМ
    вирш уничтожить алису

# выключить ВМ
    выключение virsh <домен>

# приостановить / возобновить ВМ
    Вирш приостановить Алису
    virsh резюме Алиса

# добавляем домен в автозапуск при запуске хоста
    virsh autostart <домен>

# получить информацию о домене
    virsh dominfo <домен>

    # изменить домен xml
virsh edit <домен>

# получить VNC порт домена
virsh vncdisplay <домен>
 

Управление пулом:

 # показать список пулов (хранилищ)
    virsh pool-list # активные опросы
virsh pool-list --all # все пулы

    virsh pool-define-as  dir --target / etc / libvirt / images / # создать пул
    virsh pool-autostart  # добавить пул в автозапуск
    virsh pool-start  # запуск пула

virsh pool-destroy <бассейн>
virsh pool-undefine <пул>
 

Клонирование:

 virt-clone -o <от_домена> -n <к_домену> --auto-clone --original-xml <от_домена_xml>
 

Сеть:

 # показать все сети
список сетей virsh

# получить информацию о сети
virsh net-info <сеть>

# вывести информацию об аренде для данной сети
net-dhcp-leases <сеть>

# распечатать сети домена (MAC, тип и т. д.)
virsh domiflist <домен>
 

Конфигурация моста

 sudo apt-get update
sudo apt-get dist-upgrade

# установить драйверы
sudo apt-get install firmware-realtek firmware-linux

sudo apt-get install bridge-utils

нано /etc/sysctl.conf
        net.ipv4.ip_forward = 1

Создать мост ::

    sudo brctl addbr br0
 

Конфигурация сети / etc / network / interfaces :

 авто лоу
iface lo inet loopback

авто eth2
iface eth2 inet руководство

авто br0
iface br0 inet static
адрес
netmask <маска>
шлюз
DNS-серверы
bridge_ports eth2
bridge_stp выкл.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *