Virtualización con Ubuntu 11.10 y KVM (V-W7 virtualizado)

Como último paso en nuestra serie de 5 entradas sobre virtualización mediante KVM queda la instalación y puesta en funcionamiento de una máquina virtual. Nosotros nos hemos decantado por un Windows 7 de 64 bits.

Accedemos a virt-manager y creamos una máquina virtual, indicando indicando el nombre de la misma y el origen de la misma:


En el siguiente paso debemos indicar la ubicación en nuestro sistema de la unidad de CD (elegida en paso anterior como origen del software) así como indicar el tipo de sistema operativo y versión que vamos a instalar.


A la hora de elegir las características de la máquina virtual (memoria, disco duro, procesador) debemos tener en cuenta los requisitos mínimos del mismo, así como las características del equipo anfitrión. Una vez conocidos, indicamos el tamaño de RAM y el número de procesadores.


Creamos una imagen de disco duro y asignamos el espacio del mismo en este momento.


Para acabar con los parámetros de configuración seleccionamos la configuración de la red, indicando como interfaz nuestro bridge, creado en pasos anteriores.



Tras esto pulsamos en finalizar y comenzamos la instalación como si de un equipo normal se tratase.



  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Virtualización con Ubuntu 11.10 y KVM (IV-VirtManager)


A la hora de crear máquinas virtuales existen dos procedimientos diferenciados:

  • Hacerlos en modo texto a través de la consola.
  • Hacerlos en un entorno gráfico.


Nosotros nos vamos a decantar por el segundo método (evidentemente nuestro servidor debe tener un entorno X operativo) por la sencillez y rapidez, ya que el procedimiento se asimila a la creación de máquinas virtuales en entornos como VirtualBox o VMWare.

El primer paso es la instalación de virt-install, el cual permite la creación de máquinas virtuales para KVM (o XEN) de forma sencilla, ya sea a través de un asistente desde la línea de comandos o del paso de parámetros con las distintas opciones al comando. El comando utiliza la librería libvirt.

A través de esta herramienta, podemos realizar tanto instalaciones en modo texto como gráficas, y las imagenes del sistema operativo pueden ser cargadas desde FTP, HTTP, NFS o local. Para instalarlo debemos utilizar:

$ sudo apt-get install virtinst

Tras esto debemos instalar un componente de gestión gráfica, como virt-manager o virt-viewer. Nosotros recomendamos el uso de virt-manager, el cual es capaz de gestionar maquinas virtuales KVM QUEMU, XEN y varias más. Mediante su uso puede, entre otras cosas, crear y eliminar máquinas virtuales. 

Para instalarlo debe utilizar:


$ sudo apt-get install virt-manager

 Tras esto podremos acceder al gestor gráfico de máquinas virtuales.



Antes de comenzar a crear las máquinas virtuales vamos a llevar a cabo una serie de pasos previos.

Primero, necesitamos utilizar un directorio para almacenar las máquinas virtuales al cual se tenga acceso por parte de los gestores gráficos. En nuestro caso nos decantamos por /var/lib/libvirt/images/ que se crea de modo automático con la instalación de la biblioteca libvirt. Se puede elegir otro, pero se debe comprobar que se tengan los permisos necesarios sobre el mismo.

En la instalación del entorno de virtualización creamos un bridge para poder conectarnos a las máquinas virtuales desde nuestra red física. Para que libvirt pueda hacer uso de un modo sencillo de esta interfaz de red debemos crear un fichero /etc/libvirt/qemu/networks/RedLAN.xml con en contenido similar al siguiente:

<network type=’bridge’>
<name>RedLAN</name>
<mac address=’1c:c1:de:9c:d6:3a’/>
<uuid>12d4176d-8c56-347e-cc52-1cc1de9cd63a</uuid>
<bridge name=’br0′ stp=’on’ delay=’0′ />
</network>


Para que los cambios surtan efecto debemos reiniciar la máquina.

Otra de las cosas que no te va a dejar hacer el Gestor de máquinas virtuales, es cambiar la red a la que está conectada una determinada máquina virtual. Se puede hacer cambiando el fichero /etc/libvirt/qemu/NOMBREMAQUINA.xml, donde dice:

<interface type=’network’>
<source network=default/>


Cambiamos el default por RedLAN. Una vez hecho esto es necesario reiniciar el servicio de virtualización para que vuelva a leer los ficheros xml con la configuración de las distintas máquinas mediante:


$ sudo service libvirt-bin reload


Recuerde que cuando comiences a ejecutar máquinas, podrás ver cuantas máquinas está conectadas a cada interface con el comando brctl show.
En la configuración por defecto br0 será la red que hemos llamado RedLAN y virbr0 será la red por defecto (generalmente configurada con reenvío NAT contra la red anterior).


Fuente: Ubanov

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Virtualización con Ubuntu 11.10 y KVM (III-Instalación)

Una vez realizadas todas las comprobaciones iniciales, comenzamos la instalación. Hay que tener en cuenta que en la instalación del sistema operativo, se nos ofrece la posibilidad de instalar diversos servicios, entre los cuales se encuentra el paquete de virtualización (Virtual Machine Host). Esto se puede realizar mediante el comando:

$ sudo tasksel

Dicho comando nos abre un menú en el que podremos elegir distintos elementos a instalar, entre ellos el paquete de virtualización:


Otra alternativa sería invocar la instalación de un elemento concreto, en nuestro caso:


$ sudo tasksel install virt-host

El problema que presenta esto es la posibilidad de que no se instalen todos los paquetes necesarios ya que se instala un grupo predefinido de paquetes, por lo que deberemos completar la instalación de modo manual.

Para evitar lo anterior, se puede hacer una instalación de todos los elementos de forma manual mediante:

$ sudo apt-get install ubuntu-virt-server python-vm-builder kvm-pxe

Nota: vmbuilder es un script que nos permite crear máquinas virtuales basadas en Ubuntu.


 El siguiente paso es añadir el usuario activo (root) al grupo libvirtd:

$ sudo adduser `id -un` libvirtd
$ sudo adduser `id -un` kvm


Para que estos cambios surtan efecto es necesario salir de la sesión y volver a entrar, tras lo cual podremos comprobar que la instalación ha sido correcta mediante:

$ sudo virsh -c qemu:///system list

debiendo aparecer algo parecido a lo siguiente:



El siguiente paso es la instalación y configuración de un network bridge en nuestro servidor, de cara a permitir que nuestras máquinas virtuales puedan ser accedidas desde otras máquinas de nuestra red física. Para ello deberemos instalar el paquete bridge-utils:

$ sudo apt-get install bridge-utils


y una vez instalado deberemos configurar el puente en el fichero /etc/network/interfaces. La configuración inicial de dicho fichero será similar a la siguiente:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
          address 192.168.1.10
          netmask 255.255.255.0
          network 192.168.1.0
          broadcast 192.168.1.255
          gateway 192.168.1.1

Y hay que cambiarlo para que quede como sigue (siempre de acuerdo a su configuración de red):


# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual

# bridge
auto br0
iface br0 inet static
          address 192.168.1.10
          netmask 255.255.255.0
          network 192.168.1.0
          broadcast 192.168.1.255
          gateway 192.168.1.1
          bridge_ports eth0
          bridge_fd 9
          bridge_hello 2
          bridge_maxage 12
          brige_stp off

El siguiente paso es reiniciar la red mediante el comando:

$ sudo /etc/init.d/networking restart



De este modo habremos creado un nuevo interface (br0) que estará compuesto por el interface físico eth0.Ejecutamos ifconfig para ver la configuración del mismo:

administrador@ubuntuServer:~$ ifconfig
br0 Link encap:Ethernet direcciónHW 6c:f0:49:5e:58:4c
      Direc. inet:192.168.1.10 Difus.:192.168.1.255 Másc:255.255.255.0
      Dirección inet6: fe80::6ef0:49ff:fe5e:584c/64 Alcance:Enlace
      ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST MTU:1500 Métrica:1
      Paquetes RX:355 errores:0 perdidos:12 overruns:0 frame:0
      Paquetes TX:113 errores:0 perdidos:0 overruns:0 carrier:0
      colisiones:0 long.colaTX:0
      Bytes RX:30864 (30.8 KB) TX bytes:20007 (20.0 KB)

eth0 Link encap:Ethernet direcciónHW 6c:f0:49:5e:58:4c
      ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST MTU:1500 Métrica:1
      Paquetes RX:618740 errores:0 perdidos:45277 overruns:0 frame:0
      Paquetes TX:155936 errores:0 perdidos:0 overruns:0 carrier:1
      colisiones:0 long.colaTX:1000
      Bytes RX:364332840 (364.3 MB) TX bytes:12839218 (12.8 MB)
      Interrupción:44

lo Link encap:Bucle local
      Direc. inet:127.0.0.1 Másc:255.0.0.0
      Dirección inet6: ::1/128 Alcance:Anfitrión
      ACTIVO BUCLE FUNCIONANDO MTU:16436 Métrica:1
      Paquetes RX:228 errores:0 perdidos:0 overruns:0 frame:0
      Paquetes TX:228 errores:0 perdidos:0 overruns:0 carrier:0
      colisiones:0 long.colaTX:0
      Bytes RX:39814 (39.8 KB) TX bytes:39814 (39.8 KB) 

Con el comando brctl show se pueden revisar los interfaces creados y los interfaces físicos que los forman.

administrador@ubuntuServer:~$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.6cf0495e584c no eth0
administrador@ubuntuServer:~$

Para acabar, y antes de crear nuestra primera máquina virtual es recomendable reiniciar el equipo anfitrión.

Fuente: HowToForge

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Virtualización con Ubuntu 11.10 y KVM (II-Requisitos Previos)

Para proceder a la instalación de KVM en un sistema Ubuntu es necesario contar con el soporte hardware en el procesado del servidor. Para poder verificar el soporte hardware a la tecnología de virtualización debemos hacer uso de la siguiente orden:


$ egrep '(vmx|svm)' –color=always /proc/cpuinfo

En nuestro caso obtenemos el siguiente resultado:

/proc/cpuinfo:flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm dts tpr_shadow vnmi flexpriority

Como se observa arriba en tenemos soporte hardware para la virtualización en nuestro procesador Intel.

Para poder llevar a cabo la virtualización de sistemas de 64 bits, el procesador de la máquina física también deberá ser de 64 bits. Esto se puede verificar mediante el siguiente comando:

$ grep ' lm ' /proc/cpuinfo

Lo que obtiene:

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm dts tpr_shadow vnmi flexpriority

Tal y como se observa, nuestro procesador es de 64 bits, al tener activado el bit long mode.

Para finalizar con las comprobaciones previas deberemos verificar si el servidor ya cuenta con un kernel de 64 bits mediante el comando: 

$ uname -m


 Si la respuesta es x86_64 el servidor está utilizando un kernel de 64 bits, si por el contrario obtiene una respuesta como i686 se encuentra utilizando un kernel de 32 bits.

Fuente: HowToForge

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Virtualización con Ubuntu 11.10 y KVM (I-Teoría)

Virtualización se refiere a la abstracción de los recursos de una computadora, llamada Hypervisor o VMM (Virtual Machine Monitor) que crea una capa de abstracción entre el hardware de la máquina física (host) y el sistema operativo de la máquina virtual (virtual machine, guest), siendo un medio para crear una versión virtual de un dispositivo o recurso, como un servidor, un dispositivo de almacenamiento, una red o incluso un sistema operativo, donde se divide el recurso en uno o más entornos de ejecución.

Básicamente podemos considerar 3 tipos de virtualización: emulación, virtualización completa (Full Virtualization) y paravirtualización:

  • Emulación: La emulación se basa en crear máquinas virtuales que emulan el hardware de una o varias plataformas hardware distintas. Este tipo de virtualización es la más costosa y la menos eficiente, ya que obliga a simular completamente el comportamiento de la plataforma hardware a emular e implica también que cada instrucción que se ejecute en estas plataformas sea traducida al hardware real.

    Sin embargo la emulación tiene características interesantes, como poder ejecutar un sistema operativo diseñado para una plataforma concreta sobre otra plataforma, sin tener que modificarlo, o en el desarrollo de firmware para dispositivos hardware, donde se pueden comenzar estos desarrollos sin tener que esperar a tener disponible el hardware real.

  • Virtualización completa: Con este término se denominan aquellas soluciones que permiten ejecutar sistemas operativos huesped (Guest), sin tener que modificarlos, sobre un sistema anfitrión (Host), utilizando en medio un Hypervisor o Virtual Machine Monitor que permite compartir el hardware real. Esta capa intermedia es la encargada de monitorizar los sistemas huesped con el fin de capturar determinadas instrucciones protegidas de acceso al hardware, que no pueden realizar de forma nativa al no tener acceso directo a él.

    Su principal ventaja es que los sistemas operativos pueden ejecutarse sin ninguna modificación sobre la plataforma, aunque como inconveniente frente a la emulación, el sistema operativo debe estar soportado en la arquitectura virtualizada.

    En lo que respecta al rendimiento, éste es significativamente mayor que en la emulación, pero menor que en una plataforma nativa, debido a la monitorización y la mediación del hypervisor. Sin embargo, recientes incorporaciones técnicas en las plataformas x86 hechas por Intel y AMD, como son Intel VT y AMD-V, han permitido que soluciones basadas en la virtualización completa se acerquen prácticamente al rendimiento nativo.

    Un par de ejemplos significativos son VMware y KVM.

  • Paravirtualización: La paravirtualización surgió como una forma de mejorar la eficiencia de las máquinas virtuales y acercarlo al rendimiento nativo. Para ello se basa en que los sistemas virtualizados (huesped) deben estar basados en sistemas operativos especialmente modificados para ejecutarse sobre un Hypervisor. De esta forma no es necesario que éste monitorice todas las instrucciones, sino que los sistemas operativos huesped y anfitrión colaboran en la tarea.

    Uno de los componentes más destacados de esta familia es XEN, el cual permite paravirtualización utilizando sistemas operativos modificados, y virtualización completa sobre procesadores con tecnología Intel-VT o AMD-V. Para la gestión de las máquinas virtuales existen aplicaciones propietarias e incluso alguna open-source como ConVirt, que permite gestionar también desde un único sitio las máquinas virtuales de diferentes servidores, realizar tareas sobre ellas, o modificar sus configuraciones.

Cabría destacar otro tipo de productos para virtualizar que son aplicaciones de escritorio para virtualizar (OS level Virtualization), como Vmware-player y VirtualBox. Estos tipos de virtualización están muy bien para virtualizar Sistemas Operativos en nuestro escritorio y hacer pruebas puntuales pero no para estar siempre ejecutándose. Ya que son programas que requieren tener las X (Desktop), comparten los recursos del Host y no están indicados para ser ejecutados con un servicio o demonio del sistema en un servidor y su rendimiento es menor.

Características de KVM

Como se ha explicado en uno de los puntos anteriores, KVM es uno de los productos que ofrece virtualización completa, permitiendo a priori ejecutar, como huesped, cualquier sistema operativo sin tener que haberlo modificado previamente. Para ello se basa en las nuevas instrucciones Intel-VT y AMD-V, por lo que será necesario disponer de un equipo con un procesador que las soporte para poder utilizarlo.

La principal ventaja es que viene incluido como un módulo del kernel desde la versión 2.6.20 de Linux, por lo que no es necesario instalar ningún software específico. Si se dispone de una máquina con el procesador adecuado y se instala un linux basado en este kernel, se dispondrán automáticamente de los servicios de virtualización. 

El funcionamiento de KVM se basa en que el módulo introduce un nuevo modo de ejecución aparte de los habituales kernel y user mode, con el nombre “guest mode”. Este modo se utiliza para ejecutar todo el código de los huesped que no sea de entrada/salida (I/O), mientras que el modo “user mode” se utiliza para la I/O de los huesped.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS