Imagina que vas a la casa de tu mejor amigo Linuxero y te encuentras que se ha instalado un Proxy/Firewall para su red, un servidor Web y DNS local y el Glorioso MythTV para grabar los programas de TV y verlos cuando y donde quiera. Mi primer reacción sería “wauuu”, y la segunda: “¡quiero uno igual!”
En este caso podemos elegir entre 3 opciones: convencerlo que su deber como Linuxero es compartir su servidor con sus amigos!; leer mucho, instalar, compilar, prueba y mucho error, y más lectura! (el camino que en algún momento deberemos tomar si queremos ser verdaderos Linuxeros.) o llevarnos su máquina virtual.
Personalmente elegiría la opción número 1, pero no creo que pueda retener su servidor por mucho tiempo. Esto nos lleva a elegir entre esperar a que el estudio y las horas de práctica den sus frutos, o bien traernos su máquina virtual.
Puede parecer confuso para los recién llegados al mundo de la virtualización, pero traernos su máquina virtual sería lo mismo que traernos su servidor entero (pero sin el hardware), sería como traernos su disco rígido, conectarlo a nuestra máquina y que todo funcione como en la otra máquina, sin importar el hecho de que el hardware sea distinto.
El software que permite que esto suceda se llama Virtualizador, y son aplicaciones que se encargan de crear una capa intermedia entre el sistema operativo y el hardware. No importa que hardware tengamos, el virtualizador emulará un hardware, siempre igual para el sistema operativo y de esta manera mientras usemos la misma aplicación el sistema operativo no se dará cuenta que está corriendo en otro lugar/equipo.
Esto significa que nos podríamos llevar su máquina virtual grabada en un DVD! lo que nos dá varias venta-jas:
• Nuestro amigo no se queda sin servidor.
• Vamos a tener más ganas de leer, compilar y practicar.
• Vamos a tener corriendo el mismo servidor en casa en un tiempo record!.
La Virtualización es un tema que cada vez capta más y más la atención de todos. Desde los que recién se inician en la arena de Linux y buscan una forma fácil y segura de instalarlo, pasando por los aficionados que prueban todas las distribuciones y aplicaciones que pasen por sus manos, hasta los grandes datacenters que buscan mejorar la utilización de sus servidores.
Virtualizar hardware es un tema que viene de varias décadas atrás cuando se intentaba subdividir a los mainframes en pequeñas máquinas virtuales y compartir el poder de procesamiento para diferentes aplicaciones. Pero tiempo después cuando los computadores bajaron de precio y la arquitectura x86 se hizo más popular y accesible, la virtualización fue dejando de existir y perdiendo sentido.
Hoy la rueda de la tecnología nos lleva de nuevo a una era de virtualización. Las compañías de todo el mundo comenzaron a uti-lizar esta tecnología en procesos de prueba de aplicaciones; por ejemplo un programa-dor podría tener en su computador un Win-dows 98, un Windows 2000 Pro y un Windows XP para probar que su aplicación en desarrollo
funcione correctamente en cada ambiente sin necesidad de tener más hardware dedicado.
Cada vez más la virtualización esta abar-cando muchas otras áreas, las empresas bus-can consolidar el uso de sus servidores mejorando la utilización de equipos, insta-lando hasta más de 4 servidores virtuales en un mismo hardware sin alterar la eficiencia del servicio o la seguridad de cada aplicación.
Por otro lado también se busca la independencia del hardware, al tener unamáquina virtual nos aseguramos que el ser-vidor podrá ser trasladado de un equipo a ot-ro de manera rápida y segura sin necesidad de reinstalar o modificar el sistema ope-rativo.
Las estadísticas nos muestran que en el 2005 un total del 5% de las instalaciones de sistemas operativos (tanto Linux como Windows) fueron hechas en máquinas virtuales y se estima que para el 2009 el total de las instalaciones en máquinas virtuales alcance el 40/50%.
Esto significa que de aquí a 3 años la gran mayoría de los lectores habrá tenido algún encuentro cercano con alguna de estas criaturas, incluso quien diga que nunca a utilizado un Linux o Windows virtualizado podría estar equivocado, quizás en el trabajo alguno de los servidores esté virtualizado, puede ser muy difícil darse cuenta si alguno de nuestros proveedores utiliza esta tecnología para brindarnos servicios.
Esta tecnología ha explotado a tal punto que el gigante de Redmond tuvo que hacer varios cambios en sus estrategias de negocios (alianza con Xen) para no perderse este mercado con crecimiento acelerado.
Enumeremos alguna de las ventajas más evidentes de la virtualización:
• Consolidación de Servidores. Muchas empresas tienen aplicaciones con un consumo muy bajo de recursos. De hecho el consumo de procesamiento en servidores de archivos, de impresión y algunos servidores de correo no son muy altos. Bien podríamos poner en un equipo todas estos servidores compartiendo el mismo hardware.
• Continuidad de Negocios, recuperación ante desastres. Al tener parte de nuestros servicios en máquinas virtuales, estas pue-den ser trasladadas de un lado a otro de manera transparente, permitiendo a las empresas ofrecer servicio aún cuando suceden desastres.
• Abstracción de hardware. Dado que las máquinas virtuales tienen siempre el mismo hardware virtual, los SO invitados
están aislados de cualquier cambio de hardware. Esto permite que estos SO puedan ser migrados de un lado al otro como si todo fuera el mismo equipo.
• Live Migration (migración en vivo) es una funcionalidad que permite trasladarun servidor funcionando en un equipo A a otro equipo B en cuestión de mili segundos y sin interrumpir el servicio!. Imagínense que tienen su propio servi-dor de Quake 3 y deciden cambiar su equi-po por uno más potente. Si tienen el servidor en una máquina virtual no haría falta apagar el equipo, solo conectan el equipo nuevo en red, instalado con la misma versión del servidor, y con una serie de comandos pasan el servicio de uno a otro sin mayor problema y lo me-jor de todo, sin que ningún usuario se décuenta!.
El concepto de la virtualización
Existen 2 grandes formas de virtualización, una es conocida como “Virtualización Completa” (Full Virtualization) y la otra como “Para-virtualización”. La primera hace mención a que todo el hardware de un equipo es emulado mediante software y la segunda técnica es la virtualización de solo parte del hardware.
Vamos a usar el gráfico siguiente para aclarar la terminología y reconocer sus componentes.
El sistema operativo encargado de administrar los recursos de hardware (real) se llama Sistema Operativo Anfitrión (Host OS), en el gráfico se puede ver en color verde claro.
Este SO es el encargado de administrar el hardware real y ofrecer acceso a los recursos del equipo. A los sistemas operativos que están dentro de las máquinas virtuales se los denomina Invitados/Huésped (Guest OS) y como se puede apreciar se encuentran más “lejos” del hardware real.
En el gráfico también se ve diferenciado el kernel del SO. Si bien el kernel es parte del SO, mostrarlo de esta manera da cuenta que en un mismo SO podemos tener diferentes kernels. (diferentes versiones, o diferentes arquitecturas, con drivers, etc).
En color naranja se simbolizan las aplicaciones que se ejecutan en el SO anfitrión. Una de ellas es la aplicación emuladora encargada de virtualizar el hardware.
De esta manera, podemos apreciar que el hardware virtual se encuentra dentro de una aplicación, y mientras usemos esta misma aplicación en otra máquina, nuestro hard-ware va a ser el mismo y nuestro sistema operativo invitado no podrá notar la diferencia.

Para entender el funcionamiento interno de las máquinas virtuales vamos a analizar la figura 2. El gráfico muestra varias capas que interactúan entre sí para dar la funcionalidad requerida.
Arriba de todo tenemos la capa que re-presenta las aplicaciones dentro de la máquina virtual. Le sigue el sistema operativo invitado, luego el hardware virtual que está ligado a una aplicación que se ejecuta en el sistema operativo anfitrión.

Las aplicaciones en la máquina virtual se comportan de la misma manera que en una máquina real. Por lo tanto utilizarán el sistema operativo (en este caso invitado) para acceder a los recursos que necesitan.
Veamos un caso típico paso por paso. Por ejemplo la lectura de un archivo:
• La aplicación (en el SO invitado) pide acceso al archivo helo.txt al SO.
• El SO atiende la solicitud.
• Utilizando el kernel adaptado al hardware virtual, el SO solicita al hardware acceso al disco.
• El hardware (virtual) antes de responder al kernel le pide al SO anfitrión acceso al disco.
• El SO anfitrión pide acceso al hardware real por medio de su kernel (adaptado al hardware real).
• El hardware real envía la respuesta al SO anfitrión quien luego se la envía a la aplicación.
• La aplicación luego responde al SO invitado mediante su hardware virtual.
• El SO invitado toma esta respuesta y le da acceso a la aplicación.
En estos pasos se puede ver como funciona la virtualización a grandes rasgos. Podemos notar que la máquina virtual en este caso, no es más ni menos que otra aplicación que está siendo ejecutada en nuestra máquina como si fuera Firefox o Gimp.
La tarea fundamental del software emulador es crear mediante software una máquina virtual (no real) donde los sistemas invitados van a instalarse y ejecutarse. El SO invitado reconoce el hardware emulado como si fuera su propio hardware “real”. Esta máquina vir-tual se encuentra limitada por el emulador de manera que cualquier acción del SO invitado estará limitado a esa máquina virtual. Aquí vemos que la utilización de máquinas virtuales nos brinda una mayor seguridad y aislamiento de las aplicaciones. Podríamos tener varias aplicaciones ejecutándose en un mismo servidor sin que unas interfieran con las otras y si uno de los SO invitados fuera hackeado las demás aplicaciones seguirían es-tando seguras.
Para que el SO invitado funcione correctamente, el software virtualizador deberá emular el HW a la perfección, haciendo creer al SO invitado que tiene acceso directo al equipo. Cada vez que el invitado quiera hacer uso de los recursos del hardware real (acce-so al disco, memoria, vídeo) lo hará por medio de la aplicación emuladora.
Un detalle más, en la siguiente figura se puede apreciar que es lo que pasa cuando el kernel no tiene soporte para un hardware determinado y se necesita de un driver externo para poder administrar ese dispositivo o funcionalidad del equipo.
Si están pensando que esto debe consu-mir muchísimo tiempo y poder de procesamiento, pues están en lo cierto. La virtualización completa (full virtualization) es una técnica que asegura que el SO invitado funcione de manera casi transparente, sin ninguna mo-dificación, pero tiene un precio muy alto a pa-gar y es el nivel de performance. En líneas ge-nerales se habla de un 20 a 30% de pérdida deperformance debido a esta técnica. Lo que sig-nifica que nuestro SO invitado va a estar uti-lizando un HW menos potente de lo que realmente es el HW.
Me imagino que a esta altura se estarán preguntando porqué utilizar este tipo de emulación. Pues muchas empresas tienen que mantener aplicaciones antiguas, que solo corren en servidores Windows NT 4.0 u otras y no quieren poner un servidor dedicado solo a esto. Utilizando esta técnica se aseguran que el SO invitado funcione de manera transparente.
También tenemos las empresas que desarrollan aplicaciones y utilizan estas máquinas virtuales para probar el código de su desarrollo. Un ejemplo de esto es el grupo de desarrolladores de Samba que utiliza VMWare para probar que su código sea compatible con varias versiones de Windows.
Para-virtualización
Si bien esta técnica de virtualización no es novedosa, el sistema operativo VM de IBM ya ofrecía máquinas virtuales basadas en paravirtualización hace varias décadas, esta técnica se hizo nuevamente popular cuando una aplicación de código libre comenzó a utilizarla para brindar virtualización en Linux.
El concepto de la para-virtualización es un poco más complejo, pero vamos a profundizar un poco más para poder comprender el verdadero mecanismo de funcionamiento.
Anillos de Seguridad
Antes de seguir con el tema de la virtualización, vamos a hacer un paréntesis para explicar un poco de arquitectura de computadores.
Si bien es un tema extenso y para muchos poco interesante, estos párrafos van a darnos una mayor comprensión del funcionamiento de los computadores.
Todo SO debe proveer mecanismos de seguridad y estabilidad de forma que asegure un correcto funcionamiento del computador. De nada nos sirve un sistema operativo que cuando una aplicación se comporta de manera no esperada todo el computador se bloquee.

Una forma de implementar estos mecanismos es dividiendo el acceso a los recursos por capas, dando a cada capa un privilegio diferente a la anterior. Esto significa que tendríamos capas que tienen privilegios de acceso a la memoria o el cpu, y capas que no tienen acceso al CPU o a parte de la memoria. Estas capas luego se usarían para encapsular a las aplicaciones, así una aplicación encapsulada en una capa de pocos privilegios estaría limitada y no podrá acceder a más recursos que su capa lo indique.
Los sistemas operativos basados en ar-quitecturas x86 tienen un mecanismo de implementar esta seguridad llamado “anillos de seguridad”. Estos anillos se utilizan para poder brindar diferentes niveles de acceso a los recursos.
Los anillos de seguridad se numeran del 0 al 3, siendo el 0 el anillo con mayor privilegios y el 3 con menor. Como dijimos antes, el anillo 1 tiene menores privilegios que el anillo 0, por lo tanto las aplicaciones que se ejecuten en este anillo 1 no tendrán los privilegios necesarios para acceder a parte del hardware y deberán solicitar a las aplicaciones del anillo 0 que ejecuten las instrucciones por ellas.
El kernel es la parte del SO que se ejecuta con mayor privilegios y por ende estará ejecutándose en el anillo 0 donde no tiene restricción alguna. Una aplicación como Firefox estaría ejecutándose en el anillo 3 y de esta manera cualquier problema con ella no daña la estabilidad del sistema.
Bien, ahora que tenemos este concepto claro, vamos a ver que tiene que ver con la paravirtualización. Los SO para x86, Windows, Linux, etc, están desarrollados para ser ejecutados en el anillo 0, o sea que necesitan total control del hardware. Aquí es donde tenemos el problema de ejecutar otro SO en el mismo computador, dado que ambos requerirían ejecutarse en el anillo 0.
Para evitar este problema y poder ejecutar un 2do SO invitado en el mismo computador, nace la paravirtualización. Esta técnica consiste en modificar el SO invitado, para que pueda funcionar correctamente en el anillo 1. De esta manera, el kernel invitado podrá ejecutarse sin acceso total al hardware y solicitar al kernel anfitrión que ejecute código de anillo 0 en su nombre.
Como habrán notado, la paravirtualización requiere que el SO invitado sea modificado para poder funcionar con el sistema anfitrión. Esto requiere que el código fuente esté disponible y es por ello que la paravirtualización se limita a SO de código libre como Linux.
El kernel invitado dirige las instrucciones privilegiadas al kernel anfitrión y el resto van directamente al hardware. El porqué la paravirtualización ofrece mayor performance que la virtualización completa, es una cuestión de números que ahora podremos hacer nosotros mismos.
Habiendo modificado el kernel del SO invitado, las máquinas paravirtualizadas se ejecutan más rápidamente dado que solo ciertas instrucciones son ejecutadas por medio del kernel anfitrión y el resto son directamente ejecutadas por ellos mismos.
La aplicación más exitosa que utiliza es-ta técnica se llama XEN, desarrollada por launiversidad de Cambridge en Inglaterra y unade las aplicaciónes de virtualización más exi-tosas junto con VMWare. A diferencia de la aplicación de VMWare, Xen es de código libre y permite a los SO invitados ejecutarse con una mínima pérdida de velocidad.
Para poder utilizar XEN en nuestras máquinas (Linux solamente) deberemos primero recompilar el kernel, dado que ahora nuestro kernel anfitrión deberá ser capaz de ejecutar las solicitudes de lo/los kernels invitados. Una vez que el kernel tiene las extensiones de Xen, deberemos ejecutar el servicio de Xen que se encargará de administrar las máquinas virtuales.
Mi recomendación personal es que uti-licen alguna distribución que ya venga preparada para Xen, como por ejemplo OpenSuse 10.1 (el DVD fué incluido en anteriores publicaciones). OpenSuse hace un excelente trabajo integrando Xen en el kernel disponible a la hora de instalarlo y de esta manera nuestro equipo se convertirá en una má-quina de virtualización al finalizar la instalación.
No todo lo que brilla es oro Aunque la paravirtualización y las facilidades de los nuevos CPUs de Intel y AMD (ver más adelante) proveen mayores niveles de performance para la virtualización, existe un cuello de botella en todo esto, y es el tema de E/S (entrada/salida) de dispositivos.
Si tuviéramos varias máquinas que necesitan mucho acceso a los dispositivos (mucha E/S), acceso al disco, a la red, etc, tendríamos que la performance de estas máquinas virtuales sería mucho menor de lo esperado. Las herramientas de administración de las máquinas virtuales permiten verificar el uso que cada SO invitado hace de los recursos y de esta manera detectar cuando una máquina virtual ha crecido lo suficiente como para merecerse su propio servidor.
Virtualizando nuestra máquina
Nada mejor que una buena práctica para poner a prueba esta tecnología, en este caso vamos a usar la virtualización completa. Para eso utilizaremos las aplicaciones de VMWare, dado que son las más sencillas para practicar.

VMWare tiene varias herramientas de virtualización, entre ellas VMWare Player y VMWare Workstation. La versión Worksta-tion (WS) es la encargada de “crear” la má-quina virtual. Utilizando esta aplicación po-demos asignar un espacio del disco y memo-ria para instalar otro sistema operativo, esta aplicación es paga, pero si nos registramos podemos bajar una versión de prueba por 30 días.
La aplicación Player es una versión reducida que solo permite ejecutar máquinas virtuales previamente creadas con la versión WS. Esta versión ocupa unos 30 megas y la podemos llevar en una llave USB.
Nosotros vamos a utilizar la versión WS para poder instalar nuestro propio Linux. Te-nemos que ir al sitio www.vmware.com registrarnos y luego bajar la versión adecuada pa-ra Windows o Linux.
En mi caso instalé la versión de Linux para crear la máquina virtual, pero también podemos utilizar la versión para Windows. Lo bueno de esta herramienta, es que las máquinas virtuales creadas en Windows pueden ser ejecutadas por la versión de Linux y viceversa.
Una vez que bajamos la aplicación, la instalamos según corresponda ya sea Windows o Linux. Lo primero que vamos a hacer es decirle que vamos a crear una nueva máquina virtual, tal como lo indica nuestra siguiente imagen. Seleccionamos el tipo de sistema operativo que vamos a utilizar y le damos nombre a la máquina virtual.
En la siguiente etapa definimos el nombre de la máquina virtual y el lugar donde guardaremos la imagen.
A continuación tenemos la selección de la configuración de red. Acá tenemos 4 opciones altamente confusas cuando las vemos por primera vez.
La primera opción es acerca de hacer un puente entre nuestra placa de red real y la placa de red virtual. Esto significa que con el mismo cable de red, se estarán conectando 2 placas.
La segunda opción es para que nuestra placa de red virtual pueda acceder a la red conectada a la placa real mediante NAT (network address translation) la misma técnica que usamos para compartir una sola conexión a Internet a varias máquinas.
La tercera opción es para que solo exista red entre la máquina anfitrión y la virtual, no permite que el SO invitado tenga acceso a la red conectada a nuestra máquina real.
¡La última opción habla por si misma! La forma más fácil de asegurarnos que funcione bien sería utilizando la 2da opción. Esto se debe a que generalmente tenemos solo una máquina conectada directamente a Internet y de esta manera compartiríamos la conexión con el SO invitado. El lado nega-tivo de esta opción es que la IP que el SO ob-tenga será privada y no podrá ser accedida desde otra máquina que no sea la anfitriona.
Si quisiéramos instalar un Linux con apache, y otra máquina se conectara en la misma red, no podríamos ver el servidor funcionando. En el caso que tengan una red interna, o un router, les aconsejo que utilicen la 1ra opción, de esta forma la máquina virtual obtendrá una IP dinámica del router y ustedes y el resto de la red la verán como un equipo más.
Luego tenemos la importante selección del tamaño de disco, acá les hago una advertencia benévola, cuando utilicen VMWare tienen que elegir muy bien el tamaño del disco, esto significa que si más adelante nos quedamos cortos con el espacio del disco nos encontraremos que es muy complejo poder agrandar el tamaño. Una vez que se hayan decidido por el tamaño les recomiendo que elijan la opción de reservar el tamaño del disco.
Una vez finalizada la configuración inicial vamos a colocar nuestro CD o DVD de instalación en la unidad y seleccionar el botón Iniciar (Start) máquina virtual. Una vez aquí ya nos queda el camino llano para instalar el SO elegido como lo harían con cualquier máquina real.
Una última recomendación es que una vez finalizada la instalación, deberán elegir en el menú de VMWare la opción ¨Instalar herramientas VMWare” que instalará en el SO invitado los drivers para el que reconozca el nuevo hardware virtual.
Jugadores Virtuales
Existen 3 grandes jugadores en la batalla de la virtualización. El primero y más grande es VMWare, empresa pionera en el área y que fue comprada hace relativamente poco por el gigante EMC (es conocida como la mejor empresa en productos de almacenamiento).
El segundo y más prometedor jugadores Xen de la compañía XenSource Inc. que ofrece su aplicación en código abierto y está disponible en varias distribuciones (Fedora, SuSE, Debian, Gentoo, etc). Utiliza las técnicas de paravirtualización y también ahora hace uso del VT y pacífica para poder ejecutar SO sin modificarlos.
Y el último pero no despreciable competidor es el Virtual PC Server de Microsoft, que permite ejecutar únicamente SO Windows. Sin embargo dado el liderazgo de VMWare en el mercado, Xen y Microsoft realizaron una alianza estratégica para asegurar que Linux se ejecute en su Virtual Server y que su nuevo sistema operativo Longhorn traiga la habilidad de virtualización por defecto.
Intel VT y AMD Pacífica dos chips listos para la virtualización
A fines del año pasado tanto Intel como AMD anunciaron el soporte de hardware para las crecientes necesidades de virtualización. Esta tecnología expande las posibilidades de virtualización mediante la adicción de 9 instrucciones al CPU que pueden ser utilizadas para administrar las máquinas virtuales con ayuda directa del CPU. Intel denomina a estas extensiones VT-i VT-x dependiendo si es para sus equipos Itanium o x86. AMD lo denomina “Pacífica”.
A partir de enero del 2006 muchas lap-tops/desktops y servidores ya tienen el sopor-te VT que permite ejecutar máquinas virtu-ales sin necesidad de modificar el SO invitado y con una performance muy superior al sistema de virtualización completa. Xen se vio mayormente beneficiado por estos chips dado que las Pcs con VT o Pacífica pod-rán ejecutar Windows de manera transpa-rente.
Más Avanzado En este artículo vimos como hacer una máquina virtual y llevarla de computador en computador utilizando las herramientas de VMWare. En el próximo artículo haremos al-go más avanzado y utilizaremos Xen para virtualizar un servidor Linux utilizando la técnica de paravirtualización y armar en un mismo hardware 2 servidores con diferentes SO, uno con Fedora y Apache, y el otro con OpenSuse y MySQL. ¡No se lo pierdan!
Fuente: Linux+
Escrito por Matías Barletta para Linux+