¿Cómo copiar el contenido de VirtualBox VDI a una partición y arrancar dualmente el sistema operativo desde él?

12

Soy un usuario de Linux pero mantengo un ISO comprimido de Windows XP conmigo en un pen drive para el caso de que necesite absolutamente que Windows haga algo. Esto funciona en VirtualBox la mayor parte del tiempo.

Pero ahora quiero jugar algunos juegos, así que me gustaría ejecutar la imagen de Windows de forma nativa. Mi computadora no tiene unidad de CD, por lo que no puedo grabar el ISO y realizar una instalación normalmente.

Lo que intento hacer es mover la imagen de Windows instalada a una partición NTFS física en mi HDD y configurar GRUB para permitirme un arranque dual.

Encontré muchos tutoriales que tratan de hacer VDI a la unidad física. Pero suponen que quiero sobrescribir todo mi disco. Mover la imagen de disco sin procesar dda la partición resultó en una partición corrupta.

También probé el truco VMDK para usar esa partición vacía e instalar Windows en ella. Aunque la fase de modo de texto de la instalación finaliza sin problemas, la VM no funcionará, se bloquea y sigue reiniciando o simplemente se congela de inmediato (dependiendo de cómo creé el VMDK, con -rawdisk /dev/sda3o -rawdisk /dev/sda -partition 3).

Calmarius
fuente

Respuestas:

4

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 nbdcontrolador y el qemu-nbdcomando. En Ubuntu está en el qemu-kvmpaquete.

Primero cargue el controlador nbd:

# modprobe nbd

Esto debería hacer que algunos nbddispositivos entren /dev.

Luego monte el VDI:

# qemu-nbd -c /dev/nbd0 path_to.vdi

Esto debería hacer /dev/nbd0p1, /dev/nbd0p2, /dev/nbd0p3etc para todas las particiones virtuales. Estos se pueden montar como cualquier dispositivo ordinario.

Migrar la partición

Úselo ddpara 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 ddes silencioso, esto puede llevar varios minutos, incluso media hora. Durante la operación, puede abrir una terminal y usar fdisk -lpara 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 diskgrupo para que funcione. Luego agregue este vmdk a la máquina virtual como un disco duro secundario, luego use un Live Linux ISO para ddla 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 -ulcomando. El startcampo 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 1Cdesplazamiento. Poco endiean significa: 0xABCDEFGHserá 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/sdbetc. 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/systemdonde puede verlo chntpw. Esto puede ser un problema si la letra de la unidad del sistema no es C. Dado que chntpwlas 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, Fen 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

Calmarius
fuente
0

puedes intentar usar partimage y gdisk para hacer eso. Tome gdisk u otro programa de partición y cambie el tamaño de su disco actual / configure una partición en un disco en algún lugar. idealmente será una partición primaria. Por lo general, mantengo la partición 1 para Windows y 2+ para datos de Linux.

una vez que se configura una partición, puede usar el gdisk u otro clon fantasma para hacer archivos de respaldo o una imagen directa a la otra unidad. es posible configurar una conexión de red al host si necesita soltar el archivo de esa manera o puede crear archivos img y luego copiarlos desde el archivo vmdk a su sistema host ... luego use el software de imagen para restaurar la partición a la ubicación que creó en el sistema host

configure grub según sea necesario para agregar el arranque a esa partición ntfs.

Kendrick
fuente
Probablemente también pueda usar el vmdk en un modo que permita que el software de imagen lo lea directamente desde el host. Depende de cómo sea el software de imagen.
Kendrick el
Pasé todo ayer con la investigación, y finalmente pude hacer que Windows XP arranque. Voy a escribirlo en detalle. No es trivial
Calmarius
es bastante irónico, pero pronto tendré que hacer este proceso. Tengo una PC que no me gusta instalar Solaris por alguna razón, así que tengo que extraer los datos de una máquina virtual que tengo a la nueva máquina.
Kendrick