Cómo virtualizar una partición Windows ya existente

Como algunos recordaréis, mi primera aproximación a este tema se quedó en agua de borrajas, por cuanto VMware 5 no me permitía arrancar desde un disco Serial ATA. Sin embargo la extraordinaria acogida del intento, junto al hecho de que dejara de estar accesible la información que estábamos utilizando como guía, hicieron que considerara pendiente la elaboración de un tutorial completo y esta vez autocontenido, para no tener que depender nunca más de la eventual disponibilidad de enlaces ajenos. Por otra parte, la reciente publicación de VMware 6 me hizo concebir esperanzas (luego confirmadas) respecto a la posibilidad de arrancar desde un SATA, con lo cual pensé que merecía la pena intentarlo de nuevo.

La situación de partida más común es la siguiente: dispones de un sistema con arranque dual (Windows, Linux) y aunque utilizas habitualmente Linux, de vez en cuando aún necesitas ejecutar algo en Windows. En un tutorial anterior ya explicamos cómo utilizar para ello una copia virtualizada, pero ahora vamos un paso más lejos: lo que utilizaremos virtualizado será nuestra propia partición windows real, de forma que las modificaciones que realicemos quedarán guardadas en él, y no en una simple copia. Además, si VMware algún día nos fallara, siempre seguiríamos disponiendo de la posibilidad de arrancar nuestro Windows nativo tal y como veníamos haciendo.

Para este tutorial he utilizado VMware Workstation 6 para Linux, un programa comercial con 30 días de prueba.También es posible virtualizar la partición Windows con VMware Player, pero éste carece -si no me equivoco- de la posibilidad de instalar posteriormente las VM Tools, lo que obliga a realizar unas cuantas maniobras más para lograr nuestro objetivo, y a ello quizás dediquemos otro tutorial. Es posible que este tutorial pueda seguirse también con VMware Server, que sí es gratuito; espero que algún lector que lo utilice pueda confirmar o desmentir este extremo...

PRECAUCIONES PREVIAS

Es muy probable que al arrancar Linux vengas montando automáticamente tu partición Windows para disponer de acceso a ella. Lo primero es desmontarla y desactivar ese montaje automático comentando la línea correspondiente en tu fichero /etc/fstab. De lo contrario podría ocurrir que intentaras acceder desde dos sistemas diferentes a la misma partición, con resultados imprevisibles, pero probablemente desastrosos. Por tanto, comienza con un umount /mnt/windows (o lo que corresponda en tu caso) y escribe el carácter almohadilla en la línea de fstab que hace referencia a tu partición windows.

Otra posibilidad que podría llevarnos a un desastre aún peor (porque podría destruir tu sistema Linux) sería elegir Linux por error desde el menú de arranque de la máquina virtualizada, lo que equivaldría a intentar arrancar Linux desde dentro de Linux. Para prevenir este otro posible desastre lo mejor es comentar de momento el timeout del fichero menu.lst de grub y seleccionar Windows como el sistema de arranque por defecto.

PREPARAR WINDOWS

La idea aquí es crear un nuevo perfil de hardware (que puedes denominar "virtual" o "vmware") con un Windows tan "limpio" como sea posible, eliminando dispositivos o controladores que puedan resultar conflictivos. No puedo darte normas generales, excepto que crees un nuevo perfil virtual y le des un nombre, aunque sólo sea una copia exacta del actual. En cualquier caso también es buena idea establecer la opción que permite esperar hasta que se seleccione un perfil de hardware y colocar el perfil virtual como opción por defecto.

En mi caso (insisto, disco Serial ATA) fue imprescindible desinstalar los controladores IDE y sustituirlos por controladores estándar. En este caso -y otros similares- existen diferencias entre el controlador IDE que utiliza Windows y el de la máquina virtual. El diagnóstico es fácil: al tratar de arrancar la máquina virtual, nos da un error de BOOT.INI y el intento de arranque entra en un ciclo sin fin. Si estás en un caso similar, aquí tienes instrucciones más detalladas:

Arrancamos Windows XP nativo.

Panel de Control -> Sistema -> Hardware -> Perfiles de Hardware

Copiar el perfil actual como vmware.

Arrancar de nuevo seleccionando el perfil vmware

Panel de Control -> Sistema -> Hardware -> Gestor de dispositivos -> Controladores IDE ATA/ATAPI

Haz clic derecho en uno de ellos y elige Actualizar controlador. Arranca el Asistente para actualizar el hardware. Elige "No, no esta vez" y Siguiente. Elige la opción avanzada y siguiente. Elige "No buscar.Elegiré el controlador a instalar" y siguiente. Selecciona el driver IDE estándar y Finalizar. No reinicies.

Ahora has de repetir el proceso con el Canal IDE Primario y el Secundario, eligiendo siempre el controlador estándar.

CREAR NUEVA MÁQUINA VIRTUAL

A continuación te muestro el proceso en imágenes:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Este paso es muy importante. No olvides elegir la partición donde tienes tu Windows (por supuesto) y también aquella desde la que arrancas (donde has instalado el grub):

 

 

Continuamos.

 

 

 

 

Y así queda nuestra máquina (de momento):

 

 

Al arrancar Windows así en mi caso (disco Serial ATA) acabo en una pantalla azul de la muerte. Si cambio "buslogic" por "ide" en Windows XP.vmdk, vmware me avisa y si acepto acabo también igual, con otro BSOD:

 

 

Lo que hago es editar Windows XP.vmx y la línea scsi0.present = "TRUE" la cambio a "FALSE". También cambio las tres líneas que comienzan por scsi0:0 a ide0:0. A partir de ese momento ya no tuve problemas.

Tras arrancar aparece el menú de grub:

 

 

Elegimos Windows y nuestro nuevo perfil virtual:

 

 

Vamos por buen camino:

 

 

Cuando arranques por primera vez tu Windows dentro de VMware es posible que te comience a detectar nuevo hardware y te pida instalarlo. Contesta a todo que no. Otro posible problema es que tu copia de Windows pida ser reactivada; por lo que se dice en Internet eso no parece ocurrir, pero nunca se sabe y desde luego no me atrevo a poner la mano en el fuego en ese tipo de asuntos.

REMATES FINALES

Ahora que todo funciona (o debería) coincidiréis conmigo en que sería muy bueno que no volviera a presentarse el menú de arranque de Grub, para prevenir definitivamente el posible error fatal de tratar de arrancar el sistema equivocado. Disponer de este lujo nos supondrá un pequeño esfuerzo adicional, pero creo que merece la pena, porque después de eso siempre arrancará Windows sin más riesgos ni complicaciones.

Arrancamos VMware y nos vamos a "Edit virtual machine settings" -> Hardware -> Floppy

Seleccionamos "Use a floppy image" y "Connect at power on". Le damos el nombre "bootdisk.img" y pulsamos "Create". Lo guardamos en el directorio de vmware para nuestra nueva máquina Windows.

 

 

Ahora añadiremos grub al fichero de imagen de disco:

# cd /home/xxxx/vmware/Windows\ XP/

En Arch Linux*:

# dd if=/usr/lib/grub/i386-pc/stage1 of=bootdisk.img count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 5,3224e-05 s, 9,6 MB/s

# dd if=/usr/lib/grub/i386-pc/stage2 of=bootdisk.img seek=1
196+1 records in
196+1 records out
100586 bytes (101 kB) copied, 0,0023119 s, 43,5 MB/s

NOTA*: La localización de los ficheros stage varía en cada distribución. En Ubuntu están en /lib/grub/i386-pc. En Gentoo, en /usr/lib/, etc.

Haremos también una copia de seguridad así:

# cp bootdisk.img grubdisk.img

Echa un vistazo al fichero menu.lst de tu grub para ver con qué opciones arrancas tu Windows real. En mi caso:

# cat /boot/grub/menu.lst

Y la parte que necesito es ésta:

title Windows XP
rootnoverify (hd0,3)
makeactive
chainloader +1

Ahora arrancaré mi máquina virtual y al llegar al menú de Grub teclearé lo siguiente:

grub> root (hd0,3)
grub> chainloader +1
grub> boot

Lo que debe hacer que arranque Windows. Ten cuidado al teclear porque es posible que las teclas no respondan exactamente a lo esperado (en mi caso los paréntesis había que teclearlos con la tecla que ocupa una posición a la derecha de los originales y el signo + con el teclado numérico):

 

 

 

 

 

 

Windows arrancó correctamente, así que ahora configuraremos nuestra imagen de disco para que no haga falta volver a teclear esos comandos, sino que arranque Windows automáticamente. No apagues la máquina virtual; desde dentro de tu Windows virtualizado vas a formatear el disquete virtual con las opciones por defecto. Desde Mi PC : Unidad A: -> Formatear. Cierra la máquina virtual.

Teclearemos ahora unos cuantos comandos más desde Linux:

# mount bootdisk.img /mnt -o loop
# mkdir -p /mnt/boot/grub
# cp /boot/grub/stage[12] /boot/grub/fat_stage1_5 /boot/grub/menu.lst /mnt/boot/grub
# vi /mnt/boot/grub/menu.lst

Aquí comentaremos (o borraremos) todo lo que queramos, hasta dejar sólo lo imprescindible. En mi caso:

timeout  0
default  0
color light-blue/black light-cyan/blue
title Windows XP
rootnoverify (hd0,3)
makeactive
chainloader +1

Seguimos tecleando comandos:

# chmod -R a-w /mnt/boot
# umount /mnt

Arrancamos VMware y vamos de nuevo a Edit virtual machine settings. En la opción floppy seleccionamos la copia de seguridad grubdisk.img que creamos en un paso anterior. Haz un ls -l sobre el directorio de tu máquina Windows en vmware para asegurarte de que grubdisk.img pertenece a tu usuario y no a root. Si no es así, utiliza chown para cambiarlo.

 

 

Al arrancar de nuevo tu máquina debes llegar al prompt de grub, pero esta vez no teclees nada. Selecciona VM en el menú de VMware Workstation y cambia el floppy a bootdisk.img de nuevo.

 

 

 

 

Resetea después la máquina virtual pulsando "Reset". Si todo fue bien, ya no trata de arrancar desde el disco duro, sino desde la imagen de disquete. En cuanto tengas tu windows virtualizado y en marcha no olvides instalar las VM Tools desde el correspondiente menú de VMware. Eso te permitirá aumentar la resolución de pantalla y algunos "lujos" más.

Como ya ha desaparecido el riesgo de arrancar con grub el sistema equivocado podemos volver a editar nuestro menú de arranque original del disco duro para restaurar el timeout que quitamos al inicio del tutorial.

Con esto hemos acabado y espero que con éxito. Como siempre (y esta vez quizás más) surgirán montones de dudas. Por mi parte baste decir que este tutorial, aunque tal vez no lo parezca, es el que más horas me ha llevado. De hecho, tras haber bebido en múltiples fuentes (que me hicieron perder mucho tiempo, sólo para llegar a soluciones insatisfactorias) acabé por ver la luz en este sitio, que ha sido finalmente mi guía para sistematizar un poco todo el proceso.

Como siempre vuestros comentarios acabarán de despejar las dudas y elevarán -espero- este tutorial a la categoría de algo verdaderamente útil. Gracias anticipadas a todos por vuestras aportaciones.

Comentarios

Selecciona arriba tu forma preferida de visualizar
los comentarios y pulsa el botón para guardar tus
preferencias. Éstas sólo se recordarán para tus
próximas visitas si eres usuario registrado.

Dos cosillas nomás

-Sería bueno que nos pases el .vmx final para ver como quedó.
-Voy a intentar hacer lo mismo en VirtualBox. Si tengo éxito te aviso.

Muchas gracias por este artículo.
Dieresys

Mis ficheros

Windows XP.vmx

#!/opt/vmware/bin/vmware
config.version = "8"
virtualHW.version = "6"
numvcpus = "2"
scsi0.present = "FALSE"
memsize = "384"
MemAllowAutoScaleDown = "FALSE"
ide0:0.present = "TRUE"
ide0:0.fileName = "Windows XP.vmdk"
ide0:0.deviceType = "rawDisk"
ide1:0.present = "TRUE"
ide1:0.autodetect = "TRUE"
ide1:0.deviceType = "cdrom-raw"
floppy0.startConnected = "TRUE"
floppy0.autodetect = "TRUE"
ethernet0.present = "TRUE"
ethernet0.wakeOnPcktRcv = "FALSE"
usb.present = "TRUE"
ehci.present = "TRUE"
sound.present = "TRUE"
sound.fileName = "-1"
sound.autodetect = "TRUE"
svga.autodetect = "TRUE"
pciBridge0.present = "TRUE"
isolation.tools.hgfs.disable = "TRUE"
displayName = "Windows XP"
guestOS = "winxppro"
nvram = "Windows XP.nvram"
deploymentPlatform = "windows"
virtualHW.productCompatibility = "hosted"
RemoteDisplay.vnc.port = "0"
tools.upgrade.policy = "useGlobal"

floppy0.fileName = "/home/turing/vmware/Windows XP/bootdisk.img"

ethernet0.addressType = "generated"
uuid.location = "56 4d 0b 9e 5b 83 86 d7-2e 32 f5 9d ff cb b1 ee"
uuid.bios = "56 4d 0b 9e 5b 83 86 d7-2e 32 f5 9d ff cb b1 ee"
scsi0:0.redo = ""
pciBridge0.pciSlotNumber = "17"
scsi0.pciSlotNumber = "-1"
ethernet0.pciSlotNumber = "32"
sound.pciSlotNumber = "33"
ehci.pciSlotNumber = "34"
ethernet0.generatedAddress = "00:00:00:00:00:00"
ethernet0.generatedAddressOffset = "0"

ide0:0.redo = ""

floppy0.fileType = "file"
floppy0.clientDevice = "FALSE"

tools.syncTime = "FALSE"

Windows XP.vmdk

# Disk DescriptorFile
version=1
CID=963ad393
parentCID=ffffffff
createType="partitionedDevice"

# Extent description
RW 1 FLAT "Windows XP-pt.vmdk" 0
RW 80324 FLAT "/dev/sda" 1
RW 530145 ZERO
RW 308962080 ZERO
RW 81112185 FLAT "/dev/sda" 309572550
RW 37233 ZERO

# The Disk Data Base
#DDB

ddb.toolsVersion = "7238"
ddb.adapterType = "ide"
ddb.geometry.biosSectors = "63"
ddb.geometry.biosHeads = "255"
ddb.geometry.biosCylinders = "24321"
ddb.geometry.sectors = "63"
ddb.geometry.heads = "255"
ddb.geometry.cylinders = "24321"
ddb.virtualHWVersion = "6"

glurbbsss....

y yo creía que me gustaba el peligro y trastear! Qué será lo próximo, nadar con tiburones, prenderse fuego??? Ains poddió, pon un disclaimer bien visible: Niños no hagan esto en casa :-)

Que bueno.

Este fin de semana lo intentare pitando en mi openSUSE.

Con esto, me salvas la vida, porque (estoy estudiando DAI, Desarrollo de Aplicaciones Informáticas y) al año que viene tendré una asignatura de programación solo en .NET (12 horas semanales, que no son pocas) y aunque mono esta ahí, seguro que necesito hacer cosas en el VisualStudio 2005.

Ahora gracias a Kriptopolis podre no salir de mi suse para nada :P

Gracias por el excelente articulo.

PD: Solo falta saber que tal van las características experimentales de soporte de DirectX y en nada el sistema ya sera la bomba. La Virtualización avanza a pasos agigantados.

Gracias de nuevo; ya os comentare mi experiencia.

te apoyo

Estoy en tu misma situacion. Estoy en DAI de 2º con VStudio.NET y es una guarrada.... con el wine no va bien por mucho que lo intente, al igual que bastantes juegos, y esto me salva el culete xD

Lo intentare este finde a ver que tal va...

suerte a todos y gracias.

Ah, y va perfecto!

He estado jugueteando con la maquinita y va perfectamente. Sonido e Internet sin tocar nada. La velocidad de las aplicaciones prácticamente equiparable a la versión nativa (recordad que le he dado 384 MB de mi giga de RAM). Y basta crear una carpeta en tu home y habilitar los directorios compartidos en VMware Workstation para disponer de una zona de intercambio entre los dos sistemas, sin necesidad siquiera de poner en marcha Samba.

Felicitaciones

Un grandisimo tutorial, como todo lo de esta pagina

Funciona con Player y Server

Hola,

Recientemente configuré con 'el player' la partición Windows de mi portátil. Dias más tarde, pasé a la versión server.

Uso Ubuntu de forma nativa y Windows por el maldito Office que me obligan usar.

Pues bueno, indicaros que no he tenido problema alguno, funcionando la partición Windows a la perfección con ambas versiones de VmWare

Un saludo

office en linux

Office hace mucho que funciona con CrossoverOffice y creo que actualmente basta con vmware para que funcione. No es necesaria una máquina virtual para eso.

He sufrido en propias carnes

He sufrido en propias carnes el famoso CrossOver Office. Es altamente inestable y falla en los mejores momentos.

Por otro lado, CrossOver es de pago, por lo que VmWare en sus versiones server o player sigue siendo mucha mejor opción: estabilidad, fiabilidad y precio.

Un saludo.

Opinar

Los comentarios publicados en este sitio expresan sólo la opinión de su autor, quien será el único responsable de los mismos. La publicación de cualquier comentario no supone en absoluto la conformidad del responsable de este sitio con su contenido.

Como norma general, en este sitio no se publican comentarios que incluyan datos personales, ni direcciones de correo, ni ninguna otra forma de establecer contactos privados o comerciales, así como comentarios que no aportan nada, fuera de tema o que no se ajustan a la netiqueta, la ortografía o la educación.

Para poder enviar tus comentarios has de permitir las cookies del sitio.

Por favor, escribe arriba el resultado de la operación planteada. Gracias.
  • Etiquetas HTML permitidas: <a> <em> <strong> <ul> <ol> <li> <p> <u> <br><strike> <blockquote> <div>

Más información sobre las opciones de formato...