QEMU - полезные советы — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(Новая страница: «На этой странице предлагается собирать разную полезную информацию по работе с [http://wiki.qemu…»)
 
Строка 30: Строка 30:
 
# start_my_vm.sh
 
# start_my_vm.sh
  
qemu-kvm \
+
qemu-system-x86_64 \
     -name my_vm \
+
     -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 \
     -net nic,vlan=0,model=virtio,macaddr=C6:2E:79:26:18:6B \
+
     -netdev user,id=network0,net=192.168.28.0/24,host=192.168.28.1,hostfwd=tcp::7028-:22 \
    -net user,vlan=0,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 my_vm''
+
* ''-name "ROSA-x64"''
  
Имя данной виртуальной машины ("my_vm").
+
Имя данной виртуальной машины ("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], это бывает удобно.
  
* ''-net nic,vlan=0,model=virtio,macaddr=C6:2E:79:26:18:6B''
+
* ''-netdev user,id=network0,net=192.168.28.0/24,host=192.168.28.1,hostfwd=tcp::7028-:22''
* ''-net user,vlan=0,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, что нужно эмулировать сетевую карту. С virtio должно быть быстрее, но при желании можно эмулировать и какую-то реальную сетевую карту: pcnet, rtl8139, e1000, ...
+
Первая группа параметров указывает QEMU, что нужно эмулировать сетевую карту. Вторая - что гостевая система должна видеть эту сетевую карту как Intel PRO/1000 или совместимую (драйвер e1000).
  
 
MAC-адрес задавать необязательно, просто, если не задать, QEMU будет использовать какой-то стандартный MAC-адрес. Неудобно, если нужно одновременно работать с несколькими вирт. машинами, так что лучше MAC задать. Для генерации валидных MAC-адресов можно использовать следующую команду:
 
MAC-адрес задавать необязательно, просто, если не задать, QEMU будет использовать какой-то стандартный MAC-адрес. Неудобно, если нужно одновременно работать с несколькими вирт. машинами, так что лучше MAC задать. Для генерации валидных MAC-адресов можно использовать следующую команду:
Строка 99: Строка 106:
 
</pre>
 
</pre>
  
Во второй группе параметров (''-net user ...'') можно настроить параметры сети:
+
Также здесь можно настроить следующие параметры сети:
  
 
**''user'' - используется реализация сетевых средств, не требующая прав администратора на хостовой системе.
 
**''user'' - используется реализация сетевых средств, не требующая прав администратора на хостовой системе.

Версия 18:00, 21 ноября 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).

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