Qemu

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

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)

Подготовка

Самый первый шаг — настройка параметров ядра. Обязательна поддержка и , желательна поддержка туннельных интерфейсов и сетевого моста. Полный список на .

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

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

и образ iso будет записан в каталог . Также можно его скачать с репозитариев Fedora.Убедитесь, что поддержка аппаратной виртуализация включена в BIOS/UEFI. Без этого не будет активирован, а выдаст вот такую ошибку.

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

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

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

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

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

iSCSI LUNs¶

iSCSI is a popular protocol used to access SCSI devices across a computer
network.

There are two different ways iSCSI devices can be used by QEMU.

The first method is to mount the iSCSI LUN on the host, and make it appear as
any other ordinary SCSI device on the host and then to access this device as a
/dev/sd device from QEMU. How to do this differs between host OSes.

The second method involves using the iSCSI initiator that is built into
QEMU. This provides a mechanism that works the same way regardless of which
host OS you are running QEMU on. This section will describe this second method
of using iSCSI together with QEMU.

In QEMU, iSCSI devices are described using special iSCSI URLs. URL syntax:

iscsi//<username>%<password>@<host>[:<port>/<target-iqn-name>/<lun>

Username and password are optional and only used if your target is set up
using CHAP authentication for access control.
Alternatively the username and password can also be set via environment
variables to have these not show up in the process list:

export LIBISCSI_CHAP_USERNAME=<username>
export LIBISCSI_CHAP_PASSWORD=<password>
iscsi//<host>/<target-iqn-name>/<lun>

Various session related parameters can be set via special options, either
in a configuration file provided via ‘-readconfig’ or directly on the
command line.

If the initiator-name is not specified qemu will use a default name
of ‘iqn.2008-11.org.linux-kvm where <uuid> is the UUID of the
virtual machine. If the UUID is not specified qemu will use
‘iqn.2008-11.org.linux-kvm where <name> is the name of the
virtual machine.

Setting a specific initiator name to use when logging in to the target:

-iscsi initiator-name=iqn.qemu.testmy-initiator

Controlling which type of header digest to negotiate with the target:

-iscsi header-digest=CRC32C|CRC32C-NONE|NONE-CRC32C|NONE

These can also be set via a configuration file:

iscsi
  user = "CHAP username"
  password = "CHAP password"
  initiator-name = "iqn.qemu.test:my-initiator"
  # header digest is one of CRC32C|CRC32C-NONE|NONE-CRC32C|NONE
  header-digest = "CRC32C"

Setting the target name allows different options for different targets:

iscsi "iqn.target.name"
  user = "CHAP username"
  password = "CHAP password"
  initiator-name = "iqn.qemu.test:my-initiator"
  # header digest is one of CRC32C|CRC32C-NONE|NONE-CRC32C|NONE
  header-digest = "CRC32C"

How to use a configuration file to set iSCSI configuration options:

cat >iscsi.conf <<EOF

  user = "me"
  password = "my password"
  initiator-name = "iqn.qemu.test:my-initiator"
  header-digest = "CRC32C"
EOF

qemu-system-x86_64 -drive file=iscsi://127.0.0.1/iqn.qemu.test/1 \
  -readconfig iscsi.conf

How to set up a simple iSCSI target on loopback and access it via QEMU:
this example shows how to set up an iSCSI target with one CDROM and one DISK
using the Linux STGT software target. This target is available on Red Hat based
systems as the package ‘scsi-target-utils’.

Examples¶

Start a server listening on port 10809 that exposes only the
guest-visible contents of a qcow2 file, with no TLS encryption, and
with the default export name (an empty string). The command is
one-shot, and will block until the first successful client
disconnects:

qemu-nbd -f qcow2 file.qcow2

Start a long-running server listening with encryption on port 10810,
and whitelist clients with a specific X.509 certificate to connect to
a 1 megabyte subset of a raw file, using the export name ‘subset’:

qemu-nbd \
  --object tls-creds-x509,id=tls0,endpoint=server,dir=/pathtoqemutls \
  --object 'authz-simple,id=auth0,identity=CN=laptop.example.com,,\
            O=Example Org,,L=London,,ST=London,,C=GB' \
  --tls-creds tls0 --tls-authz auth0 \
  -t -x subset -p 10810 \
  --image-opts driver=raw,offset=1M,size=1M,file.driver=file,file.filename=file.raw

Serve a read-only copy of a guest image over a Unix socket with as
many as 5 simultaneous readers, with a persistent process forked as a
daemon:

qemu-nbd --fork --persistent --shared=5 --socket=/pathtosock \
  --read-only --format=qcow2 file.qcow2

Expose the guest-visible contents of a qcow2 file via a block device
/dev/nbd0 (and possibly creating /dev/nbd0p1 and friends for
partitions found within), then disconnect the device when done.
Access to bind qemu-nbd to an /dev/nbd device generally requires root
privileges, and may also require the execution of
to enable the kernel NBD client module. CAUTION: Do not use
this method to mount filesystems from an untrusted guest image — a
malicious guest may have prepared the image to attempt to trigger
kernel bugs in partition probing or file system mounting.

qemu-nbd -c devnbd0 -f qcow2 file.qcow2
qemu-nbd -d devnbd0

Query a remote server to see details about what export(s) it is
serving on port 10809, and authenticating via PSK:

Настраиваем SSH на виртуалке

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

  1. Прописать пароль для -пользователя в виртуалке;
  2. Создать ключи на виртуалке для SSH-сервера, чтобы он стартовал без ругани;
  3. Прописать в конфиг SSH-сервера возможность подключаться от имени рута с использованием пароля.

Начнём с пароля для . Здесь нас снова выручает , который, на самом деле, позволяет Вам делать с виртуальным диском поистине удивительные вещи, одна из которых — прописать пароль для -пользователя:

Теперь осталось сгенерировать ключи для SSH и подправить конфиг. Для этого нам надо всего-то надо выполнить пару команд:

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

И теперь… всё! Канал настроен! Можно было бы даже попробовать подключиться, если бы не одно «но». После выполнения команды виртуалка только-только начинает включаться. Между моментом включения виртуалки и запуском на ней ssh сервера может пройти несколько секунд. Поэтому нам потребуется организовать незатейливый механизм ожидания ssh сервера:

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

Opening a serial connection to the host

You can open a connection to a com port on the windows host by adding:

"-device usb-serial,chardev=com -chardev serial,path=com1,id=com"

to your command line. chardev=“” and id=“” have to match, but you can open a different com port by changing the path= parameter.

When you start Qemu, a window will open in which you can set the serial communication parameters.

Inside your Mac OS 9.x guest a FTDI driver is needed from: https://www.ftdichip.com/Drivers/VCP.htm (download the 1.0f4 version)

Once installed you can open a modem connection through the “USBHighSpeedSerialConverter”, or use a terminal emulator such as zterm.

qemu-img convert

Конвертации одного формата в другой при использовании образов дисков делается командой qemu-img convert:

qemu-img convert -c -f ft -O out_ft -o options fname out_fname

-c – компрессия (сжатие) диска.ВАЖНО: Компрессию поддерживают только и форматы. -f ft – формат исходного диска

Опция не обязательная, конвертер сам умеет считывать заголовок формата образа. Задается только, если при определении формата возникла ошибка

-f ft – формат исходного диска. Опция не обязательная, конвертер сам умеет считывать заголовок формата образа. Задается только, если при определении формата возникла ошибка.

-O out_ft – формат целевого диска (какой формат мы хотим получить в результате выполнения команды)

-o options – Различные опции, которые допустимы для конкретной конвертации.

Узнать что конкретно можно применить можно при помощи команды:

qemu-img convert -O qcow2 backup.img backup1.img -o ?
Supported options:
size Virtual disk size
compat Compatibility level (0.10 or 1.1)
backing_file File name of a base image
backing_fmt Image format of the base image
encryption Encrypt the image
cluster_size qcow2 cluster size
preallocation Preallocation mode (allowed values: off, metadata, falloc, full)
lazy_refcounts Postpone refcount updates
refcount_bits Width of a reference count entry in bits
nocow Turn off copy-on-write (valid only on btrfs)

Как вы заметили после параметра -o стоит знак вопроса.

Configuration

Host

To create a disk image for the virtual machine, run:

Since QEMU requires a lot of options, it would be a good idea to put them into a shell script, e.g.:

FILE

#!/bin/sh
exec qemu-system-x86_64 -enable-kvm \
        -cpu host \
        -drive file=WindowsVM.img,if=virtio \
        -net nic -net user,hostname=windowsvm \
        -m 1G \
        -monitor stdio \
        -name "Windows" \
        "$@"

Change the path to the disk image WindowsVM.img in the script. Additional options can be used when calling the script. To boot the disk image, run:

Install the Windows guest. See the for optimum support. After the installation start the script without the additional options.

NoteWhen upgrading to QEMU 1.3 the must be added to keep the guest responsive. Also change to to have a network interface in your guest.

NoteWhen upgrading to QEMU 1.5.3 you have to add to keep your full screen session full screen. Without this option I got a (new) menu bar at the top of the screen, pushing the Windows bottom menu off screen.

Guest

  • During installation at the partition step Windows doesn’t detect the VirtIO hard drive. Windows will require the viostor driver from the driver image listed above.
  • After installation the VirtIO Ethernet adapter will appear without a driver. Windows will require the netkvm driver from the driver image listed above.

For 32-bit Windows 7 a sound driver for the Intel 82801AA AC97 exists.

  • For 64-bit Windows 7 Intel HDA is available as an option (QEMU option: )
  • Windows 10 guest audio emulation is tricky for ALSA users. Pass these options to QEMU:
    • This assumes that you are using the default ALSA device for playback.
    • we cannot use AC97 for Windows 10 because there is no driver for it.
    • is an odd option, but without it I got nothing but clicks and pops during playback.
    • there may be more options required for line-in and line-out () or microphone and line-out ().

USB 2.0 pass through can be configured from host to guest with variations of: -usb -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=1452

  • For Windows 8.1 USB tablet is available only with USB 2.0 pass through (QEMU option:
  • Another device that can be presented to the Windows guest is the random number generator. Add QEMU option: . Now install the viorng driver from the driver image.

SPICE

QEMU with SPICE support enables (among other things) the more powerful QXL display device and makes clipboard sharing possible (copy/paste between clients and the virtual machine).

To use SPICE with QEMU enable the following USE flag in package.use:

FILE Setting USE variable

app-emulation/qemu   spice

Build QEMU:

Guest

If you want to try the new qlx-dod driver linked above, in order to use the driver you need to ‘update’ the basic windows display adapter driver and point it to the unzipped folder for the new driver. This can be found by: Right click the Start button -> Device Manager. Expand ‘Display adapters’ and right click on the sub entry and hit update driver.

Initialization script

FILE

#!/bin/sh
SPICE_PORT=5924
qemu-system-x86_64 -enable-kvm -daemonize \
    -cpu host \
    -drive file=WindowsVM.img,if=virtio \
    -net nic -net user,hostname=windowsvm \
    -m 1G \
    -vga qxl \
    -spice port=${SPICE_PORT},disable-ticketing \
    -usbdevice tablet \
    -device virtio-serial \
    -chardev spicevmc,id=vdagent,name=vdagent \
    -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 \
    "$@"
exec spicy --title Windows 127.0.0.1 -p ${SPICE_PORT}

FILE

#!/bin/sh
SPICE_PORT=5924
qemu-system-x86_64 -enable-kvm -daemonize \
    -cpu host \
    -drive file=WindowsVM.img,if=virtio \
    -net nic -net user,hostname=windowsvm \
    -m 1G \
    -vga qxl \
    -spice port=${SPICE_PORT},disable-ticketing \
    -usbdevice tablet \
    -device virtio-serial \
    -chardev spicevmc,id=vdagent,name=vdagent \
    -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 \
    "$@"
exec remote-viewer --title Windows spice://127.0.0.1:${SPICE_PORT}

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

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

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

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

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

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

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

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

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

Создание нового образа диска – qemu-img create

Пример создания нового диска для гостевой виртуальной машины внутри файловой системы хоста.

Формат команды:

qemu-img create -f ft fm size

Пример команды:

qemu-img create -f raw /RAID1/vm1.img 120G

где:

ft – формат образа диска.
В Ubuntu поддерживаются следующие форматы виртуальных дисков:
vmdk,
vdi,
raw,
host_cdrom,
host_floppy,
host_device file,
qcow2,
qcow,
parallels,
cow,
cloop
(есть еще другие, но я лично их не пробовал создавать).
В реальной жизни обычно необходимы для работы только несколько форматов:

  • raw  Формат “сырой диск».  Представляет из себя просто устройство без файловой системы и данных.  В общем случае данный форма предназначен для копий реальных дисков.  Формат не содержит служебной информации.
    Преимущества:  максимальная производительность дисковой подсистемы. Нет дополнительных действий в моменты чтения/записи по причине отсутствия служебной информации.Формат универсален, работает без проблем и дополнительных настроек  под управлением гипервизоров Xen и VMware.За счет выделения места под весь размер образа не подвержен дефрагментации на диске (актуально только для некоторых файловых систем на хосте).

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

  • qcow2  Формат  эмулятора QEMU.
    Поддерживает сжатие, создание снапшотов,  шифрование, как говорится из коробки.Преимущества: образ диска растет постепенно, по мере заполнения. Т.е. занимает столько места, сколько реально занимают данные внутри, вне зависимости от размера заданного при создании.Недостатки: производительность дисков в формате QCOW2 ниже за счет обработки дополнительных служебных инструкций при чтении и записи.

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

  • vdi  Формат образа для VirtualBox (уже давно не использовал, не рассматриваю).
  • vmdk Формат образа для VMware.
    Имеет смысл делать дисковый образ в формате vmdk только, если вы планируете сменить систему виртуализации с KVM на VMWARE в ближайшее время, в противном случае не рекомендую использовать данный формат в KVM. Дисковые операции выполняются намного медленнее, по сравнению с родной системой витуализации.

fname – Имя и путь к файлу образа диска.

ize – размер создаваемого диска.
Формат num<единицица измерения>.
Поддерживаются следующие сокращения единиц измерения: (Kilobyte), (Megabyte), (Gigabyte), (Terabyte).

sudo qemu-img create -f raw /RAID1/backup/backup.img 120G
Formatting '/RAID1/backup/backup.img', fmt=raw size=128849018880

Display options

There are a few available options to specify the kind of display to use in QEMU.

-display sdl — Display video output via SDL (usually in a separate graphics window).

-display curses — Displays video output via curses.

-display none — Do not display video output. This option is different than the -nographic option. See the man page for more information.

-display gtk — Display video output in a GTK window. This is probably the option most users are looking for.

-display vnc=127.0.0.1: — Start a VNC server on display X (accepts an argument (X) for the display number). Substitute X for the number of the display (0 will then listen on 5900, 1 on 5901, etc).

For example to have QEMU send the display to a GTK window add the following option to the list:

Получение отладочных сообщений

По умолчанию, отладочные сообщения ReactOS отправляются в последовательный порт (COM1).

Для получения этих данных, вам потребуется QEMU версии 0.6.1 или более поздней, позволяющие задать параметр -serial.

Примеры:

-serial file:"C:\roslog.txt" -serial pipe:"\\pipe1\" -serial COM4

Перенаправление в файл

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

-serial file:FILENAME

Замените FILENAME именем файла, в который будут выводиться отладочные сообщения.

Перенаправление в консоль

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

В Windows, добавьте следующий параметр в командную строку QEMU:

-serial file:CON

В Unix-системе, добавьте следующий параметр в командную строку QEMU:

-serial stdio

Соединение с последовательным портом при использовании com0com

Установите драйвер com0com как описано в руководстве по Com0com.

Добавьте следующий параметр в командную строку QEMU

 -serial COM4

Пишите «COM4» только заглавными буквами, иначе QEMU не сможет использовать последовательный порт!

Откройте клиент терминала и подключитесь ко второму виртуальному порту. Если этого порта в списке нет, то попробуйте COM4.

NVMe disk images¶

NVM Express (NVMe) storage controllers can be accessed directly by a userspace
driver in QEMU. This bypasses the host kernel file system and block layers
while retaining QEMU block layer functionalities, such as block jobs, I/O
throttling, image formats, etc. Disk I/O performance is typically higher than
with using either thread pool or linux-aio.

The controller will be exclusively used by the QEMU process once started. To be
able to share storage between multiple VMs and other applications on the host,
please use the file based protocols.

Before starting QEMU, bind the host NVMe controller to the host vfio-pci
driver. For example:

# modprobe vfio-pci
# lspci -n -s 0000:06:0d.0
06:0d.0 0401: 1102:0002 (rev 08)
# echo 0000:06:0d.0 > /sys/bus/pci/devices/0000:06:0d.0/driver/unbind
# echo 1102 0002 > /sys/bus/pci/drivers/vfio-pci/new_id

# qemu-system-x86_64 -drive file=nvme://HOST:BUS:SLOT.FUNC/NAMESPACE

Alternative syntax using properties:

qemu-system-x86_64 -drive file.driver=nvme,file.device=HOST:BUS:SLOT.FUNC,file.namespace=NAMESPACE

HOST:BUS:SLOT.FUNC is the NVMe controller’s PCI device
address on the host.

Установка и начальное конфигурирование

Установите необходимый для виртуализации набор пакетов из стандартного репозитория.
Если вы используете РЕД ОС версии 7.1 или 7.2, выполните команду:

yum install qemu-kvm libvirt libvirt-python virt-install virt-manager openssh-askpass OVMF

Если вы используете РЕД ОС версии 7.3 и старше, выполните команду:

dnf install qemu-kvm libvirt virt-install virt-manager openssh-askpass OVMF

Включите автозапуск службы libvirtd

systemctl enable libvirtd && systemctl start libvirtd

Перезагрузите компьютер для загрузки модулей ядра kvm (если у вас процессор Intel так же должен загрузиться модуль intel-kvm).

После перезагрузки, проверьте загрузку модулей.

# lsmod | grep kvm
kvm_intel             196608    3
kvm                   598016    1     kvm_intel

Так же проверьте сетевые подключения

ifconfig

Должен появиться дополнительное подключение vbr0.

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

usermod -a -G libvirt user

На этом установка и начальное конфигурирование завершено.

Configuration

Permissions

In order to run a KVM accelerated virtual machine without logging as root, add normal users to the kvm group. Replace in the example command below with the appropriate user(s):

Front ends

To make life easier, there are multiple user-friendly front ends to QEMU:

Name Package Homepage Description
AQEMU Graphical interface for QEMU and KVM emulators, using Qt5.
GNOME Boxes GNOME App to manage virtual and remote machines.
libvirt C toolkit to manipulate virtual machines.
QtEmu Qt-based front-end for QEMU.
qt-virt-manager A graphical user interface for libvirt written in Qt5.
A graphical tool for administering virtual machines.

virt-manager

NoteWhen using virt-manager, be sure to enable the and USE flags on the qemu package for correct operation.

After emerging, to run virt-manager as a normal user, ensure each user has been added to the libvirt group:

Uncomment the following lines from the libvirtd configuration file:

FILE

auth_unix_ro = "none"
auth_unix_rw = "none"
unix_sock_group = "libvirt"
unix_sock_ro_perms = "0777"
unix_sock_rw_perms = "0770"

Be sure to have the user log out then log in again for the new group settings to be applied.

NoteThe libvirt group might not have been created, in which case another group, such as wheel can be used.

Issue the following command to restart the libvirtd service under OpenRC:

Issue the following command to restart the libvirtd service under systemd:

virt-admin should now be launchable as a regular user.

NoteIf permission denied issues are experienced when loading ISO images user directories (somewhere beneath /home/) then the /var/lib/libvirt/images/ directory can be used to store the images.

libvirt recommended kernel config

In addition to the kernel requirements listed above, the following kernel config is recommended by the libvirt installer; check the logs to see if any additional ones are requested by the build.

KERNEL

*   CONFIG_BRIDGE_EBT_MARK_T
Depends on: NET = y, NETFILTER = y, BRIDGE_NF_EBTABLES=y
Location:
-> Networking support (NET=y)
   -> Networking options
         -> Network packet filtering framework (Netfilter) (NETFILTER )                                              
             -> Ethernet Bridge tables (ebtables) support (BRIDGE_NF_EBTABLES )
 *   CONFIG_BRIDGE_NF_EBTABLES
Depends on: Net = y, bridge = y, netfilter = y, netfilter_xtables = y
location:
networkign support
     -> networking options
            -> network packet filtering framework (Netfilter) = y
 *   CONFIG_NETFILTER_ADVANCED depends on the above (Net = y, netfilter = y)

 *   CONFIG_NETFILTER_XT_CONNMARK

 *   CONFIG_NETFILTER_XT_TARGET_CHECKSUM
 *   CONFIG_IP6_NF_NAT
 *   CONFIG_BRIDGE_EBT_T_NAT
 *   CONFIG_NET_ACT_POLICE
 *   CONFIG_NET_CLS_FW:
 *   CONFIG_NET_CLS_U32
 *   CONFIG_NET_SCH_HTB
 *   CONFIG_NET_SCH_INGRESS:
 *   CONFIG_NET_SCH_SFQ

Как работает обратная отладка

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

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

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:

Qemu-system-ppc installation

  • Go to http://www.emaculation.com/forum/viewtopic.php?f=34&t=9028 and download our latest build from the official Qemu source.
  • Create a folder for Qemu-related files and unpack the download. Put your Mac OS/OSX disk images in this folder.
  • Create an empty disk image with qemu-img.exe. Open a command prompt and navigate to your Qemu folder.
qemu-img.exe create -f raw -o size=2G MacOS9.2.img 
  • Open your favorite text editor and create a file called qemu.bat in your qemu folder. (If one is contained in the download, edit that one).
  • Paste the code below into the file:

qemu-system-ppc.exe ^

-L pc-bios ^

-M mac99,via=pmu ^

-m 512 ^

-sdl ^

-boot d ^

-drive file=MacOS9.2.iso,format=raw,media=cdrom ^

-drive file=MacOS9.2.img,format=raw,media=disk

Save qemu.bat

Short explanation of the content of the file:

qemu-system-ppc.exe starts qemu with all of the following as parameters:

  • -L pc-bios defines the location of bios files to be used.
  • -M mac99,via=pmu defines the mac model used(*).
  • -m 512 defines the amount of memory (in Mb) for OS9/OSX.
  • -sdl instructs Qemu to use SDL for the graphical display
  • -boot d defines to boot from a drive entry marked as a cdrom, “-boot c” would define to boot from a drive entry marked as disk.
  • -drive file=MacOS9.2.iso,format=raw,media=cdrom defines the name, location, format, and type of image (cdrom) file to be used
  • -drive file=MacOS9.2.img,format=raw,media=disk defines the name, location, format, and type of image (disk) file to be used

(*)The mac model entry accepts 3 options for the via parameter:

mac99,via=pmu (with PMU, supporting usb mouse and keyboard)

mac99,via=pmu-adb (this allows some older Mac OS/Mac OS server builds to use a keyboard and mouse through the adb bus)

mac99,via=cuda (default, this allows use of the older adb (Apple Desktop Bus), now less supported cuda)

Double-click qemu.bat. This starts Qemu and boots the MacOS9.2.iso installation CD image.

Disk image file locking¶

By default, QEMU tries to protect image files from unexpected concurrent
access, as long as it’s supported by the block protocol driver and host
operating system. If multiple QEMU processes (including QEMU emulators and
utilities) try to open the same image with conflicting accessing modes, all but
the first one will get an error.

This feature is currently supported by the file protocol on Linux with the Open
File Descriptor (OFD) locking API, and can be configured to fall back to POSIX
locking if the POSIX host doesn’t support Linux OFD locking.

To explicitly enable image locking, specify “locking=on” in the file protocol
driver options. If OFD locking is not possible, a warning will be printed and
the POSIX locking API will be used. In this case there is a risk that the lock
will get silently lost when doing hot plugging and block jobs, due to the
shortcomings of the POSIX locking API.

QEMU transparently handles lock handover during shared storage migration. For
shared virtual disk images between multiple VMs, the “share-rw” device option
should be used.

By default, the guest has exclusive write access to its disk image. If the
guest can safely share the disk image with other writers the
parameter can be used. This is only safe if
the guest is running software, such as a cluster file system, that
coordinates disk accesses to avoid corruption.

Note that share-rw=on only declares the guest’s ability to share the disk.
Some QEMU features, such as image file formats, require exclusive write access
to the disk image and this is unaffected by the share-rw=on option.

Alternatively, locking can be fully disabled by “locking=off” block device
option. In the command line, the option is usually in the form of
“file.locking=off” as the protocol driver is normally placed as a “file” child
under a format driver. For example:

-blockdev driver=qcow2,file.filename=/pathtoimage,file.locking=off,file.driver=file
Добавить комментарий

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

Adblock
detector