imported>Vix |
imported>Supportadmin |
Строка 1: |
Строка 1: |
| Оригинал: [http://xmodulo.com/use-kvm-command-line-debian-ubuntu.html How to use KVM from the command line on Debian or Ubuntu]
| |
| <br>Автор: Dan Nanni
| |
| <br>Дата публикации: 27 февраля 2014 года
| |
| <br>Перевод: А. Кривошей
| |
| <br>Дата перевода: декабрь 2014 г.
| |
| Есть несколько способов управлять виртуальными машинами, запущенными в гипервизоре KVM, например с помощью популярного графического фронтенда virt-manager. Однако, если вы хотите использовать KVM на сервере, графические решения вряд ли будут хорошим выбором. В этом случае удобным инструментом будет virsh - утилита командной строки для управления гостевыми виртуальными машинами. Она работает со службой libvirtd, которая может управлять несколькими различными гипервизорами, включая KVM, Xen, QEMU, LXC и OpenVZ.
| |
| Интерфейс командной строки virsh также полезен в случае, если вы хотите автоматизировать инициализацию и управление виртуальными машинами. Кроме того, способность virsh работать с различными гипервизорами обеспечивает единый интерфейс для управления виртуальными машинами различных типов.
| |
| В этом руководстве я продемонстрирую вам, как запускать KVM из командной строки с использованием virsh в Debian или Ubuntu.
| |
| <h2>Этап 1: проверка аппаратной поддержки виртуализации</h2>
| |
| В качестве первого этапа проверьте, поддерживает ли ваш процессор аппаратную виртуализацию (то есть Intel VT или AMD-V), которая требуется для KVM. Это можно сделать с помощью команды:
| |
|
| |
|
| '''$ egrep '(vmx|svm)' --color /proc/cpuinfo'''
| |
|
| |
| flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp<br>
| |
| lm constant_tsc up arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid <br>
| |
| sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi ept<br>
| |
| vpid fsgsbase smep
| |
|
| |
| Если в выводе нет флага vmx или svm, это значит, что процессор не поддерживает аппаратную виртуализацию, поэтому вы не сможете использовать KVM на этом хосте. После проверки самое время установить KVM.<br>
| |
| <h2>Этап 2: Установка KVM</h2>
| |
| Установите KVM и соответствующие пользовательские утилиты с помощью apt-get:
| |
|
| |
| '''$ sudo apt-get install qemu-kvm libvirt-bin'''
| |
|
| |
| Во время инсталляции будет создана группа libvirtd, и ваш userID будет автоматически добавлен в группу. Это позволит вам управлять виртуальными машинами от имени обычного пользователя. Вы можете проверить это с помощью команды id, которая выводит ваш group ID.
| |
|
| |
| '''$ id your-userID'''
| |
|
| |
| [[Файл:Group-id.jpg]]
| |
|
| |
| Если по каким-либо причинам в списке вашего groupID нет libvirtd, вы можете вручную добавить себя в эту группу.
| |
|
| |
| '''$ sudo adduser [youruserID] libvirt'''
| |
|
| |
| Перезагрузите обновленную информацию о группе, как показано ниже. Когда появится запрос, введите свой пользовательский пароль.
| |
|
| |
| '''$ exec su -l $USER'''
| |
|
| |
| Теперь вы можете запускать virsh как обычный пользователь. В качестве теста попробуйте приведенную ниже команду, которая выведет список доступных виртуальных машин. Если вы не получите сообщение об ошибке прав доступа, значит все в порядке.
| |
|
| |
| '''$ virsh --connect qemu:///system list'''
| |
|
| |
| Id Name State
| |
| ----------------------------------------------------
| |
|
| |
| <h2>Этап 3: Настройка сетевого моста</h2>
| |
| Один из способов получения доступа из виртуальной машины к внешним сетям - мост, встроенный в ваш хост Linux. Это называется сетевой мост. Ниже описано, как создать и настроить сетевой мост Linux br0 для мостового соединения с KVM.
| |
| Сначала установим необходимый для создания сетевого моста пакет.
| |
|
| |
| '''$ sudo apt-get install bridge-utils'''
| |
| '''$ sudo brctl addbr br0'''
| |
|
| |
| Далее необходимо настроить сетевой мост в файле /etc/network/interfaces, чтобы он активировался при загрузке системы.<br>
| |
| Для использования файла /etc/network/interfaces необходимо отключить '''Network Manager''' (если он у вас используется).<br>
| |
| Как это сделать, описано [http://xmodulo.com/disable-network-manager-linux.html здесь].<br>
| |
| После отключения '''Network Manager''' настраиваем сетевой мост br0 в /etc/network/interfaces, как показано ниже.<br>
| |
| #auto eth0
| |
| #iface eth0 inet dhcp
| |
|
| |
| auto br0
| |
| iface br0 inet dhcp
| |
| bridge_ports eth0
| |
| bridge_stp off
| |
| bridge_fd 0
| |
| bridge_maxwait 0
| |
|
| |
| Здесь предполагается, что главным сетевым интерфейсом, который имеет доступ к внешним сетям, является eth0. Кроме того, предполагается, что eth0 получает IP-адреса посредством DHCP. Обратите внимание, что в /etc/network/interface нет настроек для eth0, так как он подключается к сетевому мосту br0.
| |
| Перезагрузите сетевые службы и убедитесь, что сетевой мост настроен успешно. В этом случае br0 должен присвоить сетевой адрес интерфейса eth0, в свою очередь интерфейсу eth0 не должно быть присвоено сетевого адреса.
| |
|
| |
| '''$ sudo /etc/init.d/networking restart'''
| |
| '''$ ifconfig'''
| |
|
| |
| [[Файл:Br-utils.jpg]]
| |
|
| |
| <h2>Этап 4: создание виртуальной машины из командной строки</h2>
| |
| В KVM настройки виртуальной машины хранятся в XML-файле домена. Поэтому сначала необходимо подготовить этот файл.<br>
| |
| Если нет необходимого вам файла конфигурации, то его можно создать командой:<br>
| |
| '''virt-install --name=guest_name --arch=x86_64 --vcpus=1 --ram=512 --os-type=linux --os-variant=rhel5 --hvm'''
| |
| '''--connect=qemu:///system --network bridge:br0 --cdrom=/var/lib/libvirt/images/rhel5-x86_64.iso'''
| |
| '''--disk path=/mnt/virtual_machines/guest_name.img,size=20 --accelerate --vnc --noautoconsole --keymap=es'''
| |
|
| |
| * Описание краткое команды ENG [https://acidborg.wordpress.com/2010/02/18/how-to-create-virtual-machines-using-kvm-kernel-based-virtual-machine/ тут]:<br>
| |
|
| |
| Explanation of the params:
| |
|
| |
| name: name of the guest.
| |
| arch: architecture of the guest.
| |
| vcpus: number of CPUs assigned to the guest.
| |
| ram: MB of RAM assigned to the guest.
| |
| os-type and os-variant: available options can be checked using man virt-install.
| |
| hvm: use full virtualization.
| |
| connect: connect to the hypervisor.
| |
| network bridge: the bridge to use for the guest.
| |
| cdrom: the ISO of the operating system to install.
| |
| disk path=x,size=y: path and size of the image file for the guest.
| |
| accelerate: make use of the KVM acceleration capabilities if available.
| |
| vnc: export a virtual console over VNC to the guest.
| |
| noautoconsole: Don’t automatically try to connect to the guest console.
| |
| keymap: keyboard layout for the VNC console
| |
| Use a VNC client to connect to the guest (port 5900 or 5901 if you already have a VNC server listening on port 5900)
| |
| and install the operating system.
| |
|
| |
| Ниже пример простого XML-файла для виртуальной машины. Вы можете использовать его, откорректировав в соответствии со своими потребностями.
| |
|
| |
| <domain type='kvm'>
| |
| <name>alice</name>
| |
| <uuid>f5b8c05b-9c7a-3211-49b9-2bd635f7e2aa</uuid>
| |
| <memory>1048576</memory>
| |
| <currentMemory>1048576</currentMemory>
| |
| <vcpu>1</vcpu>
| |
| <os>
| |
| <type>hvm</type>
| |
| <boot dev='cdrom' />
| |
| </os>
| |
| <features>
| |
| <acpi />
| |
| </features>
| |
| <clock offset='utc' />
| |
| <on_poweroff>destroy</on_poweroff>
| |
| <on_reboot>restart</on_reboot>
| |
| <on_crash>destroy</on_crash>
| |
| <devices>
| |
| <emulator>/usr/bin/kvm</emulator>
| |
| <disk type="file" device="disk">
| |
| <driver name="qemu" type="raw" />
| |
| <source file="/home/dev/images/alice.img" />
| |
| <target dev="vda" bus="virtio" />
| |
| <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0" />
| |
| </disk>
| |
| <disk type="file" device="cdrom">
| |
| <driver name="qemu" type="raw" />
| |
| <source file="/home/dev/iso/ubuntu-13.10-server-amd64.iso" />
| |
| <target dev="hdc" bus="ide" />
| |
| <readonly />
| |
| <address type="drive" controller="0" bus="1" target="0" unit="0" />
| |
| </disk>
| |
| <controller type="ide" index="0">
| |
| <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1" />
| |
| </controller>
| |
| <interface type='bridge'>
| |
| <mac address='52:54:aa:00:f0:51' />
| |
| <source bridge='br0' />
| |
| </interface>
| |
| <input type='mouse' bus='ps2' />
| |
| <graphics type='vnc' port='-1' autoport="yes" listen='127.0.0.1' />
| |
| </devices>
| |
| </domain>
| |
|
| |
|
| |
| Этот XML-файл определяет следующую виртуальную машину:
| |
| 1 Гб оперативной памяти, один CPU и один жесткий диск.<br>
| |
| Образ диска: /home/dev/images/alice.img.<br>
| |
| Загрузка с CD: (/home/dev/iso/ubuntu-13.10-server-amd64.iso).<br>
| |
| Сеть: сетевой мост br0.<br>
| |
| Строка UUID между тегами <uuid></uuid> может быть сгенерирована случайным образом.<br>
| |
| Для этого используется утилита командной строки uuid.<br>
| |
| '''$ sudo apt-get install uuid'''
| |
| '''$ uuid'''
| |
|
| |
| Доменный XML-файл можно также создать, сделав дамп информации о домене существующей виртуальной машины:
| |
|
| |
| '''$ virsh --connect qemu:///system dumpxml alice > bob.xml'''
| |
|
| |
| [[Файл:Virsh0.jpg]]
| |
|
| |
| <h2>Этап 5: запуск виртуальной машины из командной строки.</h2>
| |
| Перед запуском виртуальной машины необходимо создать образ диска для нее. Для этого можно воспользоваться командой qemu-img, входящей в пакет qemu-kvm.
| |
|
| |
| '''$ qemu-img create -f qcow2 /home/dev/images/alice.img 5G'''
| |
|
| |
| Преимущество опции qcow2 в том, что создаваемый при ее использовании образ диска не резервирует сразу весь свой свой объем (5 Гб), а динамически увеличивается при наполнении в процессе работы виртуальной машины.<br>
| |
| Если необходимо сделать сразу жестко заданный размер то команда будет такой:<br>
| |
| '''qemu-img create -q /home/dev/images/alice.img 5G'''
| |
|
| |
| Теперь вы готовы к запуску виртуальной машины с использованием созданного ранее доменного XML-файла. Это делается с помощью приведенной ниже команды:
| |
|
| |
| '''$ virsh --connect qemu:///system create alice.xml'''
| |
|
| |
| Domain alice created from alice.xml
| |
|
| |
| Проверьте, что домен создан успешно.
| |
|
| |
| '''$ virsh --connect qemu:///system list'''
| |
|
| |
| Id Name State
| |
| ----------------------------------------------------
| |
| 3 alice running
| |
|
| |
| Кроме того, проверьте, что виртуальный сетевой интерфейс для виртуальной машины (то есть vnet0) успешно добавлен в созданный ранее сетевой мост br0.
| |
|
| |
| '''$ sudo brctl show'''
| |
|
| |
| [[Файл:Ifconfig-br0.jpg]]
| |
|
| |
| <h2>Этап 6. Удаленный доступ к виртуальной машине.</h2>
| |
| Для удаленного доступа к консоли виртуальной машины вы можете использовать любой VNC-клиент.<br>
| |
| Сначала определите номер порта VNC для виртуальной машины:
| |
|
| |
| '''$ sudo netstat -nap | grep kvm'''
| |
|
| |
| [[Файл:Net-kvm.jpg]]
| |
|
| |
| В этом примере номер порта для виртуальной машины alice 5900.<br>
| |
| Затем запустите VNC-клиент и подключитесь к VNC-серверу, работающему по адресу KVM-host-IP:5900.
| |
|
| |
| <h2>Управление виртуальной машиной с помощью virsh</h2>
| |
| Ниже список наиболее часто употребляемых команд virsh.
| |
| Для создания нового гостевого домена и запуска виртуальной машины:
| |
|
| |
| '''$ virsh --connect qemu:///system create alice.xml'''
| |
|
| |
| Для остановки виртуальной машины и уничтожения гостевого домена:
| |
|
| |
| '''$ virsh --connect qemu:///system destroy alice'''
| |
|
| |
| Для выключения виртуальной машины (без уничтожения домена):
| |
|
| |
| '''$ virsh --connect qemu:///system shutdown alice'''
| |
|
| |
| Для приостановки виртуальной машины:
| |
|
| |
| '''$ virsh --connect qemu:///system suspend alice'''
| |
|
| |
| Для возобновления работы виртуальной машины:
| |
|
| |
| '''$ virsh --connect qemu:///system resume alice'''
| |
|
| |
| Для автозапуска виртуальной машины после загрузки хоста:
| |
|
| |
| '''$ virsh --connect qemu:///system autostart alice
| |
| '''
| |
| Для получения информации о домене виртуальной машины:
| |
|
| |
| '''$ virsh --connect qemu:///system dominfo alice'''
| |
|
| |
| Вы можете также управлять виртуальными машинами из сессии virsh. Для создания новой сессии virsh и входа в нее, просто введите:
| |
|
| |
| '''$ virsh --connect qemu:///system'''
| |
|
| |
| В командной строке вы можете использовать любые команды virsh.<br>
| |
| [[Файл:Virsh-connect.jpg]]
| |
|
| |
| <h2>Решение проблем</h2>
| |
| 1. Я получил ошибку, когда попытался создать виртуальную машину:
| |
|
| |
| error: internal error: no supported architecture for os type 'hvm'
| |
|
| |
|
| |
| Вы получите эту ошибку, если ваш процессор не поддерживает аппаратную виртуализацию (то есть Intel VT или AMD-V), которая требуется для работы KVM. Если же вы получили эту ошибку с процессором, поддерживающим Intel VT или AMD-V, возможные решения этой проблемы:
| |
| Во-первых, проверьте, загружены ли требуемые модули ядра.
| |
|
| |
| '''$ lsmod | grep kvm'''
| |
|
| |
| Если модуль kvm не загружен, вам необходимо загрузить его:
| |
|
| |
| '''$ sudo modprobe kvm_intel (для процессоров Intel)'''
| |
| '''$ sudo modprobe kvm_amd (для процессоров AMD)'''
| |
|
| |
| Второе решение - добавление аргумента "--connect qemu:///system" к команде virsh, как показано ниже. Этот аргумент может потребоваться, если вы используете более одного гипервизора (то есть VMware, VirtualBox) на сервере.
| |
|
| |
| '''$ virsh --connect qemu:///system create alice.xml'''
| |
|
| |
| 2. Я получил ошибку, когда пытался запустить консоль своей виртуальной машины:
| |
|
| |
| '''$ virsh console alice'''
| |
|
| |
| error: internal error: cannot find character device <null>
| |
|
| |
|
| |
| Эта ошибка возникает потому, что вы не определили устройство консоли в XML-файле виртуальной машины.
| |
| Добавьте приведенные ниже строки в раздел '''"device" XML-файла.'''
| |
|
| |
| <console type='pty'>
| |
| <target port='0'/>
| |
| </console>
| |
|
| |
|
| |
| * [http://rus-linux.net/MyLDP/vm/kvm-v-debian.html взято тут...]
| |
|
| |
| * [https://docs.fedoraproject.org/ru-RU/Fedora/12/html/Virtualization_Guide/chap-Virtualization_Guide-Managing_guests_with_virsh.html Документация по Virsh]
| |