Virtualización de servidores físicos GNU/Linux con KVM
Estos días he tendio que lidiar on una de esas tareas que a priori parecerán triviales y de repete te das cuenta de que no lo son tanto... Tenía que migrar un servidor físico a uno virtual. Si buscáis información en google al respecto encontraréis toneladas de información al respecto. Eso es lo que pensé yo a primera vista. Es una tarea tan "común" que tiene que haber mil documentos y páginas de referencia. PUES NO.
La mayoría de páginas que he encontrado hacen referencia a la virtualización de máquinas Windows a KVM, y aunque también encontré cómo virtualizar máquinas con GNU/Linux todas las que vi hacían referencia a la virtualización con OpenVZ.
Por lo general suelo utilizar como plataforma de virtualización una distribución llamada PROXMOX que me gusta mucho porque a parte de soportar máquinas virtuales con OpenVZ también soporta máquinas virtuales con KVM con lo cual nos permite aprovechar al máximo nuestros procesadores de última generación. Proxmox soporta VLANs directamente sobre las máquinas virtuales, lo cual es imprescindible para el entorno empresarial. Además proxmox ofrece una fácil e intuitiva interfaz gráfica via web, lo que nos permite acceder a nuestras máquinas virtuales desde cualquier lado, realizar backups y modificaciones de hardware en las mismas desde cualquier lugar. Y eso señores, es una gozada.
Bueno, pues el caso es que no fui capaz de encontrar referencias útiles en cuanto a migrar máquinas GNU/Linux a KVM así que ahí va el procedimiento que utilicé para la migración:
Lo primero fue hacer una inspección del disco duro de la máquina original. Observé que disponía de un disco duro de 250GB. El sistema utilizaba LVM en lugar de las tradicionales particiones. En total, el disco tenia unos 30GB de información ocupados, el resto estaba libre. Se trataba de un servidor que no requería de gran espacio de almacenamiento, así que pensé que para la máquina virtual no sería necesario tanto espacio.
Lo siguiente que hice en el servidor proxmox fue crear un disco virtual del tipo qcow2. Esto permite que el disco virtual vaya aumentando de tamaño segun los archivos que tenga que almacenar. Lo cree de un tamaño de 120GB. Esto hace que si bien el tamaño máximo de la información de este disco sea 120GB, realmente solo ocupe sobre la cantidad de GB necesarios para almacenar la información que contiene. Es decir, este disco va a aumentar de tamaño segun vaya almacenando datos, hasta llegar a su tamaño máximo de 120GB.
Llegó el momento de copiar la información del servidor original al nuevo. Para ello utilicé rsync, pero dado que no es posible montar una partición qcow2 de forma intuitiva tiré de ingenio. Creé la máquina virtual y le dije a proxmox que utilizara como disco duro primario de esa máquina el disco que creé en el paso anterior. Entonces me bajé Gentoo, e hice arrancar el nuevo servidor virtual desde la unidad de CD virtual. De este modo conseguí una shell, con acceso a un disco duro (que recordad, aun no estaba ni particionado ni nada).
Mediante cfdisk (hay quien prefiere fdisk, pero para gustos hay colores) creé una partición de 118GB, el resto lo dejé para swap. Acto seguido cree el sistema de archivos sobre la partición primaria, utilicé ext3. Después monté la partición sobre el primer directorio que pillé (en este caso /mnt/gentoo).
Bien, perfecto. Es hora de copiar la información (por fin!). Es importante tener configurada la red al llegar a este momento. Tecleamos rsyn... vaya, pues la aplicación rsync no viene dentro de la iso básica de Gentoo... mal vamos. En este momento os diré que lo más lógico es buscar una distribución que sí venga con rsync, y repetir los pasos anteriores. Pero como iba algo justo de tiempo os diré lo que hice. Una vez configurada la red, mediante scp copié el binario de rsync de otra máquina, y después copié la libreria "libpopt.so.0" necesaria para que rsync se ejecute sin problemas. Mediante ldconfig añadi /root como directorio de librerias de sistema. Con lo que voilá: en 2 minutos tenía rsync funcionando perfectamente en mi LiveCD de Gentoo :).
Antes de empezar a copiar información debemos tener en cuenta una cosa. Hay algunos direcotorios que por su contenido no deben ser copiados. Esto es porque contienen información relativa a hardware que si bien está presente en la máquina física no lo va a estar en la virtual, por tanto mejor evitar copiarlos. La lista de directorios especiales que utilicé yo es la siguiente:
/boot
/dev/*
/mnt/*
/tmp/*
/proc/*
/sys/*
/usr/src/*
/etc/sysconfig/network-scripts/ifcfg-eth*Guardad este listado en un archivo llamado excludes en el directorio /root.
Perfecto, llegó el gran momento. Vamos a copiar toda la información:
rsync -arvpz --numeric-ids --exclude-from '/root/excludes' $host:/ /mnt/gentoo/
Bien, el comando casi se explica por sí solo, pero vamos, básicamente es copiar el contenido de la raíz del sistema $host en el directorio /mnt/gentoo (recordemos que ahi es donde tenemos nuestro disco duro virtual de 120GB montado). Evidentemente vosotros tendréis que cambiar $host por la direccion IP de vuestro servidor origen, y /mn/gentoo por el directorio que estéis utilizando.
Este comando evidentemente tardará bastante, todo depende del volumen de información a copiar de un lado a otro. En mi caso tardó un par de horas.
Varios cafés después, una vez finalizado el proceso de copia de datos sobre nuestro nuevo servidor ya solo quedan por hacer algunos retoques. Para empezar, nos falta ajustar el sistema de arranque, recordemos que hemos dejado el directorio /boot vacío.
Yo probé mil opciones en este sentido, y por algun motivo que desconozco, en este contexto, no fui capaz de instalar grub directamente sobre mi disco duro virtual (Si alguien lo ha conseguido que comente cómo). Así que opté por crear una segunda unidad de disco virtual, en este caso con formato raw, y con un tamaño de 100MB. La formateé con ext3 y hice un chroot a mi nuevo entorno:
mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev
chroot /mnt/gentoo/ /bin/bash
Entonces ya fui capaz de montar esta nueva partición en el directorio /boot e instalar GRUB en ella. Sin más sobresaltos. A estas alturas de juego, si estás haciendo esto, presupongo que no necesitas ayuda con la instalación de GRUB, si no tu comentario es bienvenido.
Hay que recordar que antes de reiniciar nuestra máquina virtual, es necesario que modifiquemos el archivo /etc/fstab para que se adapte a nuestro nuevo contexto de particiones.
Una vez hecho esto ya podemos reiniciar para poder entrar en nuestro nuevo servidor virtual, un clon perfecto del original.
Insertar comentario:


