QEMU - полезные советы

Материал из Rosalab Wiki
Перейти к: навигация, поиск

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

Подробное (хотя и во многом неполное) описание работы с QEMU есть тут: http://qemu.weilnetz.de/qemu-doc.html

Создание образов дисков для виртуальных машин

Это делается с помощью qemu-img:

qemu-img create -f <format> <path_to_file> <size>

Можно создавать образы дисков в разных форматах. Если непонятно, какой формат выбрать, используйте формат "qcow2".

Пример. Cоздание образа диска размером 60 гигабайт:

qemu-img create -f qcow2 mydisk.qcow2 60G

Cам файл образа (mydisk.qcow2) после создания будет небольшого размера, а 60 гигабайт - этот размер увидит гостевая ОС.

Пример конфигурации QEMU-машины

Пример скрипта, который можно использовать для запуска QEMU-машины с использованием аппаратной виртуализации для x86-систем:

#!/bin/sh
# start_my_vm.sh

qemu-system-x86_64 \
    -name "ROSA-x64" \
    -smp 2 \
    -m 2G \
    -usb \
    -usbdevice tablet \
    -balloon virtio \
    -vga std \
    -drive file=/home/user/mydisk.qcow2,if=virtio,index=0,media=disk \
    -drive file=/home/user/my_second_disk.qcow2,if=virtio,index=1,media=disk \
    -drive file=/home/user/my_nvme.qcow2,if=none,id=drv0 -device nvme,drive=drv0,serial=cafef00d \
    -monitor stdio \
    -netdev user,id=network0,net=192.168.28.0/24,host=192.168.28.1,hostfwd=tcp::7028-:22 \
    -device e1000,netdev=network0,mac=C6:2E:79:26:18:6B \
    -vnc 127.0.0.1:31 \
    -soundhw ac97 \
    -cdrom /home/user/ROSA.FRESH.KDE.R1.i586.iso \
    -boot order=dc

Обратите внимание: после '\' пробелов быть не должно.

Описание конкретных параметров - ниже.

  • -name "ROSA-x64"

Имя данной виртуальной машины ("ROSA-x64").

  • -smp 2

Количество процессоров (2).

  • -m 2G

Объём памяти (2 гигабайта).

  • -usb

Включить поддержку USB.

  • -usbdevice tablet

Эмулировать absolute pointing device (tablet). Удобно, если использовать VNC.

  • -vga std

Эмулировать "стандартную" (для QEMU) видеокарту в виртуальной машине. При таких настройках в гостевой системе всё обычно работает стабильнее.

  • -drive file=/home/user/mydisk.qcow2,if=virtio,index=0,media=disk
  • -drive file=/home/user/my_second_disk.qcow2,if=virtio,index=1,media=disk

Подключить два образа HDD для гостевой системы, "mydisk.qcow2" и "my_second_disk.qcow2". Работа с ними пойдёт через virtio, это будет быстрее, чем при настройках по умолчанию.

Virtio-диски в гостевой системе будут видны как /dev/vda, /dev/vdb, ...

  • -drive file=/home/user/my_nvme.qcow2,if=none,id=drv0 -device nvme,drive=drv0,serial=cafef00d

Подключить образ диска "my_nvme.qcow2" как NVMe-устройство. Полезно, если нужно отладить или проверить что-то, связанное с работой такого рода устройств. Значение для "serial" можно задать и другое.

Устройство будет видно в системе как /dev/nvmeX и /dev/nvmeXnY. Разделы, созданые на этом устройстве, будут видны как /dev/nvmeXnYpZ, где X, Y, Z - числа.

  • -monitor stdio

В консоли, откуда запущен qemu-kvm, можно будет работать с вирт. машиной через QEMU Monitor, это бывает удобно.

  • -netdev user,id=network0,net=192.168.28.0/24,host=192.168.28.1,hostfwd=tcp::7028-:22
  • -device e1000,netdev=network0,mac=C6:2E:79:26:18:6B

Первая группа параметров указывает QEMU, что нужно эмулировать сетевую карту. Вторая - что гостевая система должна видеть эту сетевую карту как Intel PRO/1000 или совместимую (драйвер e1000). Если нужна не эмуляция Intel PRO/1000, а virtio устройство, укажите "virtio-net-pci" вместо "e1000".

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

echo 02$(hexdump -n5 -e '/1 ":%02X"' /dev/urandom)

Также здесь можно настроить следующие параметры сети:

    • user - используется реализация сетевых средств, не требующая прав администратора на хостовой системе.
    • net=192.168.28.0/24 - адрес и маска подсети, которые будут видны в гостевой системе; конкретный адрес будет назначен встроенным DHCP-сервером. Можно не задавать, тогда будут использованы значения по умолчанию (10.0.2.0/24).
    • host=192.168.28.1 - хостовая система будет видна под этим IP из гостевой системы. Можно не задавать, тогда будет использовано значение по умолчанию (x.x.x.2).
    • hostfwd=tcp::7028-:22 - TCP-запросы на указанный порт (7028) на хостовой системе будут направлены на порт 22 на гостевой системе.

Полезно для доступа по SSH с хостовой системы на гостевую:

ssh -p 7028 user_on_guest@localhost

Если меняется SSH key fingerprint (переустановлена гостевая ОС, ...), SSH, как обычно, будет ругаться при попытке подключения к гостевой системе. В таком случае нужно удалить на хостовой системе старые SSH-ключи:

ssh-keygen -R [localhost]:<port> -f ~/.ssh/known_hosts

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

  • -vnc address:port

Использовать VNC. Нередко это удобнее, чем стандартный для QEMU механизм графического вывода. В VNC-клиенте нужно будет подключаться по указанному адресу на порт 5900+<port> (5931 в данном случае).

  • -soundhw ac97

Здесь можно настроить, какую звуковую карту эмулировать.

  • -cdrom /home/user/ROSA.FRESH.KDE.R1.i586.iso

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

  • -boot order=dc

По умолчанию, гостевая система загружается с первого HDD. Если задать -boot order=dc, то сначала система будет пытаться загрузиться с первого CD-ROMа, если не получилось - с первого HDD.

Работа со snapshot'ами дисков

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

qemu-img snapshot [-q] [-l | -a имя_snapshot'а | -c имя_snapshot'а | -d имя_snapshot'а] путь_к_файлу_диска

Вывод список snapshot'ов для диска "mydisk.qcow2":

qemu-img snapshot -l mydisk.qcow2

Создание snapshot'а "snap1" для диска "mydisk.qcow2":

qemu-img snapshot -c "snap1" mydisk.qcow2

Восстановление состояния из snapshot'а "snap1":

qemu-img snapshot -a "snap1" mydisk.qcow2

Удаление snapshot'а "snap1":

qemu-img snapshot -d "snap1" mydisk.qcow2