Pasé todo ayer con la investigación, y finalmente pude hacer que Windows XP arranque. También debería ser algo similar para otros sistemas operativos. Pero la operación lo es todo, pero no es trivial.
Debido a que esta es una operación peligrosa, recomiendo hacer una copia de seguridad de sus valiosos datos.
Aquí están los pasos:
Preparación
En el caso de Windows XP, debe hacer que olvide la letra actual del disco y la configuración de partición, por lo que debe borrar todos los valores de la clave HKEY_LOCAL_MACHINE / MountedDevices en la máquina virtual antes de la migración. El núcleo lo reconstruirá en el próximo reinicio. En máquinas virtuales Linux, esto significa arreglar el fstab después de la migración.
Montaje de la imagen VDI
No puede simplemente copiar todo el VDI a una partición, porque también contiene un MBR. Necesita copiar solo la partición virtual, por lo que primero debe encontrar una manera de montar el VDI.
Necesita el nbd
controlador y el qemu-nbd
comando. En Ubuntu está en el qemu-kvm
paquete.
Primero cargue el controlador nbd:
# modprobe nbd
Esto debería hacer que algunos nbd
dispositivos entren /dev
.
Luego monte el VDI:
# qemu-nbd -c /dev/nbd0 path_to.vdi
Esto debería hacer /dev/nbd0p1
, /dev/nbd0p2
, /dev/nbd0p3
etc para todas las particiones virtuales. Estos se pueden montar como cualquier dispositivo ordinario.
Migrar la partición
Úselo dd
para eso, desmonte ambas particiones antes de la operación:
# dd -if=<nbd_device> -of=<real_partition>
p.ej.:
# dd -if=/dev/nbd0p3 -of=/dev/sda4
El funcionamiento del sistema dd
es silencioso, esto puede llevar varios minutos, incluso media hora. Durante la operación, puede abrir una terminal y usar fdisk -l
para ver que todo va bien.
ACTUALIZAR:
Aparentemente, nbd no es una solución infalible. Puede causar un error de E / S y hacer que dd falle. Además, el próximo intento falla de inmediato. También puede intentar crear un disco sin formato VMDK con este comando (en Linux):
$ VBoxManage internalcommands createrawvmdk -filename physical.vmdk -rawdisk /dev/sda
Debes estar en el disk
grupo para que funcione. Luego agregue este vmdk a la máquina virtual como un disco duro secundario, luego use un Live Linux ISO para dd
la partición.
Arreglando el sector de arranque de la partición NTFS
Esta es la parte pirateada.
Estamos casi listos, pero Windows XP no arrancará, porque necesitamos establecer el número de sectores ocultos del sistema de archivos en el desplazamiento 0x1C
. Esto es básicamente una serie de sectores antes de la partición NTFS. Podemos obtener este número del fdisk -ul
comando. El start
campo de la salida indica en qué sector comienza la partición dada, que es básicamente el número de sectores antes de la partición. Entonces obtenga el número desde allí, conviértalo a hexadecimal usando gcalctool, por ejemplo.
Abra la partición con hexedit
, así:
# hexedit /dev/sda4
Luego escriba el número de sectores ocultos en orden endian poco en el 1C
desplazamiento. Poco endiean significa: 0xABCDEFGH
será GH EF CD AB
. Si el número hexa es más corto que 8 dígitos, preceda con cero.
Cuando termine, guárdelo y salga (Ctrl + X).
Configurar GRUB
Debe decirle a GRUB que arranque directamente esa partición, para GRUB agregue la siguiente entrada de menú:
title Microsoft Windows XP Professional
root (hd0,3)
savedefault
makeactive
chainloader +1
Donde (hdX, Y)
identifica la partición. X es 0 para el disco duro predeterminado, 1 para /dev/sda
, 2 para /dev/sdb
etc. Y es el número de partición. 0 para /dev/sda1
, 1 para /dev/sda2
, etc.
Esto también debería ser similar para GRUB2, pero utiliza una sintaxis un poco diferente para las entradas del menú.
Toques finales
La nueva partición NTFS está lista para arrancar. Pero aún necesita algo de piratería para llegar al escritorio de Windows XP. Otros sistemas pueden necesitar diferentes hacks. Primero el boot.ini necesita ser reparado.
[boot loader]
timeout=1
default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
Establezca el número de partición en consecuencia. Lo instalé en / dev / sda4. Entonces el número de partición debe ser 3.
Es posible que deba corregir la entrada MountedDevices en el registro si Windows se congela justo antes de la pantalla de inicio de sesión.
El registro está en <path to windows>/system32/config/system
donde puede verlo chntpw
. Esto puede ser un problema si la letra de la unidad del sistema no es C. Dado que chntpw
las capacidades de escritura del registro son bastante limitadas, debe recurrir y utilizar un editor hexadecimal, como ghex2 para solucionarlo. Necesita encontrar \DosDevices\C:
y reemplazar la C con una letra de unidad diferente, F
en mi caso.
Después de esto, debería poder llegar al escritorio, ahora necesita buscar todos los controladores, pero esto está fuera del alcance de este tutorial.
Fuentes
Mover Windows XP a una partición diferente
Montar un VDI bajo Linux