miércoles, 13 de febrero de 2008

Virtualización de sistemas

---------------------------------------------------------------------------

Parte 1 : Introducción a la virtualización

Parte 2: Maquinas virtuales en Windows

Parte 3: Máquinas virtuales en Linux
---------------------------------------------------------------------------

Parte 1 : Introducción a la virtualización

En este nuevo articulo, os voy a hablar de una nueva tecnología que esta ahora emergiendo (aunque hace ya años que se esta desarrollando) que puede marcar una época y sobre todo una manera diferente de ver y gestionar las computadoras. Esta nueva tecnología se llama virtualización y nos esta llamando ya a la puerta de casa. Os dejo esta frase, dicha por Robert B. Crooke (Intel), que puede resumir lo que será la virtualización: "la virtualización es una de las tecnologías más revolucionarias de la década, y nuestra tecnología combinada con los esfuerzos conjuntos de la industria ayudarán a llevar esta revolución al mercado masivo de PCs”.


Al usuario doméstico, normal, de ir por casa, lo que quiere es que el tiempo de respuesta de la computadora sea lo mas pequeño posible (es decir, que cuando le demos al botón, se nos muestre la información tan rápido como sea posible). Por contra, a los administradores de sistemas quieren que la productividad de la máquina sea lo mas alta posible, aun cuando aumentemos un poco el tiempo de respuesta. En términos estadísticos podemos decir solo aprovechamos la mitad de la capacidad de cálculo de los servidores, mientras que el tiempo restante, la máquina no hace nada productivo. En ese afán por disminuir ese tiempo "muerto" han surgido ideas como la virtualización para rellenar ese vacío.

La idea principal de la virtualización consiste en montar un sistema operativo virtual encima de un sistema operativo base. Dicho de otra forma, podemos tener un sistema anfitrión Linux y encima de este sistema base, hacer correr otro SO como pueda ser Linux o FreeBSD. Cada nuevo sistema que queramos lanzar encima del SO anfitrión constituirá una nueva maquina virtual, la cual tendrá acceso a todos los recursos del hardware (como si no estuviera montado sobre otro SO), pero a la vez también estará aislada dentro del sistema operativo anfitrión, de manera que si se produce algún fallo en la máquina virtual, este solo afectará a la máquina virtual en cuestión y no a todo el sistema base. Las ventajas que nos ofrece la virtualización son muchas y muy grandes. Por ejemplo, parémonos a pensar en un entorno de una pequeña empresa, que empezó con un servidor que registraba las llamadas. Era un Pentium PRO, y estaba sobrado, pero en seguida tuvieron que agregar otro, ya que los procesos de facturación ahogaban a los procesos de tiempo real (era solo un día al mes, pero ese día perdían registros de llamadas). Luego agregaron otro servidor de backup. Después vino otro para las estadísticas. Luego vino otro, esta vez para Web server, ya que teníamos que separarlo de las bases de datos criticas. Y así así hasta alcanzar unas 50 máquinas. Casi todos usaban la CPU a menos del 5% y aparte había que añadirle la dificultad de la administración los servidores. Aquí es donde entra en juego la virtualización en su mejor faceta. Cojo un servidor, instalo un sistema base y a partir de ahí (sobre él) instalo el sistema operativo que mejor desempeñe nuestra tarea (un sistema para cada tarea si lo vemos oportuno incluso), donde cada uno de estos nuevos sistemas estarán asilados el uno del otro.
Perdonen por esta aburrida historieta, pero no crean que estoy exagerando o que esto no ocurre en la realidad, ya que la historia que les he contado es real (aquí les dejo el enlace) y es un ejemplo perfecto de la gran utilidad que tiene la virtualización.

Y para el usuario doméstico, que es la gran mayoría, ¿cuales son las ventajas que aporta esta nueva tecnología? Para empezar, podremos crear diferentes maquinas virtuales de los diferentes sistemas operativos que queramos para poder hacer nuestras pruebas, con la garantía de que si ocurre un fallo (llámale "destrucción" de parte del sistema operativo, infección de algún tipo de virus, etc., etc.) en la máquina virtual, no afectará para nada en la máquina base (las máquinas están totalmente aisladas). También podremos crear nuestra propia red de ordenador, simulando distintas máquinas virtuales conectadas entre ellas como si fuera una red real (podremos acceder a las máquinas virtuales como si de ordenadores físicos se trataran). Estas y muchas otras cosas son posibles gracias a la virtualización.

Entrando ya de lleno en el tema en si, podríamos distinguir entre dos grandes clases de virtualización: la virtualización por hardware y la virtualización por software (que utiliza o puede aprovecharse de la virtualización por hardware).

Todos hemos escuchado últimamente que Intel ha incorporado a sus nuevos procesadores la tecnología de virtualización. Lo que incorporan estos nuevos procesadores es un nuevo conjunto de instrucciones máquinas que faciliten y mejoren las posibilidades de virtualización. Paralelamente a estas nuevo set de instrucciones, también están saliendo al mercado procesadores de doble núcleo, quad, incluso en un futuro no muy lejano de ocho núcleos. Estos nuevos procesadores permiten dedicar cada procesador a una maquina virtual distinta y aislar la ejecución de los sistemas operativos virtuales y que estos hagan un uso intensivo de su propia cpu.

Tanto para los procesadores Intel como AMD (tanto para servidores, como para usuarios domésticos) la tecnología de virtualización ya esta en el mercado. La tecnología en Intel se llama Intel VT (IVT) y en AMD se llama AMD virtualization (AMD-V ) también llamado Pacifica. Intel ya había incorporado la tecnología de virtualización a sus servidores, pero ahora la extiende a máquinas domésticas.

Repasando un poco la historia, podemos darnos cuenta que hace ya 30 años IBM implementó ya la tecnología de virtualización, pero es ahora con la exportación al usuario doméstico cuando se ha dado a conocer masivamente.

Por lo que respecta a la virtualización por software, me refiero con este término (no se si realmente será el mas adecuado o no) a la instalación de un software sobre un sistema operativo que me permita virtualizar parte o totalmente el sistema. Existen muchas clases de virtualización según el grado en que este emulado el sistema: emulación, virtualización parcial o completa, virtualización de aplicaciones, paravirtualización, virtulización de servidores... . Es decir, podemos emular todo el PC (incluyendo el procesador,RAM,etc), o solo algunas partes básicas del sistema. Nosotros nos centraremos en el tipo de virtualización denominada virtualización completa que nos permite crear una máquina virtual sin virtualizar la CPU. Emularemos en la máquina virtual casi todo el hardware (tarjeta de sonido, tarjeta de red, RAM, disco duro, BIOS,... ) menos la CPU. Para permitir este tipo de virtualización existen múltiples programas que nos lo permiten hacer y que se ejecutan sobre muchos sistemas operativos.


Como hemos estado viendo la virtualización es una opción a tener en cuenta a corto y largo plazo debido a sus múltiples ventajas, a propri para sistemas servidores, pero poco a poco también para el usuario doméstico. Por eso no nos ha de extrañar que empresas como SUN compren Innotek, compañía creadora de VirtualBox.

Vamos pues a ver distintos softwares que tenemos, tanto para la plataforma GNU/Linux como Windows, para la creación de máquinas virtuales.