QEMU - полезные советы
На этой странице предлагается собирать разную полезную информацию по работе с 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