QEMU - полезные советы — различия между версиями
Euspectre (обсуждение | вклад) (Новая страница: «На этой странице предлагается собирать разную полезную информацию по работе с [http://wiki.qemu…») |
Euspectre (обсуждение | вклад) (→Пример конфигурации QEMU-машины) |
||
(не показана одна промежуточная версия этого же участника) | |||
Строка 30: | Строка 30: | ||
# start_my_vm.sh | # start_my_vm.sh | ||
− | qemu- | + | qemu-system-x86_64 \ |
− | -name | + | -name "ROSA-x64" \ |
-smp 2 \ | -smp 2 \ | ||
-m 2G \ | -m 2G \ | ||
Строка 40: | Строка 40: | ||
-drive file=/home/user/mydisk.qcow2,if=virtio,index=0,media=disk \ | -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_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 \ | -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 \ | -vnc 127.0.0.1:31 \ | ||
-soundhw ac97 \ | -soundhw ac97 \ | ||
Строка 53: | Строка 54: | ||
Описание конкретных параметров - ниже. | Описание конкретных параметров - ниже. | ||
− | * ''-name | + | * ''-name "ROSA-x64"'' |
− | Имя данной виртуальной машины (" | + | Имя данной виртуальной машины ("ROSA-x64"). |
* ''-smp 2'' | * ''-smp 2'' | ||
Строка 83: | Строка 84: | ||
Virtio-диски в гостевой системе будут видны как <tt>/dev/vda</tt>, <tt>/dev/vdb</tt>, ... | Virtio-диски в гостевой системе будут видны как <tt>/dev/vda</tt>, <tt>/dev/vdb</tt>, ... | ||
+ | |||
+ | * ''-drive file=/home/user/my_nvme.qcow2,if=none,id=drv0 -device nvme,drive=drv0,serial=cafef00d'' | ||
+ | |||
+ | Подключить образ диска "my_nvme.qcow2" как NVMe-устройство. Полезно, если нужно отладить или проверить что-то, связанное с работой такого рода устройств. Значение для "serial" можно задать и другое. | ||
+ | |||
+ | Устройство будет видно в системе как <tt>/dev/nvmeX</tt> и <tt>/dev/nvmeXnY</tt>. Разделы, созданые на этом устройстве, будут видны как <tt>/dev/nvmeXnYpZ</tt>, где X, Y, Z - числа. | ||
* ''-monitor stdio'' | * ''-monitor stdio'' | ||
Строка 88: | Строка 95: | ||
В консоли, откуда запущен <tt>qemu-kvm</tt>, можно будет работать с вирт. машиной через [http://en.wikibooks.org/wiki/QEMU/Monitor QEMU Monitor], это бывает удобно. | В консоли, откуда запущен <tt>qemu-kvm</tt>, можно будет работать с вирт. машиной через [http://en.wikibooks.org/wiki/QEMU/Monitor 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, что нужно эмулировать сетевую карту. | + | Первая группа параметров указывает QEMU, что нужно эмулировать сетевую карту. Вторая - что гостевая система должна видеть эту сетевую карту как Intel PRO/1000 или совместимую (драйвер e1000). Если нужна не эмуляция Intel PRO/1000, а virtio устройство, укажите "virtio-net-pci" вместо "e1000". |
MAC-адрес задавать необязательно, просто, если не задать, QEMU будет использовать какой-то стандартный MAC-адрес. Неудобно, если нужно одновременно работать с несколькими вирт. машинами, так что лучше MAC задать. Для генерации валидных MAC-адресов можно использовать следующую команду: | MAC-адрес задавать необязательно, просто, если не задать, QEMU будет использовать какой-то стандартный MAC-адрес. Неудобно, если нужно одновременно работать с несколькими вирт. машинами, так что лучше MAC задать. Для генерации валидных MAC-адресов можно использовать следующую команду: | ||
Строка 99: | Строка 106: | ||
</pre> | </pre> | ||
− | + | Также здесь можно настроить следующие параметры сети: | |
**''user'' - используется реализация сетевых средств, не требующая прав администратора на хостовой системе. | **''user'' - используется реализация сетевых средств, не требующая прав администратора на хостовой системе. |
Текущая версия на 12:54, 8 декабря 2017
На этой странице предлагается собирать разную полезную информацию по работе с 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