jueves, 3 de noviembre de 2016

Convertir una máquina física en virtual

En mi trabajo me he encontrado con un Linux alojado en una vieja y achacosa máquina, que contenía un programa que en su momento nos dio muchos problemas para configurarlo e infinitos dolores de cabeza. La máquina nos daba problemas de conectividad, no tenia pantalla… Y para colmo de males, en mi trabajo reina el mal, digo Windows. Y el programita en cuestión, OTRS solo corre en Linux.

Estaba la opción de crear una máquina virtual, instalar Linux, sufrir otra vez para instalar bien OTRS y luego pasar los datos… O también de convertir la máquina real en virtual y ejecutarla en cualquier sitio con VirtualBox.


Como no me apetecía bregar de nuevo con OTRS y los problemas para pasar los datos de una máquina a otra, opte por virtualizar. Te cuento como.

Lo primero es arrancar la máquina real con una versión live de Linux para poder copiar el contenido integro de su disco, incluidas todas las particiones y el swap. Para ello eche mano de un Ubuntu, pero lo cierto es que me hubiera valido cualquier distribución live.

Para empezar, necesitamos identificar donde está el disco a clonar. Desde la consola se lanza un

  • sudo df -h
y en mi caso solo había disco /dev/sda con sus correspondientes particiones. Así que ya tengo origen para mi conversión.

Luego necesito espacio para grabarlo todo. Puede ser un disco USB o una unidad de red. Sea como fuere, ahora es el momento de montar este almacenamiento, por ejemplo en /media/espacio

Y por fin pasamos a copiar los datos.
  • dd if=/dev/sda of=/media/espacio/disco.raw
Lo que hago es copiar todo sda en un fichero que se llamará disco.raw y estará en /media/espacio, que es la unidad de almacenamiento que he montado al efecto. Dependiendo del tamaño del disco original y de la velocidad de escritura, esto va a tardar entre muuuuuuuuuucho tiempo y muchiiiiiiiisimo tiempo.

Una vez que ya tengo el disco.raw, lo que necesito es que la máquina que va a oficiar de anfitriona tenga instalado VirtualBox. Una pasadita Synaptic y seguimos.

Cuando ya tenemos VirtualBox y disco.raw en la máquina anfitriona, llega el momento de convertir los datos crudos generados por dd en un disco .vdi que pueda manejar VirtualBox. Y es la misma aplicación la que se encarga de hacerlo.
  • sudo VBoxManage convertfromraw disco.raw --format vdi disco.vdi 
(¡OJO! son dos signos - juntos antes de format)
Ahora ya podemos crear una máquina virtual nueva y llegado el momento de seleccionar el disco duro, en lugar de crear uno nuevo utilizar el que nos ha costado tanto esfuerzo conseguir. Aunque podemos encontrarnos aun con algún obstáculo.

En primer lugar el disco tiene un tamaño bastante grande. Podemos tratar de compactarlo para que ocupe menos con:
  • sudo VBoxManage modifyhd --compact disco.vdi
(¡OJO! son dos signos - juntos antes de compact)

En segundo lugar, por algún motivo que no he logrado entender, VirtualBox puede dar problemas con la UUID del disco. Es decir, no tragarse su identificador universal. Si es el caso, podemos solucionarlo rápido y fácil con:
  • sudo VBoxManage internalcommands sethduuid /ruta/completa/a/disco.vdi
Y ahora sí, nuestra máquina física ya tiene un hijo virtual.

10 comentarios:

  1. Excelente artículo.

    Entiendo que puedo tomar mi máquina física con todo sus componentes de software, clonarla y luego utilizarla en cualquier otra máquina a través de Virtualbox.


    Gran ayuda con mi trabajo, muchas gracias.

    ResponderEliminar
    Respuestas
    1. Exacto. Imagina que tienes tu certificado para Hacienda, o un servidor de correo o un programa del que has perdido el instalador... Pos todo eso lo sigues teniendo.

      Eliminar
  2. Muy buena solución para no depender de una posible avería de hardware.
    Solo una duda, si en lugar de Linux se usa Windows la solución tiene el problema de los drivers que se puedan necesitar.

    ResponderEliminar
    Respuestas
    1. Los drivers ya van con el Windows que has virtualizado. El problema es que la tarjeta gráfica o de sonido, por poner dos ejemplos, cambiarían y ante cierto numero de cambios Windows puede decidir que necesitas una nueva licencia.

      Eliminar
  3. Buen articulo, pero VMware vCenter tiene una herramienta gratuita que hace eso, Vcenter Converter Stanalone Client, por lo menos yo la uso, por lo generar cuando quiero pasar un Windows a mi Linux uso esa Herramienta.

    ResponderEliminar
    Respuestas
    1. Por lo que sé, esa herramienta es solo para Windows, así que no podría virtualizar un Linux usándola.

      Eliminar
  4. en windows el tema es que cambia el hardware, lo que tenes que hacer es un sysprep (que desde windows 7 se volvio mas facil y viene en el sistema) esto borra los identificadores de hardware y cuando reinicia el sistema (pasandolo a otro hardware o virtual) empieza a reconocer los dispositivos como si fuera recien instalado. tambien puede borrar la activacion segun este configurado. por eso a partir de windows 7 la instalacion es mas rapida, plancha una imagen e incluso podes crear la tuya con software preinstalado y quemarla en un dvd

    por lo que entiendo según este articulo Linux no tiene esa limitación de cerrarse al hardware donde se instalo.

    buena data!!!!! habia buscado pero nunca la pude encontrar

    ResponderEliminar
    Respuestas
    1. En Windows si puedes tener muchos problemas por los drivers e incluso que no se active porque la licencia sea para una máquina o fabricante concreto.
      En Linux si funciona bien.

      Eliminar
  5. Hola, excelente articulo, sencillo y directo, pero en mi caso que tengo esta salida como deberia poner el comando dd?
    el destino no es problema porque puedo montar un disco usb, en mi caso la duda es si debo usar /sdb1 o debo usar el /dev/mapper/VolGroup00-LogVol00 ?

    seria asi?
    dd if=/dev/mapper/VolGroup00-LogVol00 of=/discousb/disco.raw

    [root@linux /]# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/VolGroup00-LogVol00
    61G 28G 30G 49% /
    /dev/sdb1 99M 31M 64M 33% /boot
    tmpfs 8.0G 0 8.0G 0% /dev/shm
    [root@linux /]# dd if=/dev/mapper/VolGroup00-LogVol00 of=/discousb/disco.raw

    ResponderEliminar

prekes sodui