# Virtualización de hardware

La Virtualización de hardware, también llamada virtualización de plataforma, virtualización de servidor o virtualización en servidores consiste fundamentalmente en la abstracción de todo el hardware subyacente de una plataforma de manera que se crea un entorno en el que un servidor físico se divide en varios servidores virtuales, múltiples instancias de sistemas operativos que funcionan de manera independiente, con la ilusión de que los recursos abstraídos les pertenecen en exclusiva. Este tipo de virtualización oculta las características físicas de la plataforma de computación a los usuarios, presentando en su lugar una abstracción de la plataforma de computación.
Esto proporciona flexibilidad y una mejor utilización de los recursos del servidor físico.

## Componentes

Los elementos que componen este tipo de virtualización son:
* Hardware de la máquina. Constituye el hardware sobre el que aplicaremos las técnicas de virtualización y aportará los recursos hardware que se usarán realmente.
* Capa de virtualización. Es la capa de software que realiza la virtualización. Dependiendo de la solución de virtualización escogida la capa estará ubicada de forma diferente. En sus orígenes este se le llamaba programa de control, sin embargo hoy día se le suele llama hipervisor, Monitor de máquina virtual o VMM (siglas del inglés Virtual Machine Monitor. El término hipervisor se usa de manera inconsistente de forma que algunas fuentes lo usan solo para ciertos tipos de capa de virtualización y otras lo usan en general.
* Máquinas virtuales de sistema. Es el entorno virtualizado que dispone de su propio hardware de forma virtual, y está formado por su propia instancia de un sistema operativo donde se ejecutan sus propias aplicaciones como si de un computador real se tratara. Podemos tener tantas máquinas virtuales de sistema como los recursos del servidor anfitrión nos lo permitan.

## Usos y ventajas

La virtualización de servidores ofrece diversas ventajas y motivaciones para su implementación. Históricamente, las organizaciones solían utilizar servidores dedicados para cada aplicación o departamento, lo que implicaba altos costos en hardware, software, energía e infraestructura, así como en la gestión de dichos servidores.
* Optimización en el uso hardware. La virtualización de servidores resuelve algunos de los problemas históricos al permitir la consolidación de recursos. Mediante esta tecnología, se puede maximizar la utilización de los servidores físicos, optimizando su capacidad de procesamiento, memoria y almacenamiento. Esto conlleva un mayor aprovechamiento de los recursos y una reducción en el número total de servidores requeridos.
* Flexibilidad y escalabilidad. Los servidores virtuales pueden ser creados, configurados y desplegados de manera rápida y sencilla, adaptándose a las necesidades cambiantes de la empresa. Los recursos pueden ser asignados y ajustados dinámicamente sin interrumpir los servicios en funcionamiento.
* Alta disponibilidad y recuperación ante desastres. Mediante técnicas como la replicación de servidores virtuales, es posible garantizar una rápida recuperación en caso de fallos o desastres, minimizando el tiempo de inactividad.
* Ahorro de costos significativo. Al reducir la cantidad de servidores físicos necesarios, se disminuyen los gastos asociados con el hardware, el consumo de energía, la refrigeración y el espacio físico en el centro de datos.
* Posibilidad de realizar pruebas y desarrollo eficientes. Con entornos virtuales aislados, es más fácil llevar a cabo pruebas de nuevos sistemas operativos, actualizaciones y configuraciones, sin afectar el entorno de producción. Esto facilita la experimentación y el despliegue de nuevas aplicaciones.
** Por ejemplo, que la máquina virtual proporcione una arquitectura de instrucciones (ISA) que sea algo distinta de la verdadera máquina.
* Mejor administración del entorno.
** La gestión de servidores virtuales es más eficiente y simplificada en comparación con los servidores físicos. Mediante herramientas de administración y software de virtualización, es posible realizar tareas de configuración, monitoreo y mantenimiento de manera centralizada. Esto permite un control más preciso y una mejor supervisión del entorno virtual. La gestión de recursos se vuelve más dinámica y adaptable en la virtualización. Los administradores pueden asignar y ajustar los recursos de forma flexible según las necesidades cambiantes de las aplicaciones y los servicios. Esto proporciona una optimización continua de los recursos y evita el desperdicio de capacidad no utilizada. Además, la gestión del rendimiento se simplifica al poder monitorear y ajustar los recursos en tiempo real.
** En cuanto a las copias de seguridad, la virtualización facilita la realización de copias de seguridad completas de máquinas virtuales. Al tener una imagen completa de una máquina virtual, incluyendo su sistema operativo, configuración y datos, se pueden realizar copias de seguridad de manera más eficiente y con menos interrupciones en comparación con los servidores físicos. Además, la virtualización permite la realización de snapshots o instantáneas de máquinas virtuales en un momento específico. Estas instantáneas capturan el estado de la máquina virtual en un determinado instante, lo que facilita la restauración rápida en caso de algún error o problema. Si se produce algún fallo en el sistema, es posible revertir la máquina virtual al estado previo al error mediante la restauración desde el snapshot, lo que minimiza el tiempo de inactividad y agiliza la recuperación.
** Otra ventaja importante es la capacidad de migrar o mover máquinas virtuales entre servidores físicos sin interrupciones en el servicio. Esto permite una mayor flexibilidad en la administración de la carga de trabajo y la capacidad de respuesta a cambios en la infraestructura. Si es necesario realizar mantenimiento en un servidor físico, las máquinas virtuales pueden ser migradas a otros servidores sin afectar la disponibilidad de los servicios.

## Tipos

Podemos clasificar las virtualización de plataforma según como se ejecuta el hipervisor:
* Virtualización tipo 1, Virtualización nativa, Virtualización unhosted o Virtualización bare metal El hipervisor se ejecuta directamente sobre el hardware físico, las máquina virtuales se ejecutan sobre él y todos los accesos directos a hardware son controlados por el hipervisor.
* Virtualización tipo 2 o Virtualización hosted. Sobre el hardware se ejecuta un sistema operativo anfitrión el cual ejecuta una aplicación de virtualización que se encarga de gestionar y administrar las máquinas virtuales, controla el acceso a los recursos hardware disponibles en el equipo físico e intercepta y trata cualquier instrucción privilegiada emitida por las máquinas virtuales.
* Virtualización híbrida. Sobre el hardware se ejecuta un sistema operativo anfitrión y un hipervisor. El hipervisor a veces interacciona directamente sobre el hardware pero otras veces usa servicios que le proporciona el sistema operativo anfitrión.
El hipervisor Tipo 1 por lo general es más rápido que el tipo dos, pues está directamente implantado sobre el hardware, administra los recursos de manera directa, por otro lado, el tipo 2 está instalado como software sobre un sistema operativo principal, por lo que las aplicaciones dentro de la máquina virtual no solo tienen que comunicarse con el hipervisor para acceder a los recursos del hardware, sino que también a su vez, el hipervisor tipo 2 tiene que comunicarse con el sistema operativo para que este último de los recursos que necesita el hipervisor.
Algo que tienen en común estos 2 tipos de hipervisores es que hacen el uso de diferentes tecnologías para la administración de los recursos, una de las más importantes es la aceleración por Hardware.

## Creación de máquinas virtuales de sistema

Podemos crear máquinas virtuales de sistema de las siguientes formas:
* Creación desde cero. Es habitual que los hipervisores permitan seleccionar la especificación de la máquina virtual a usar y se permita instalar sobre ella un sistema operativo. Por ejemplo cargando el sistema operativo a partir de una imagen ISO.
* Clonación. A partir de los ficheros de una máquina virtual se pueden crear otro. A veces basta con copiar directamente los ficheros y otras el proceso es más complicado siendo necesario realizar cierta configuración, por lo que se usan herramientas de clonado.
* Exportar la máquina virtual a formato Open Virtualization Format (OVF) que luego puede ser importado desde un hipervisor y a veces hay que ajustarle la configuración. Este formato está formado por varios ficheros, esto produce cierta dificultad cuando se transmite por red. Por esta razón algunos hipervisores reconocen el formato Open Virtualization Archive (OVA), un fichero comprimido que guarda en sí mismo los distitnos ficheros del formato Open Virtualization Format (OVF).
* Usar plantilla de máquina virtual que sirven de base para crear una nueva máquina virtual. Estas plantillas las suelen crear los hipervisores a partir de máquinas virtuales ya configuradas.
* Usando herramientas P2V (del inglés Physical-to-Virtual) que a partir de un servidor físico real pueden generar una máquina virtual equivalente.