Настройка qemu for windows

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

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

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

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

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

Прописываем драйвер и добавляем виртуальный флоппи-диск. Затем переходим на вкладку и проделываем финт с заменой шины диска: удаляем с IDE и добавляем с VirtIO.

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

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

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

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

Перемещаемся назад во времени

Чтобы пройти на один шаг вперёд, нужно выполнить команду stepi (или же просто si). Команда для шага назад называется reverse-stepi (или rsi). Работает это так. Вы даёте отладчику команду, он передаёт её эмулятору, эмулятор загружает более ранний снимок системы, а потом воспроизводит её работу до момента, предшествующего текущему шагу. Кстати, из этого следует, что за самый первый снимок зайти назад нельзя.

Если идти назад по одной инструкции, то до нужного места можно никогда не дойти. К счастью, есть команда reverse-continue (или rc). Правда, её не получится запустить и смотреть, как в песочных часах песок идёт вверх. Она предназначена для другого — искать, какая из точек останова (breakpoint, watchpoint) сработала бы последней, если бы программа выполнялась «нормально». Для этого опять используются снимки машины:

  1. Загружается предшествующий снимок

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

  3. Снова загружается предшествующий снимок

  4. Если сработавших точек останова не было, эмулятор переходит к п.1 с более ранним снимком, либо останавливается, если снимки кончились

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

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

  1. Ставим watchpoint на ячейку памяти, где хранится испорченный указатель

  2. Выполняем reverse continue

  3. Profit! Пристально смотрим на код, который нам этот указатель перезаписал

The -nic option

In case you don’t care about configuring every detail of a NIC, you can also create a NIC together with a host backend by using the -nic parameter. For example, you can replace

-netdev user,id=n1 -device virtio-net-pci,netdev=n1

with:

-nic user,model=virtio-net-pci

Use -nic model=help to get a list of the supported NIC models.

If you don’t care about the NIC model, you can also omit that option. So the shortest way to get a tap device is for example simply:

-nic tap

The NIC option should also be use to configure NICs on embedded systems (which can not be used via -device). For example, to connect such an on-board NIC to the tap backend and change its MAC-address, you can use the -nic option like this:

-nic tap,mac=02:ca:fe:f0:0d:01

Network Monitoring

You can monitor the network configuration using info network and info usernet commands.

You can capture network traffic from within QEMU using the filter-dump object, like this:

-netdev user,id=u1 -device e1000,netdev=u1 \
-object filter-dump,id=f1,netdev=u1,file=dump.dat

Once you’ve shut down QEMU, you can examine the dump.dat file with tools like Wireshark. Please note that network traffic dumping can only work if QEMU has a chance to see the network packets, i.e. this does not work if you use virtio-net with vhost acceleration in the kernel.

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

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

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

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

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

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

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

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

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

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

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

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

Сеть

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

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

Windows ВМ:

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

Шаг 4: Весёлая часть

Есть три способа получить ускоренный виртуальный дисплей VM с Windows на экране вашей машины.

  • VNC или какой-то другой протокол удалённого доступа (обычно это весьма плохое решение). В этом варианте вам нужно только подключить vGPU и отключить все остальные дисплеи и видеокарты. Также выставьте настройку . Вам не нужна опция , показанная позже.
  • SPICE (у меня не получилось добиться 30 FPS или выше, но работает общий буфер обмена и передача файлов между VM и хостом).
  • Встроенный интерфейс QEMU на GTK+ (общий буфер обмена и передача файлов не работают, но можно добиться 60 FPS с помощью патча).

Что бы вы ни собирались использовать, вам всё равно придётся использовать второй вариант, чтобы установить драйвера для GPU. Встроенные драйвера от Microsoft не очень хорошо работают с GVT-g на момент написания поста, и часто ломаются. До того, как вы подсоедините vGPU к ВМ, желательно скачать последнюю версию драйвера от Intel(Судя по всему, Intel меняет подход к распространению драйверов, так что в будущем этот шаг, возможно, будет другим, либо станет вообще не нужным). Теперь убедитесь, что у вас создан vGPU. Откройте и замените хороший быстрый QXL на медленный Cirrus во избежание конфликтов. Чтобы подключить vGPU к ВМ, нужно открыть и где-нибудь добавить такой фрагмент:

Замечание: Когда я предоставляю XML-фрагмент вроде этого, вам по возможности следует добавить его к текущему, не заменяя ничего.

Проверьте, что вы создали уникальные UUID для всех vGPU, которые вы используете, и что номера слотов не конфликтуют ни с какими из остальных PCI-устройств. Если номер слота находится после Cirrus GPU, виртуальная машина упадёт. Теперь вы можете запустить виртуальную машину. Нужно установить , чтобы увидеть оба дисплея! Подключиться к ВМ можно с помощью команды

Один из дисплеев будет пустой или не инициализированный, второй — уже знакомый маленький не ускоренный дисплей. Раскройте его и, войдя, установите драйвер для GPU. Если вам повезёт, всё заработает сразу же. В противном случае, надо выключить и снова запустить ВМ (не перезагрузить) с помощью работающего экрана. Теперь самое время открыть терминал и запустить внутри . Эта команда выдаст вам некоторую полезную информацию о проблемах и общем ходе работы с использованием vGPU. Например, при загрузке KVM будет жаловаться на заблокированные MSR, затем вы должны получить несколько сообщений о неправильном доступе, когда vGPU инициализируется. Если их слишком много — что-то не так.

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

Утилита CRU весьма полезна. Можете поиграться с ней, и даже если вы наткнётесь на какие-то графические артефакты или даже почти целиком чёрный экран, как получилось у меня, вы можете запустить файл , идущий в комплекте с программой, чтобы перезагрузить графическую подсистему Windows. Лично я использую эту утилиту для использования более высокого разрешения на более скромном vGPU.

Чтобы добиться прекрасных 60 FPS, нужно переключиться на встроенный монитор QEMU на GTK+ без поддержки общего буфера обмена с хостом и подобных плюшек, а также изменить в нём одну строчку и пересобрать QEMU. Также понадобится добавить пачку противных аргументов командной строки в ваш XML. Удалите дисплей SPICE и видеокарту Cirrus и установите атрибут у вашего vGPU в (libvirt не поддерживает дисплей на GTK+ и не позволит загрузиться с без дисплея).

Масштабирование для HiDPI у монитора QEMU работает из рук вон плохо, поэтому мы его отключим. Также, вам понадобится установить переменную в тот номер дисплея, который вы используете. Чтобы дать пользователю, запускающему qemu, права доступа к X серверу, используйте команду:

Если это не сработало, попробуйте , но убедитесь, что вы используете файрвол. Иначе попробуйте более безопасный метод.

Если вы потерялись где-то по пути, можете посмотреть мой текущий XML для libvirt.

Виртуализация операционных систем с помощью QEMU. Основы работы с эмулятором

Виртуализация — наиболее доступный способ запустить на одном ПК вторую операционную систему, не устанавливая ее непосредственно на жесткий диск. Вместо этого вторая ОС устанавливается на диск виртуальный, представленный специальным файлом-контейнером, созданным в гипервизоре — программе, позволяющей эмулировать работу гостевой системы в системе хостовой. Наибольшей популярностью среди домашних юзеров пользуются гипервизоры VirtualBox и VMware с мощным функционалом и наглядным GUI .

Но есть и другие, в чём-то даже более гибкие и продуктивные решения хотя и куда менее удобные в использовании. Например, QEMU — бесплатная программа с открытым исходным кодом, предназначенная для эмуляции программного обеспечения и операционных систем. Инструмент использует аппаратную виртуализацию, поддерживая два режима работы:

• Полная эмуляция — данный режим применяется для запуска операционных систем, в его рамках QEMU эмулирует физическое устройство со всеми его компонентами, встроенными и периферийными.

• Эмуляция пользовательского режима — дает возможность запускать программы, созданные для конкретной архитектуры на другой архитектуре, например, приложения ARM в x86 . Режим доступен только в хостовой системе Linux.

QEMU поддерживается эмуляция архитектуры x86 , ARM , MIPS , PowerPC , m68k , Alpha , SPARC , SH-4 , CRISv2 , MicroBlaze и это более солидный список, чем у того же Виртуалбокс.

Device Relationships

Device Relationships in QDev

The two main concepts in QDev are devices and busses. A device is represented
by a DeviceState and a bus is represented by a BusState. They do not share a
common base class. Devices can have properties but busses cannot. A device
has no direct relationship with other devices. The only relationship is
indirect through busses.

A device may have zero or more busses associated with it via a has-a
relationship. Each child bus may have multiple devices associated with it via
a reference. All devices have a single parent bus and all busses have a single
parent device. These relationships form a strict tree where every alternating
level is a bus level followed by a device level. The root of the tree is the
main system bus often referred to as SysBus.

Device Relationships in QOM

Everything in QOM is a device. The concept of busses are implemented as an
interface that a device implements. Devices can have two types of relationships
with other devices: device composition or device backlinks. Device composition
involves one device directly creating another device. It will own life cycle
management for the created device and will generally propagate events to that
device (although there are exceptions).

Device backlinks allow one device to refer to another device in a looser
fashion. While there can be only one device composition relationship that
exists between two specific devices, a device can participate in an arbitrary
number of backlinks.

Device composition and backlinks are both strongly typed and can be typed as a
specific device type or as an interface. When typed as an interface, any
device that implements that interface can be used.

There is no explicit notion of parents in QOM. A typical bus relationship
would the bus having a backlink to the child device, and the child device having
a backlink to the bus.

Without device backlinks, device composition forms a multi-rooted strict tree.
With backlinks, the result are multiple directed graphs.

Trying it

By hand

1. Start QMP on a TCP socket, so that telnet can be used

# qemu  -qmp tcp:localhost:4444,server,nowait

2. Run telnet

$ telnet localhost 4444

3. You should see QMP’s greeting banner

{"QMP": {"version": {"qemu": {"micro": 0, "minor": 6, "major": 1}, "package": ""}, "capabilities": []}}

4. Issue the qmp_capabilities command, so that QMP enters command mode

{ "execute": "qmp_capabilities" }

5. You can now issue commands. For example, to get a list of QMP supported commands, issue query-commands

{ "execute": "query-commands" }

There’s an optimization to this procedure in case you plan to use it often:

1. Install programs socat and rlwrap. If you’re running Fedora, you can do

# yum install socat rlwrap

2. Add the following sections to your QEMU config file (or create a qemu-qmp.conf one):

  backend = "socket"
  path = "path to the QMP unix socket"
  server = "on"
  wait = "off"

  mode = "control"
  chardev = "qmp"
  pretty = "on"

3. Run QEMU

# qemu  -readconfig qemu-qmp.conf

4. Run rlwrap

# rlwrap -C qmp socat STDIO UNIX:path-to-the-QMP-unix-socket

You can now issue commands, rlwrap will give you readline support (including persistent history).

qmp-shell script

1. Start QMP on a unix socket

# qemu  -qmp unix:./qmp-sock,server,nowait

2. Run the script

# qmp-shell ./qmp-sock

3. You should get the following prompt

(QEMU)

4. You can now issue commands. For example, let’s add a new device

(QEMU) device_add driver=e1000 id=net1

Установка qemu

Перед тем как мы сможем использовать программу, необходимо ее установить. Если вы используете дистрибутив Linux, например, Ubuntu, то сможете найти программу в официальных репозиториях. Для Ubuntu команда будет выглядеть вот так:

sudo apt install qemu-kvm qemu

Для Fedora и других систем RedHat можно установить группу Virtualization:

sudo dnf install @virtualization

В ArchLinux используйте Pacman:

Для Windows или MacOS вам нужно скачать исполняемый файл из официального сайта. Программа управляется только через терминал, так что вы главном меню системы ничего не появиться после установки. А теперь перейдем к тому как настроить qemu.

Шаг 2: создаём виртуального друга

Внутри можно найти целый набор директорий. Этот набор определяется количеством вашей графической памяти, каждая поддиректория соответствует некоторому типу виртуального GPU. Файл в ней содержит информацию о памяти и разрешениях, поддерживаемых данным виртульным GPU. Если создание виртуального GPU с большой памятью с помощью вывода UUID в файл вам выдаёт непонятную ошибку, то у вас есть несколько опций. Сперва стоит зайти в BIOS и добавить видеопамяти, если возможно. Если это не работает, можно остановить ваш DM, переключиться на фреймбуфер, создать нужный vGPU оттуда, а затем вернуться в x11. К сожалению, такой способ приводит ко многим багам и не даёт добиться 60 FPS на моём ноутбуке. Альтернативный вариант состоит в том, чтобы создать vGPU поменьше, и использовать специальную программу для увеличения разрешения (CRU). Таким способом мне удалось добиться 60 FPS и багов и зависаний встретилось гораздо меньше.

Создать vGPU можно такой командой:

А удалить — такой:

Примечание переводчика:Сгенерировать UUID для vGPU можно с помощью команды без аргументов. Переменная ${vGPU_TYPE} обозначает один из типов, перечисленных в директории . Также стоит заметить, что vGPU при каждой перезагрузке надо создавать заново, они не сохраняются между запусками ОС.

Usage

When QEMU is compiled with KQEMU support, the following option is added to QEMU:

 `-no-kqemu'
    Disable the usage of the QEMU Accelerator module (KQEMU). QEMU will work as usual but will be slower. This option can be useful to determine if emulation problems are coming from KQEMU. 
 `-kernel-kqemu'
    Enable full virtualization mode for best performances. This mode only works with the following guest OSes: Linux 2.4, Linux 2.6, Windows 2000 and Windows XP. WARNING: for Windows 2000/XP, you cannot use it during installation. See the next chapter for more information about full virtualization. 

When using KQEMU on a Linux or FreeBSD host, QEMU will create a big hidden file containing the RAM of the virtual machine. For best performance, it is important that this file is kept in RAM and not on the hard disk. QEMU uses the `/dev/shm’ directory to create this file because tmpfs is usually mounted on it (check with the shell command df). Otherwise `/tmp’ is used as fallback. You can use the QEMU_TMPDIR shell variable to set a new directory for the QEMU RAM file.

KQEMU has only been tested with Linux 2.4, Linux 2.6 and Windows 2000/XP as guest OSes. If your guest OS do not work with KQEMU, you can dynamically disable KQEMU with the `-no-kqemu’ option.

To see if kqemu is enabled and working correctly, use the QEMU monitor command:

 info kqemu

Конкретный пример

Рассмотрим драйвер, предназначенный для обрушивания системы (выходит, что это не отладка, ведь драйвер уже налажен и систему обрушивает успешно). Обработчик запросов в нём копирует случайное число байт, что, конечно же, частенько приводит к kernel panic. В этом состоянии никакой отладчик в системе уже не работает.

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

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

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

Загружаем в gdb символьную информацию о драйвере с помощью команды add-symbol-file и адреса, который выдала команда cat.

Наличие в выводе kernel panic вызова _stackchk_fail намекает нам на то, что содержимое стека было испорчено. Попробуем посмотреть, был ли перезаписан адрес возврата из функции. Для этого остановимся на последней её строке и поставим watchpoint на ту ячейку, где адрес возврата хранится.

После этого выполним команду reverse-continue. Вуаля! Мы остановились на строке, которая затирает адрес возврата и не даёт нам нормально выйти из функции:

Вот полный лог того, что происходило в отладчике:

Создаём диск из шаблона

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

Вызов команды , приведённый выше, выполняет сразу два действия: он создаёт одновременно и машину и диск. Из-за может сложиться неверное впечатление, что эти сущности неотделимы друг от друга.

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

Итак, что же нам позволяет сделать ? С помощью этой утилиты мы можем на лету сформировать уже «подготовленный» диск с уже установленной Ubuntu Server. Сделать это можно так:

Что же здесь происходит? Мы говорим, что хотели бы создать диск в формате (можно выбрать другой) и использовать в качестве основы шаблон ubuntu-18.04, который хранится в репозитории шаблонов в проекте . Команда скачает этот шаблон из Интернета и затем на его основе сгенерирует итоговый диск, в котором теперь будет установлена Ubuntu Server!

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

Обратите внимание, что исчез параметр , он нам больше не нужен. Также добавился параметр

Этот параметр указывает, что виртуалка будет загружаться не с cdrom, а с виртуального диска (то есть это влияет на Bios Boot Options виртуальной машины). Ну а т.к. диск у нас теперь содержит установленную Ubuntu Server, такая загрузка пройдёт успешно.

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

Как пользоваться qemu

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

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

VM snapshots¶

VM snapshots are snapshots of the complete virtual machine including CPU
state, RAM, device state and the content of all the writable disks. In
order to use VM snapshots, you must have at least one non removable and
writable block device using the disk image format. Normally
this device is the first virtual hard drive.

Use the monitor command to create a new VM snapshot or
replace an existing one. A human readable name can be assigned to each
snapshot in addition to its numerical ID.

Use to restore a VM snapshot and to remove a VM
snapshot. lists the available snapshots with their
associated information:

(qemu) info snapshots
Snapshot devices hda
Snapshot list (from hda):
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         start                   41M 2006-08-06 123802   000014.954
2                                 40M 2006-08-06 124329   000018.633
3         msys                    40M 2006-08-06 124404   000023.514

A VM snapshot is made of a VM state info (its size is shown in
) and a snapshot of every writable disk image. The VM
state info is stored in the first non removable and writable
block device. The disk image snapshots are stored in every disk image.
The size of a snapshot in a disk image is difficult to evaluate and is
not shown by because the associated disk sectors are
shared among all the snapshots to save disk space (otherwise each
snapshot would need a full copy of all the disk images).

When using the (unrelated) option
(),
you can always make VM snapshots, but they are deleted as soon as you
exit QEMU.

VM snapshots currently have the following known limitations:

Форматы виртуальных дисков

raw
в целом представляет собой просто набор данных, записанных в том же формате, как и на обычном блочном устройстве. Файл размера 5G будет занимать это место целиком, независимо от того, содержит он полезные данные или просто пустое пространство. (что не применимо к разреженным файлам — прим.пер)

qcow
Отличается от формата raw тем, что может быть инкрементным, потому он растет постепенно — это удобно для тех файловых систем, которые не поддерживают разреженные файлы, например FAT32. Этот формат также позволяет создавать отдельные инкрементные копии из одного базового диска. Использование такого «шаблона» экономит время и место на диске. Кроме того, он поддерживает AES шифрование и сжатие zlib. Недостатком является то, что, в отличии от raw-дисков, такой файл нельзя смонтировать на машину непосредственно на которой он находится. К счастью есть утилита qemu-nbd, которая может экспортировать этот файл как сетевое блочное устройство и затем подключить его к NBD устройсту.

qcow2
представляет собой обновленную версию формата qcow. Основное отличие заключается в том, что он поддерживает снапшоты. В остальном они принципиально не отличаются. Возможно также встретить qcow2, который внутри определяется как QCOW врсии 3, некогда давно он был включен в формат qcow2. Фактически, это модифицированный qcow2 с параметром lazy_refcounts, который используется для снапшотов. Так как разница всего лишь в одном бите, qemu-img с версии 1.7 имеет опцию «amend», чтобы изменить его. Более ранние версии qemu-img такой возможности не имеют. Если вы хотели изменить версию формата, необходимо было преобразовать виртуальный диск в новый файл, во время преобразования параметром compat устанавливалась версия, для которую нужно было уменьшить вместо «1.1» «0.10». Наличие опции «amend» удобно тем, что нет необходимости перезаписывать данные из-за таких незначительных изменений.

qed
Это инкрементный формат COW виртуального диска, который создает наименьшую нагрузку на хост. Он не поддерживает никакого сжатия и использует две параллельные таблицы для адресации блоков данных (кластеров). К сожалению, ни один разработчик в течение долгого времени не был заинтересован в его развитии, поэтому его использование несет некоторые проблемы, которые будут упомянуты.

vdi
формат виртуального диска, используемый системой виртуализации Oracle Virtualbox.

vmdk
формат виртуальных дисков, используемый продуктами VMware. Это тоже формат который позволяет файлу постепенно расти. Однако он имеет большое преимущество по сравнению с qcow2 и qed форматами, которые тоже могут использоваться с бездисковыми решениями или с сетевыми файловыми системами. Он позволяет вам иметь файл виртуального диска, разделенный на несколько мелких файлы с размерам по 2 ГБ. Это осталось еще с тех времен, когда файловые системы не могли создавать файлы размером более чем 2 ГБ. Преимущество состоит в том, что если такой виртуальный диск реплицируется по сети, то передаются меньшие объемы данных, а синхронизация выполняется намного быстрее (например в случае GlusterFS). В случае бездискового решения он также используется для хранения только небольших файлов с различиями для каждого снапшота

vhdx
формат виртуального диска, используемый системой виртуализации Microsoft Hyper-V

vpc
формат виртуального диска используемый системой виртуализации Microsoft VirtualPC.

Инкре
менти
рован
ие
Шифр
ование
Ком
прес
сия
Преал
локация
Шабл
ониз
ация
Проп
уски
Разделе
ние образа
Внутре
нние снапшо
ты
Проверка согласован
ности
Примечание
raw нет нет нет да нет нет нет нет нет Может быть смонтирован через loop
file да нет нет опцио
нально
нет нет нет нет нет Для Btrfs, следует отключать copy-on-write
qcow да да да нет да да нет нет нет
qcow2 да да да опцио
нально
да да нет да да
qed да нет нет нет да нет нет нет нет
vmdk да нет нет опцио
нально
да да? да нет нет
vdi да нет нет опцио
нально (static)
нет нет нет нет да
vhdx да нет нет опцио
нально (fixed)
нет да нет нет нет
vpc да нет нет опцио
нально (fixed)
нет нет нет нет нет
  1. Возможно использование только на преаллоцированных образах (fixed)

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

Для создания виртуальной машины можно воспользоваться графической утилитой Virtual Machine Manager. Найти её можно в меню Приложения — Системные — Менеджер виртуальных машин.

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

Для выбора образа нажмите Обзор и в открывшемся окне нажмите Выбрать файл. Найдите образ iso и откройте его, нажав на кнопку Открыть.

Выберите тип операционной системы — Linux. Версию — RHEL7. Нажмите Вперед.

Установите необходимое количество оперативной памяти и процессоров, которые будут доступны данной виртуальной машине. Минимально необходимые значения для РЕД ОС указаны на скриншоте ниже.

Выберите количество постоянной памяти, которое будет доступно виртуальной машине. Минимально рекомендуемым для РЕД ОС является 15 Гб.

Впишите название виртуальной машины в поле Название. Установите галку в пункте Проверить конфигурацию перед установкой. Выберите нужную вам сеть. Нажмите Готово.

Создаем виртуалку

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

Вот такой простой командой мы можем создать виртуальную машину с именем , 1024 Мегабайтами оперативной памяти, новым диском размером 8 Гигабайт. В виртуальном CD-приводе такой машины будет смонтирован установочный образ (конечно, этот образ надо предварительно скачать), который, как обычно, нужен для установки ОС на свежесозданную виртуалку.

Впрочем, если Вы выполните такую команду, то увидите как у вас запустилось графическое окно с VNC-клиентом, который подключается к консоли виртуальной машины. В этом окне Вы увидите начало установки Ubuntu Server 18.04. Конечно, реальный человек бы смог протыкать несколько клавиш на клавиатуре и установить Ubuntu Server, но мы лишены такой роскоши, ведь мы работаем исключительно консольными командами.

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

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

Для начала создайте образ для жесткого диска. По умолчанию он создается динамически расширяемым:

qemu-img create -f qcow2 /var/calculate/vbox/hdd.qcow2 20G

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

qemu-img create -f qcow2 -o preallocation=metadata hdd.qcow2 20G

Пример конфигурации виртуальной машины:

testkvm.xml

<domain type='kvm' id='1'>
  <features><acpi/></features>
  <name>testkvm</name>
  <description>Description of server</description>
  <memory unit='KiB'>1048576</memory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-1.3'>hvm</type>
    <boot dev='cdrom' />
    <boot dev='hd' />
    <bootmenu enable='yes'/>
  </os>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='writeback' io='threads'/>
      <source file='/var/calculate/vbox/hdd.qcow2'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/var/calculate/linux/css-18.12-x86_64.iso '/>
      <target dev='vdd' bus='virtio'/>
      <readonly/>
    </disk>
    <interface type='network'>
      <source network='default'/>
    </interface>
    <graphics type='vnc' port='5910' autoport='no'>
      <listen type='address'/>
    </graphics>
  </devices>
</domain>

В примере используется следующая конфигурация:

  • 1Гб оперативной памяти
  • 1 ядро процессора
  • система 64 бита
  • установочный образ Calculate Scratch Server 18.12
  • vnc-сервер на порту 5910.

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

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

virsh define testkvm.xml

Запустите машину:

virsh start testkvm

Для остановки машины выполните:

virsh destroy testkvm

Это экстренный останов сравнимый с выключением питания.

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

emerge -a sys-power/acpid

rc-update add acpid boot

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

virsh autostart testkvm

Чтобы отключить автозапуск, выполните:

virsh autostart —disable testkvm

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

qemu-system-x86_64 -name calculate -cpu host -smp 4 -enable-kvm -localtime -m 2048 -no-fd-bootchk -net nic,model=virtio,vlan=0 -net user,vlan=0 -drive file=hdd.img,index=0,media=disk,if=virtio -drive file=/mnt/iso/cldx-20150224-i686.iso,media=cdrom -monitor telnet:0.0.0.0:4008,server,nowait -spice port=5901,disable-ticketing -vga qxl -usb

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector