Virtualización · 8 min read · Jan 12, 2026

Virtualización Con KVM En Ubuntu 12.04 LTS

Virtualización Con KVM En Ubuntu 12.04 LTS

Versión 1.0
Autor: Falko Timme
Sígueme en Twitter

Esta guía explica cómo puedes instalar y usar KVM para crear y ejecutar máquinas virtuales en un servidor Ubuntu 12.04 LTS. Te mostraré cómo crear máquinas virtuales basadas en imágenes y también máquinas virtuales que utilizan un volumen lógico (LVM). KVM es la abreviatura de Kernel-based Virtual Machine y hace uso de la virtualización de hardware, es decir, necesitas una CPU que soporte virtualización de hardware, por ejemplo, Intel VT o AMD-V.

¡No ofrezco ninguna garantía de que esto funcione para ti!

1 Nota Preliminar

Estoy usando una máquina con el nombre de host server1.example.com y la dirección IP 192.168.0.100 aquí como mi host KVM.

Debido a que ejecutaremos todos los pasos de este tutorial con privilegios de root, podemos anteponer todos los comandos en este tutorial con la cadena sudo, o podemos convertirnos en root ahora mismo escribiendo

sudo su

2 Instalando KVM Y vmbuilder

Primero verifica si tu CPU soporta virtualización de hardware - si este es el caso, el comando

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

debe mostrar algo, por ejemplo, algo como esto:

root@server1:~# egrep '(vmx|svm)' --color=always /proc/cpuinfo  
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush  
mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl extd_apicid  
pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv  
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush  
mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl extd_apicid  
pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv  
root@server1:~#

Si no se muestra nada, entonces tu procesador no soporta virtualización de hardware, y debes detenerte aquí.

Para instalar KVM y vmbuilder (un script para crear máquinas virtuales basadas en Ubuntu), ejecutamos

apt-get install ubuntu-virt-server python-vm-builder kvm-ipxe

Después debemos agregar al usuario con el que estamos actualmente conectados (root) al grupo libvirtd:

adduser `id -un` libvirtd  
adduser `id -un` kvm

Necesitas cerrar sesión y volver a iniciar sesión para que los nuevos grupos tengan efecto.

Para verificar si KVM se ha instalado correctamente, ejecuta

virsh -c qemu:///system list

Debería mostrar algo como esto:

root@server1:~# virsh -c qemu:///system list  
 Id Name                 State  
----------------------------------  
  
root@server1:~#

Si muestra un error en su lugar, entonces algo salió mal.

A continuación, necesitamos configurar un puente de red en nuestro servidor para que nuestras máquinas virtuales puedan ser accedidas desde otros hosts como si fueran sistemas físicos en la red.

Para hacer esto, instalamos el paquete bridge-utils…

apt-get install bridge-utils

… y configuramos un puente. Abre /etc/network/interfaces:

vi /etc/network/interfaces

Antes de la modificación, mi archivo se ve de la siguiente manera:

| # Este archivo describe las interfaces de red disponibles en tu sistema # y cómo activarlas. Para más información, consulta interfaces(5). # La interfaz de red de loopback auto lo iface lo inet loopback # La interfaz de red principal auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4 |

Lo cambio para que se vea así:

| # Este archivo describe las interfaces de red disponibles en tu sistema # y cómo activarlas. Para más información, consulta interfaces(5). # La interfaz de red de loopback auto lo iface lo inet loopback # La interfaz de red principal auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 192.168.0.100 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off |

(¡Asegúrate de usar la configuración correcta para tu red!)

Reinicia la red…

/etc/init.d/networking restart

… y ejecuta

ifconfig

Ahora debería mostrar el puente de red (br0):

root@server1:~# ifconfig  
br0       Link encap:Ethernet  HWaddr 00:1e:90:f3:f0:02  
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0  
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:29 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:1934 (1.9 KB)  TX bytes:2844 (2.8 KB)  
  
eth0      Link encap:Ethernet  HWaddr 00:1e:90:f3:f0:02  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:44613 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:23445 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000  
          RX bytes:63663064 (63.6 MB)  TX bytes:1792940 (1.7 MB)  
          Interrupt:41 Base address:0xa000  
  
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0  
          inet6 addr: ::1/128 Scope:Host  
          UP LOOPBACK RUNNING  MTU:16436  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  
  
virbr0    Link encap:Ethernet  HWaddr 2a:4a:49:13:de:8f  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  
  
root@server1:~#

Antes de comenzar nuestra primera máquina virtual, recomiendo reiniciar el sistema:

reboot

Si no lo haces, podrías obtener un error como open /dev/kvm: Permission denied en los registros de la máquina virtual en el directorio /var/log/libvirt/qemu/.

3 Creando Una VM Basada En Imágenes

Ahora podemos crear nuestra primera VM - una VM basada en imágenes (si esperas mucho tráfico y muchas operaciones de lectura y escritura para esa VM, usa una VM basada en LVM en su lugar como se muestra en el capítulo 6 - las VMs basadas en imágenes son pesadas en IO de disco duro).

Quiero crear mis máquinas virtuales en el directorio /var/lib/libvirt/images/ (no se pueden crear en el directorio /root porque el usuario libvirt-qemu no tiene permisos de lectura en ese directorio).

Crearemos un nuevo directorio para cada VM que queramos crear, por ejemplo, /var/lib/libvirt/images/vm1, /var/lib/libvirt/images/vm2, /var/lib/libvirt/images/vm3, y así sucesivamente, porque cada VM tendrá un subdirectorio llamado ubuntu-kvm, y obviamente solo puede haber un directorio de este tipo en /var/lib/libvirt/images/vm1, por ejemplo. Si intentas crear una segunda VM en /var/lib/libvirt/images/vm1, por ejemplo, recibirás un mensaje de error que dice ubuntu-kvm ya existe (a menos que ejecutes vmbuilder con el argumento –dest=DESTDIR):

root@server1:/var/lib/libvirt/images/vm1# vmbuilder kvm ubuntu -c vm2.cfg  
2009-05-07 16:32:44,185 INFO     Cleaning up  
ubuntu-kvm ya existe  
root@server1:/var/lib/libvirt/images/vm1#

Usaremos la herramienta vmbuilder para crear VMs. (Puedes aprender más sobre vmbuilder aquí.) vmbuilder utiliza una plantilla para crear máquinas virtuales - esta plantilla se encuentra en el directorio /etc/vmbuilder/libvirt/. Primero creamos una copia:

mkdir -p /var/lib/libvirt/images/vm1/mytemplates/libvirt  
cp /etc/vmbuilder/libvirt/* /var/lib/libvirt/images/vm1/mytemplates/libvirt/

Ahora llegamos a la partición de nuestra VM. Creamos un archivo llamado vmbuilder.partition…

vi /var/lib/libvirt/images/vm1/vmbuilder.partition

… y definimos las particiones deseadas de la siguiente manera:

| root 8000 swap 4000 --- /var 20000 |

Esto define una partición raíz (/) con un tamaño de 8000MB, una partición de intercambio de 4000MB, y una partición /var de 20000MB. La línea — hace que la siguiente partición (/var en este ejemplo) esté en una imagen de disco separada (es decir, esto crearía dos imágenes de disco, una para root y swap y otra para /var). Por supuesto, eres libre de definir cualquier partición que desees (siempre que también definas root y swap), y por supuesto, pueden estar en una sola imagen de disco - esto es solo un ejemplo.

Quiero instalar openssh-server en la VM. Para asegurarme de que cada VM obtenga una clave OpenSSH única, no podemos instalar openssh-server cuando creamos la VM. Por lo tanto, creamos un script llamado boot.sh que se ejecutará cuando la VM se inicie por primera vez. Instalará openssh-server (con una clave única) y también forzará al usuario (usaré el nombre de usuario predeterminado administrador para mis VMs junto con la contraseña predeterminada howtoforge) a cambiar la contraseña cuando inicie sesión por primera vez:

vi /var/lib/libvirt/images/vm1/boot.sh

| # Este script se ejecutará la primera vez que la máquina virtual arranque # Se ejecuta como root. # Expira la cuenta de usuario passwd -e administrador # Instala openssh-server apt-get update apt-get install -qqy --force-yes openssh-server |

Asegúrate de reemplazar el nombre de usuario administrador con tu nombre de inicio de sesión predeterminado.

(Puedes encontrar más sobre esto aquí: https://help.ubuntu.com/community/JeOSVMBuilder#First%20boot)

(Puedes también definir un script de “primer inicio de sesión” como se describe aquí: https://help.ubuntu.com/community/JeOSVMBuilder#First%20login)

Ahora echa un vistazo a

vmbuilder kvm ubuntu --help

para aprender sobre las opciones disponibles.

Para crear nuestra primera VM, vm1, vamos al directorio de la VM…

cd /var/lib/libvirt/images/vm1/

… y ejecutamos vmbuilder, por ejemplo, de la siguiente manera:

vmbuilder kvm ubuntu --suite=precise --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --ip=192.168.0.101 --gw=192.168.0.1 --part=vmbuilder.partition --templates=mytemplates --user=administrador --name=Administrador --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

La mayoría de las opciones son autoexplicativas. –part especifica el archivo con los detalles de particionamiento, relativo a nuestro directorio de trabajo (por eso tuvimos que ir a nuestro directorio de VM antes de ejecutar vmbuilder), –templates especifica el directorio que contiene el archivo de plantilla (nuevamente relativo a nuestro directorio de trabajo), y –firstboot especifica el script de primer inicio. –libvirt=qemu:///system le dice a KVM que agregue esta VM a la lista de máquinas virtuales disponibles. –addpkg te permite especificar paquetes de Ubuntu que deseas que se instalen durante la creación de la VM (ver arriba por qué no deberías agregar openssh-server a esa lista y usar el script de primer inicio en su lugar). –bridge configura una red en puente; como hemos creado el puente br0 en el capítulo 2, especificamos ese puente aquí.

En la línea –mirror, puedes especificar un repositorio oficial de Ubuntu en –mirror, por ejemplo, http://de.archive.ubuntu.com/ubuntu. Si omites –mirror, entonces se usará el repositorio predeterminado de Ubuntu (http://archive.ubuntu.com/ubuntu).

El proceso de construcción puede tardar unos minutos.

Después, puedes encontrar un archivo de configuración XML para la VM en /etc/libvirt/qemu/ (=> /etc/libvirt/qemu/vm1.xml):

ls -l /etc/libvirt/qemu/
root@server1:/var/lib/libvirt/images/vm1# ls -l /etc/libvirt/qemu/  
total 8  
drwxr-xr-x 3 root root 4096 May 21 13:00 networks  
-rw------- 1 root root 2082 May 21 13:15 vm1.xml  
root@server1:/var/lib/libvirt/images/vm1#

Las imágenes de disco se encuentran en el subdirectorio ubuntu-kvm/ de nuestro directorio de VM:

ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/
root@server1:/var/lib/libvirt/images/vm1# ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/  
total 604312  
-rw-r--r-- 1 root root 324337664 May 21 13:14 tmpE4IiRv.qcow2  
-rw-r--r-- 1 root root 294715392 May 21 13:15 tmpxvSVOT.qcow2  
root@server1:/var/lib/libvirt/images/vm1#
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.