User Tools

Site Tools


informatica:linux:virtualizacion:kvm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatica:linux:virtualizacion:kvm [2014/01/22 15:23] javiinformatica:linux:virtualizacion:kvm [2020/06/10 07:12] (current) javi
Line 8: Line 8:
   * **QEMU** es un conjunto de herramientas que ofrecen emulacion y virtualizacion. En este manual solo vamos a utilizar la segunda parte, aunque casi siempre a traves de libvirt   * **QEMU** es un conjunto de herramientas que ofrecen emulacion y virtualizacion. En este manual solo vamos a utilizar la segunda parte, aunque casi siempre a traves de libvirt
   * **Libvirt** es un conjunto de herramientas que actuan como //frontend// de distintas teconologias de virtualizacion: KVM, LXC, etc... En este manual vamos a usarlo intensivamente   * **Libvirt** es un conjunto de herramientas que actuan como //frontend// de distintas teconologias de virtualizacion: KVM, LXC, etc... En este manual vamos a usarlo intensivamente
-  * **Virtio** es un estandar de virtualizacion para disco y red que forma parte de los kernel nuevos de GNU/Linux. Asi los guest GNU/Linux utilizan virtio y saben que corren en un entorno virtualizado, mejorando su rendimiento. Es similar a las guest additions de VMWare. Tambien existe en formato de drivers para Window$.+  * **Virtio** son un conjunto de modulos de kernel GNU/Linux que permiten paravirtualizar red y discoDe esa forma, cuando desde el host se usan esos drivers para un guest GNU/Linux, este es consciente de correr en un entorno virtualizado, y coopera con el hipervisor mejorando asi el rendimiento. Virtio es conceptualmente similar a las guest additions de VMWare.
  
 ====== Instalar ====== ====== Instalar ======
Line 17: Line 17:
  
 3. Comprobar que el sistema operativo soporta virtualizacion: 3. Comprobar que el sistema operativo soporta virtualizacion:
 +
 +Una vez encontré un escenario en el que la prueba 3.1. era KO y la 3.2. OK, por lo que creo que la más exacta es la 3.1.
 +
 +3.1. Ver si kvm está deshabilitado a nivel de BIOS
 +
 +  dmesg | grep bios
 +
 +3.2 Ejecutar
  
   sudo egrep '(vmx|svm)' --color=always /proc/cpuinfo   sudo egrep '(vmx|svm)' --color=always /proc/cpuinfo
Line 293: Line 301:
 En este ejemplo se establece el valor en 524288 KB En este ejemplo se establece el valor en 524288 KB
  
 +  * Arrancar la VM al arrancar el hipervisor:
 +
 +  sudo virsh autostart myvmname
 ====== Salir de la consola ====== ====== Salir de la consola ======
  
Line 367: Line 378:
   sudo vim test-1.example.com.xml   sudo vim test-1.example.com.xml
  
-ajustar los nombres, como por ejemplo en las siguientes etiquetas:+asegurarse de que los siguientes valores son unicos y correctos:
  
 +  * Name
 <code> <code>
-Name +<name>test-1.example.com</name> 
-Disk+</code> 
 +  * Almacenamiento (en este caso LVM) 
 +<code> 
 +<source dev='/dev/vg/lv_test_1'/> 
 +</code> 
 +  * MAC address (importante, quiza hemos copiado la maquina y esta duplicada): 
 +<code>   
 +<mac address='00:16:3e:0e:3e:53'/>
 </code> </code>
  
-5. Ajustar, si es necesario, la ruta/punto de montaje del disco.+Script para generar MAC addresses:
  
-6Definir la nueva VM:+<code> 
 +#!/usr/bin/python 
 +# macgen.py script to generate a MAC address for guests on Xen 
 +
 +import random 
 +
 +def randomMAC(): 
 +        mac = [ 0x00, 0x16, 0x3e, 
 +                random.randint(0x00, 0x7f), 
 +                random.randint(0x00, 0xff), 
 +                random.randint(0x00, 0xff) ] 
 +        return ':'.join(map(lambda x: "%02x" % x, mac)) 
 +
 +print randomMAC() 
 +</code>
  
-  virsh define test-1.example.com.xml+Ahora obtenemos el listado de VMS: 
 + 
 +  virsh list --all
      
 +Y para cada una de ellas obtenemos la MAC address:
 +
 +  virsh dumpxml vm-1.example.com | grep "mac address" | awk '{print $2}' | cut -d "'" -f2
 +
 +TODO: hacer un script en bash que lo haga
 +
 +Finalmente nos aseguramos que la nueva MAC generada es unica.
 +
 +5. Definir la nueva VM:
 +
 +  virsh define test-1.example.com.xml
 +
 ===== VM destino existe ===== ===== VM destino existe =====
  
Line 778: Line 825:
  
   <os>   <os>
-    ... 
     <boot dev='cdrom'/>     <boot dev='cdrom'/>
     ...     ...
Line 812: Line 858:
 9. (VM arrancada con live CD) Con parted eliminar las particiones 2 y 5 y recrearlas. Recomiendo ejecutarlo asi: 9. (VM arrancada con live CD) Con parted eliminar las particiones 2 y 5 y recrearlas. Recomiendo ejecutarlo asi:
  
-  sudo parted -a optimal /dev/vda+  parted -a optimal /dev/vda
  
 Cambiamos a sectores como unidad: Cambiamos a sectores como unidad:
Line 841: Line 887:
 10. (VM arrancada con live CD) Copiar con dd de la particion destino a la origan, una vez recreada: 10. (VM arrancada con live CD) Copiar con dd de la particion destino a la origan, una vez recreada:
  
-  time sudo dd if=/dev/vdb5 of=/dev/vda5 bs=512+  time dd if=/dev/vdb5 of=/dev/vda5 bs=512
      
 Creo que el proceso de nuevo tiene una velocidad entorno a los 60 MB/s Creo que el proceso de nuevo tiene una velocidad entorno a los 60 MB/s
Line 1054: Line 1100:
   sudo rm -fr www-1.dev.local.example.com.raw   sudo rm -fr www-1.dev.local.example.com.raw
      
 +===== Anyadir un disco en caliente =====
 +
 +http://serverfault.com/questions/457250/kvm-and-libvirt-how-do-i-hotplug-a-new-virtio-disk
 +
 +
 +First of all, you should avoid using virsh attach-disk with its limited amount of options. Instead, I suggest to specify the exact disk format you prefer in a separate, temporary XML file, like this:
 +
 +<code>
 +<disk type='file' device='disk'>
 +  <driver name='qemu' type='qcow2' cache='writeback'/>
 +  <source file='/home/gert/kvm/testdomain-vdb.img'/>
 +  <target dev='vdb' bus='virtio'/>
 +</disk>
 +</code>
 +
 +Before adding it, make sure the hotplug kernel modules are loaded in the guest:
 +
 +  modprobe acpiphp
 +  modprobe pci_hotplug
 +
 +Some distributions, including recent CentOS/RHEL/Fedora have this built-in in the kernel. In this case, check for CONFIG_HOTPLUG_PCI_ACPI. If it's y, then you're all set.
 +
 +Finally, add it to the running VM using
 +
 +  virsh # attach-device [domain] /path/to/disk.xml
 +
 +(optionally, add the --persistent option to let Libvirt update the domain XML definition 'persistent'.)
 +
 +In the guest, the kernel should now be triggered, as can be checked with dmesg:
 +
 +<code>
 +[  321.946440] virtio-pci 0000:00:06.0: using default PCI settings
 +[...]
 +[  321.952782]  vdb: vdb1 vdb2
 +</code>
 +
 +This also works perfectly using the GUI-enabled virt-manager application.
 +
 +See also:
 +
 +http://www.linux-kvm.org/page/Hotadd_pci_devices
 +http://serverfault.com/questions/453456/adding-virtio-block-devices-at-runtime-in-libvirt-kvm
  
 ====== Snapshots ====== ====== Snapshots ======
Line 1658: Line 1746:
   * Cuando el volumen es montado por un segundo guest, los guests ya solo pueden leer, y escribir como root, pero no escribir como un usuario normal. No creo que sea una limitacion de virtfs, pero tengo que investigarlo.   * Cuando el volumen es montado por un segundo guest, los guests ya solo pueden leer, y escribir como root, pero no escribir como un usuario normal. No creo que sea una limitacion de virtfs, pero tengo que investigarlo.
   * En las mismas circunstancias no puedo hacer un "./script.sh" y si un "bash script.sh". No se que consecuencias puede tener   * En las mismas circunstancias no puedo hacer un "./script.sh" y si un "bash script.sh". No se que consecuencias puede tener
 +  * **BUG**: cuando se anyade un nuevo punto de montaje en una VM (virsh edit vm_1) tengo que parar y luego arrancar la VM para que esta vea el punto de montaje. Si simplemente la reinicio vera los puntos de montajes anteriores, pero no el nuevo
 ===== Virtfs (9p) passthrough ===== ===== Virtfs (9p) passthrough =====
  
Line 1976: Line 2065:
  
 http://libguestfs.org/guestfish.1.html http://libguestfs.org/guestfish.1.html
 +
 +====== libvirt ======
 +
 +**TODO** quiza habria que mover esta seccion a un articulo propio
 +
 +===== ACL =====
 +
 +http://libvirt.org/acl.html
 +
 +http://libvirt.org/aclpolkit.html
 +
 +https://wiki.archlinux.org/index.php/libvirt#Using_Python
 +
 +Ejemplo sencillo de uso sin contrasenya si se dan las siguientes condiciones:
 +
 +  * Configuracion por defecto (**NO** se ha habilitado policykit)
 +  * El usuario que ejecuta el script pertenece al grupo especificado en la variable "unix_sock_group" de /etc/libvirt/libvirtd.conf
 +  * El script se ejecuta desde el mismo hipervisor
 +
 +  virsh -c qemu:///system list
 +
 +La url sirve para la API tambien
 +===== API =====
 +
 +http://libvirt.org/html/libvirt-libvirt.html
 +
 +==== virConnect ====
 +
 +<code>
 +[('__class__', <class 'libvirt.virConnect'>)
 +('__del__', <bound method virConnect.__del__ of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('__delattr__', <method-wrapper '__delattr__' of virConnect object at 0x7f653a08df10>)
 +('__dict__', {'_o': <capsule object "virConnectPtr" at 0x7f6538716c00>})
 +('__doc__', None)
 +('__format__', <built-in method __format__ of virConnect object at 0x7f653a08df10>)
 +('__getattribute__', <method-wrapper '__getattribute__' of virConnect object at 0x7f653a08df10>)
 +('__hash__', <method-wrapper '__hash__' of virConnect object at 0x7f653a08df10>)
 +('__init__', <bound method virConnect.__init__ of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('__module__', 'libvirt')
 +('__new__', <built-in method __new__ of type object at 0x8fbce0>)
 +('__reduce__', <built-in method __reduce__ of virConnect object at 0x7f653a08df10>)
 +('__reduce_ex__', <built-in method __reduce_ex__ of virConnect object at 0x7f653a08df10>)
 +('__repr__', <method-wrapper '__repr__' of virConnect object at 0x7f653a08df10>)
 +('__setattr__', <method-wrapper '__setattr__' of virConnect object at 0x7f653a08df10>)
 +('__sizeof__', <built-in method __sizeof__ of virConnect object at 0x7f653a08df10>)
 +('__str__', <method-wrapper '__str__' of virConnect object at 0x7f653a08df10>)
 +('__subclasshook__', <built-in method __subclasshook__ of type object at 0x29d7020>)
 +('__weakref__', None)
 +('_dispatchCloseCallback', <bound method virConnect._dispatchCloseCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventBalloonChangeCallback', <bound method virConnect._dispatchDomainEventBalloonChangeCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventBlockPullCallback', <bound method virConnect._dispatchDomainEventBlockPullCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventCallbacks', <bound method virConnect._dispatchDomainEventCallbacks of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventDeviceRemovedCallback', <bound method virConnect._dispatchDomainEventDeviceRemovedCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventDiskChangeCallback', <bound method virConnect._dispatchDomainEventDiskChangeCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventGenericCallback', <bound method virConnect._dispatchDomainEventGenericCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventGraphicsCallback', <bound method virConnect._dispatchDomainEventGraphicsCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventIOErrorCallback', <bound method virConnect._dispatchDomainEventIOErrorCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventIOErrorReasonCallback', <bound method virConnect._dispatchDomainEventIOErrorReasonCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventLifecycleCallback', <bound method virConnect._dispatchDomainEventLifecycleCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventPMSuspendCallback', <bound method virConnect._dispatchDomainEventPMSuspendCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventPMSuspendDiskCallback', <bound method virConnect._dispatchDomainEventPMSuspendDiskCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventPMWakeupCallback', <bound method virConnect._dispatchDomainEventPMWakeupCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventRTCChangeCallback', <bound method virConnect._dispatchDomainEventRTCChangeCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventTrayChangeCallback', <bound method virConnect._dispatchDomainEventTrayChangeCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_dispatchDomainEventWatchdogCallback', <bound method virConnect._dispatchDomainEventWatchdogCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('_o', <capsule object "virConnectPtr" at 0x7f6538716c00>)
 +('baselineCPU', <bound method virConnect.baselineCPU of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('changeBegin', <bound method virConnect.changeBegin of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('changeCommit', <bound method virConnect.changeCommit of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('changeRollback', <bound method virConnect.changeRollback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('close', <bound method virConnect.close of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('compareCPU', <bound method virConnect.compareCPU of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('createLinux', <bound method virConnect.createLinux of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('createXML', <bound method virConnect.createXML of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('createXMLWithFiles', <bound method virConnect.createXMLWithFiles of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('defineXML', <bound method virConnect.defineXML of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('domainEventDeregister', <bound method virConnect.domainEventDeregister of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('domainEventDeregisterAny', <bound method virConnect.domainEventDeregisterAny of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('domainEventRegister', <bound method virConnect.domainEventRegister of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('domainEventRegisterAny', <bound method virConnect.domainEventRegisterAny of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('domainXMLFromNative', <bound method virConnect.domainXMLFromNative of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('domainXMLToNative', <bound method virConnect.domainXMLToNative of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('findStoragePoolSources', <bound method virConnect.findStoragePoolSources of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getCPUMap', <bound method virConnect.getCPUMap of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getCPUModelNames', <bound method virConnect.getCPUModelNames of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getCPUStats', <bound method virConnect.getCPUStats of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getCapabilities', <bound method virConnect.getCapabilities of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getCellsFreeMemory', <bound method virConnect.getCellsFreeMemory of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getFreeMemory', <bound method virConnect.getFreeMemory of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getHostname', <bound method virConnect.getHostname of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getInfo', <bound method virConnect.getInfo of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getLibVersion', <bound method virConnect.getLibVersion of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getMaxVcpus', <bound method virConnect.getMaxVcpus of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getMemoryParameters', <bound method virConnect.getMemoryParameters of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getMemoryStats', <bound method virConnect.getMemoryStats of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getSecurityModel', <bound method virConnect.getSecurityModel of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getSysinfo', <bound method virConnect.getSysinfo of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getType', <bound method virConnect.getType of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getURI', <bound method virConnect.getURI of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('getVersion', <bound method virConnect.getVersion of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('interfaceDefineXML', <bound method virConnect.interfaceDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('interfaceLookupByMACString', <bound method virConnect.interfaceLookupByMACString of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('interfaceLookupByName', <bound method virConnect.interfaceLookupByName of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('isAlive', <bound method virConnect.isAlive of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('isEncrypted', <bound method virConnect.isEncrypted of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('isSecure', <bound method virConnect.isSecure of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listAllDevices', <bound method virConnect.listAllDevices of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listAllDomains', <bound method virConnect.listAllDomains of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listAllInterfaces', <bound method virConnect.listAllInterfaces of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listAllNWFilters', <bound method virConnect.listAllNWFilters of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listAllNetworks', <bound method virConnect.listAllNetworks of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listAllSecrets', <bound method virConnect.listAllSecrets of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listAllStoragePools', <bound method virConnect.listAllStoragePools of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listDefinedDomains', <bound method virConnect.listDefinedDomains of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listDefinedInterfaces', <bound method virConnect.listDefinedInterfaces of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listDefinedNetworks', <bound method virConnect.listDefinedNetworks of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listDefinedStoragePools', <bound method virConnect.listDefinedStoragePools of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listDevices', <bound method virConnect.listDevices of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listDomainsID', <bound method virConnect.listDomainsID of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listInterfaces', <bound method virConnect.listInterfaces of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listNWFilters', <bound method virConnect.listNWFilters of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listNetworks', <bound method virConnect.listNetworks of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listSecrets', <bound method virConnect.listSecrets of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('listStoragePools', <bound method virConnect.listStoragePools of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('lookupByID', <bound method virConnect.lookupByID of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('lookupByName', <bound method virConnect.lookupByName of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('lookupByUUID', <bound method virConnect.lookupByUUID of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('lookupByUUIDString', <bound method virConnect.lookupByUUIDString of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('networkCreateXML', <bound method virConnect.networkCreateXML of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('networkDefineXML', <bound method virConnect.networkDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('networkLookupByName', <bound method virConnect.networkLookupByName of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('networkLookupByUUID', <bound method virConnect.networkLookupByUUID of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('networkLookupByUUIDString', <bound method virConnect.networkLookupByUUIDString of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('newStream', <bound method virConnect.newStream of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('nodeDeviceCreateXML', <bound method virConnect.nodeDeviceCreateXML of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('nodeDeviceLookupByName', <bound method virConnect.nodeDeviceLookupByName of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('nodeDeviceLookupSCSIHostByWWN', <bound method virConnect.nodeDeviceLookupSCSIHostByWWN of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('numOfDefinedDomains', <bound method virConnect.numOfDefinedDomains of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('numOfDefinedInterfaces', <bound method virConnect.numOfDefinedInterfaces of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('numOfDefinedNetworks', <bound method virConnect.numOfDefinedNetworks of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('numOfDefinedStoragePools', <bound method virConnect.numOfDefinedStoragePools of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('numOfDevices', <bound method virConnect.numOfDevices of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('numOfDomains', <bound method virConnect.numOfDomains of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('numOfInterfaces', <bound method virConnect.numOfInterfaces of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('numOfNWFilters', <bound method virConnect.numOfNWFilters of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('numOfNetworks', <bound method virConnect.numOfNetworks of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('numOfSecrets', <bound method virConnect.numOfSecrets of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('numOfStoragePools', <bound method virConnect.numOfStoragePools of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('nwfilterDefineXML', <bound method virConnect.nwfilterDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('nwfilterLookupByName', <bound method virConnect.nwfilterLookupByName of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('nwfilterLookupByUUID', <bound method virConnect.nwfilterLookupByUUID of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('nwfilterLookupByUUIDString', <bound method virConnect.nwfilterLookupByUUIDString of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('registerCloseCallback', <bound method virConnect.registerCloseCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('restore', <bound method virConnect.restore of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('restoreFlags', <bound method virConnect.restoreFlags of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('saveImageDefineXML', <bound method virConnect.saveImageDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('saveImageGetXMLDesc', <bound method virConnect.saveImageGetXMLDesc of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('secretDefineXML', <bound method virConnect.secretDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('secretLookupByUUID', <bound method virConnect.secretLookupByUUID of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('secretLookupByUUIDString', <bound method virConnect.secretLookupByUUIDString of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('secretLookupByUsage', <bound method virConnect.secretLookupByUsage of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('setKeepAlive', <bound method virConnect.setKeepAlive of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('setMemoryParameters', <bound method virConnect.setMemoryParameters of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('storagePoolCreateXML', <bound method virConnect.storagePoolCreateXML of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('storagePoolDefineXML', <bound method virConnect.storagePoolDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('storagePoolLookupByName', <bound method virConnect.storagePoolLookupByName of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('storagePoolLookupByUUID', <bound method virConnect.storagePoolLookupByUUID of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('storagePoolLookupByUUIDString', <bound method virConnect.storagePoolLookupByUUIDString of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('storageVolLookupByKey', <bound method virConnect.storageVolLookupByKey of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('storageVolLookupByPath', <bound method virConnect.storageVolLookupByPath of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('suspendForDuration', <bound method virConnect.suspendForDuration of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('unregisterCloseCallback', <bound method virConnect.unregisterCloseCallback of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('virConnGetLastError', <bound method virConnect.virConnGetLastError of <libvirt.virConnect object at 0x7f653a08df10>>)
 +('virConnResetLastError', <bound method virConnect.virConnResetLastError of <libvirt.virConnect object at 0x7f653a08df10>>)]
 +</code>
 +
 +==== virDomain ====
 +
 +<code>
 +[('ID', <bound method virDomain.ID of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('OSType', <bound method virDomain.OSType of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('UUID', <bound method virDomain.UUID of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('UUIDString', <bound method virDomain.UUIDString of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('XMLDesc', <bound method virDomain.XMLDesc of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('__class__', <class 'libvirt.virDomain'>)
 +('__del__', <bound method virDomain.__del__ of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('__delattr__', <method-wrapper '__delattr__' of virDomain object at 0x7f39740e6750>)
 +('__dict__', {'_conn': <libvirt.virConnect object at 0x7f3975a5ff50>, '_o': <capsule object "virDomainPtr" at 0x7f39740e7c90>})
 +('__doc__', None)
 +('__format__', <built-in method __format__ of virDomain object at 0x7f39740e6750>)
 +('__getattribute__', <method-wrapper '__getattribute__' of virDomain object at 0x7f39740e6750>)
 +('__hash__', <method-wrapper '__hash__' of virDomain object at 0x7f39740e6750>)
 +('__init__', <bound method virDomain.__init__ of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('__module__', 'libvirt')
 +('__new__', <built-in method __new__ of type object at 0x8fbce0>)
 +('__reduce__', <built-in method __reduce__ of virDomain object at 0x7f39740e6750>)
 +('__reduce_ex__', <built-in method __reduce_ex__ of virDomain object at 0x7f39740e6750>)
 +('__repr__', <method-wrapper '__repr__' of virDomain object at 0x7f39740e6750>)
 +('__setattr__', <method-wrapper '__setattr__' of virDomain object at 0x7f39740e6750>)
 +('__sizeof__', <built-in method __sizeof__ of virDomain object at 0x7f39740e6750>)
 +('__str__', <method-wrapper '__str__' of virDomain object at 0x7f39740e6750>)
 +('__subclasshook__', <built-in method __subclasshook__ of type object at 0x1d606f0>)
 +('__weakref__', None)
 +('_conn', <libvirt.virConnect object at 0x7f3975a5ff50>)
 +('_o', <capsule object "virDomainPtr" at 0x7f39740e7c90>)
 +('abortJob', <bound method virDomain.abortJob of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('attachDevice', <bound method virDomain.attachDevice of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('attachDeviceFlags', <bound method virDomain.attachDeviceFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('autostart', <bound method virDomain.autostart of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blkioParameters', <bound method virDomain.blkioParameters of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockCommit', <bound method virDomain.blockCommit of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockInfo', <bound method virDomain.blockInfo of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockIoTune', <bound method virDomain.blockIoTune of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockJobAbort', <bound method virDomain.blockJobAbort of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockJobInfo', <bound method virDomain.blockJobInfo of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockJobSetSpeed', <bound method virDomain.blockJobSetSpeed of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockPeek', <bound method virDomain.blockPeek of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockPull', <bound method virDomain.blockPull of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockRebase', <bound method virDomain.blockRebase of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockResize', <bound method virDomain.blockResize of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockStats', <bound method virDomain.blockStats of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('blockStatsFlags', <bound method virDomain.blockStatsFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('connect', <bound method virDomain.connect of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('controlInfo', <bound method virDomain.controlInfo of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('coreDump', <bound method virDomain.coreDump of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('create', <bound method virDomain.create of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('createWithFiles', <bound method virDomain.createWithFiles of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('createWithFlags', <bound method virDomain.createWithFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('destroy', <bound method virDomain.destroy of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('destroyFlags', <bound method virDomain.destroyFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('detachDevice', <bound method virDomain.detachDevice of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('detachDeviceFlags', <bound method virDomain.detachDeviceFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('diskErrors', <bound method virDomain.diskErrors of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('emulatorPinInfo', <bound method virDomain.emulatorPinInfo of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('fSTrim', <bound method virDomain.fSTrim of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('getCPUStats', <bound method virDomain.getCPUStats of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('hasCurrentSnapshot', <bound method virDomain.hasCurrentSnapshot of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('hasManagedSaveImage', <bound method virDomain.hasManagedSaveImage of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('hostname', <bound method virDomain.hostname of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('info', <bound method virDomain.info of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('injectNMI', <bound method virDomain.injectNMI of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('interfaceParameters', <bound method virDomain.interfaceParameters of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('interfaceStats', <bound method virDomain.interfaceStats of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('isActive', <bound method virDomain.isActive of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('isPersistent', <bound method virDomain.isPersistent of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('isUpdated', <bound method virDomain.isUpdated of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('jobInfo', <bound method virDomain.jobInfo of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('jobStats', <bound method virDomain.jobStats of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('listAllSnapshots', <bound method virDomain.listAllSnapshots of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('managedSave', <bound method virDomain.managedSave of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('managedSaveRemove', <bound method virDomain.managedSaveRemove of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('maxMemory', <bound method virDomain.maxMemory of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('maxVcpus', <bound method virDomain.maxVcpus of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('memoryParameters', <bound method virDomain.memoryParameters of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('memoryPeek', <bound method virDomain.memoryPeek of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('memoryStats', <bound method virDomain.memoryStats of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('metadata', <bound method virDomain.metadata of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('migrate', <bound method virDomain.migrate of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('migrate2', <bound method virDomain.migrate2 of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('migrate3', <bound method virDomain.migrate3 of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('migrateGetCompressionCache', <bound method virDomain.migrateGetCompressionCache of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('migrateGetMaxSpeed', <bound method virDomain.migrateGetMaxSpeed of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('migrateSetCompressionCache', <bound method virDomain.migrateSetCompressionCache of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('migrateSetMaxDowntime', <bound method virDomain.migrateSetMaxDowntime of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('migrateSetMaxSpeed', <bound method virDomain.migrateSetMaxSpeed of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('migrateToURI', <bound method virDomain.migrateToURI of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('migrateToURI2', <bound method virDomain.migrateToURI2 of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('migrateToURI3', <bound method virDomain.migrateToURI3 of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('name', <bound method virDomain.name of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('numaParameters', <bound method virDomain.numaParameters of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('openChannel', <bound method virDomain.openChannel of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('openConsole', <bound method virDomain.openConsole of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('openGraphics', <bound method virDomain.openGraphics of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('pMSuspendForDuration', <bound method virDomain.pMSuspendForDuration of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('pMWakeup', <bound method virDomain.pMWakeup of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('pinEmulator', <bound method virDomain.pinEmulator of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('pinVcpu', <bound method virDomain.pinVcpu of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('pinVcpuFlags', <bound method virDomain.pinVcpuFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('reboot', <bound method virDomain.reboot of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('reset', <bound method virDomain.reset of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('resume', <bound method virDomain.resume of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('revertToSnapshot', <bound method virDomain.revertToSnapshot of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('save', <bound method virDomain.save of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('saveFlags', <bound method virDomain.saveFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('schedulerParameters', <bound method virDomain.schedulerParameters of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('schedulerParametersFlags', <bound method virDomain.schedulerParametersFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('schedulerType', <bound method virDomain.schedulerType of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('screenshot', <bound method virDomain.screenshot of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('securityLabel', <bound method virDomain.securityLabel of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('securityLabelList', <bound method virDomain.securityLabelList of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('sendKey', <bound method virDomain.sendKey of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('sendProcessSignal', <bound method virDomain.sendProcessSignal of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setAutostart', <bound method virDomain.setAutostart of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setBlkioParameters', <bound method virDomain.setBlkioParameters of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setBlockIoTune', <bound method virDomain.setBlockIoTune of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setInterfaceParameters', <bound method virDomain.setInterfaceParameters of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setMaxMemory', <bound method virDomain.setMaxMemory of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setMemory', <bound method virDomain.setMemory of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setMemoryFlags', <bound method virDomain.setMemoryFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setMemoryParameters', <bound method virDomain.setMemoryParameters of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setMemoryStatsPeriod', <bound method virDomain.setMemoryStatsPeriod of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setMetadata', <bound method virDomain.setMetadata of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setNumaParameters', <bound method virDomain.setNumaParameters of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setSchedulerParameters', <bound method virDomain.setSchedulerParameters of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setSchedulerParametersFlags', <bound method virDomain.setSchedulerParametersFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setVcpus', <bound method virDomain.setVcpus of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('setVcpusFlags', <bound method virDomain.setVcpusFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('shutdown', <bound method virDomain.shutdown of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('shutdownFlags', <bound method virDomain.shutdownFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('snapshotCreateXML', <bound method virDomain.snapshotCreateXML of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('snapshotCurrent', <bound method virDomain.snapshotCurrent of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('snapshotListNames', <bound method virDomain.snapshotListNames of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('snapshotLookupByName', <bound method virDomain.snapshotLookupByName of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('snapshotNum', <bound method virDomain.snapshotNum of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('state', <bound method virDomain.state of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('suspend', <bound method virDomain.suspend of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('undefine', <bound method virDomain.undefine of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('undefineFlags', <bound method virDomain.undefineFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('updateDeviceFlags', <bound method virDomain.updateDeviceFlags of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('vcpuPinInfo', <bound method virDomain.vcpuPinInfo of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('vcpus', <bound method virDomain.vcpus of <libvirt.virDomain object at 0x7f39740e6750>>)
 +('vcpusFlags', <bound method virDomain.vcpusFlags of <libvirt.virDomain object at 0x7f39740e6750>>)]
 +</code>
 +
 +==== Varios ====
 +
 +  * Obtener la lista de dominios no-activos:
 +<code>
 +conn = libvirt.open("qemu+ssh://localhost/system")
 +domains = conn.listDefinedDomains()
 +</code>
 +  * Obtener la lista de dominios activos:
 +<code>
 +conn = libvirt.open("qemu+ssh://localhost/system")
 +domains = conn.listDomainsID()
 +</code>
 +
 +
informatica/linux/virtualizacion/kvm.1390404221.txt.gz · Last modified: 2015/04/13 20:19 (external edit)