Passei o dia todo pesquisando e finalmente consegui inicializar o Windows XP. Também deve ser um pouco semelhante para outros sistemas operacionais. Mas a operação é tudo, mas não trivial.
Por ser uma operação perigosa, recomendo fazer o backup de seus dados preciosos.
Aqui estão os passos:
Preparação
No caso do Windows XP, você precisa esquecer as configurações atuais da letra e da partição do disco e, portanto, apagar todos os valores da chave HKEY_LOCAL_MACHINE / MountedDevices na máquina virtual antes da migração. O kernel o reconstruirá na próxima reinicialização. Nas máquinas virtuais Linux, isso significa corrigir o fstab após a migração.
Montando a imagem VDI
Você não pode simplesmente copiar o VDI inteiro para uma partição, porque também contém um MBR. Você precisa copiar apenas a partição virtual; portanto, primeiro você precisa encontrar uma maneira de montar o VDI.
Você precisa do nbd
driver e do qemu-nbd
comando. No Ubuntu está no qemu-kvm
pacote.
Primeiro carregue o driver nbd:
# modprobe nbd
Isso deve fazer alguns nbd
dispositivos entrarem /dev
.
Em seguida, monte o VDI:
# qemu-nbd -c /dev/nbd0 path_to.vdi
Isto deve fazer /dev/nbd0p1
, /dev/nbd0p2
, /dev/nbd0p3
etc para todas as partições virtuais. Eles podem ser montados como qualquer dispositivo comum.
Migrando a Partição
Use dd
para isso, desmonte as duas partições antes da operação:
# dd -if=<nbd_device> -of=<real_partition>
por exemplo.:
# dd -if=/dev/nbd0p3 -of=/dev/sda4
A operação do dd
é silenciosa, isso pode levar vários minutos, até meia hora. Durante a operação, você pode abrir um terminal e usar fdisk -l
para ver se tudo está indo bem.
ATUALIZAR:
Aparentemente, o nbd não é uma solução infalível. Isso pode causar erro de E / S e causar falha no dd. Além disso, a próxima tentativa falha imediatamente. Você também pode tentar criar um disco bruto VMDK com este comando (no Linux):
$ VBoxManage internalcommands createrawvmdk -filename physical.vmdk -rawdisk /dev/sda
Você precisa estar no disk
grupo para fazê-lo funcionar. Em seguida, adicione esse vmdk à máquina virtual como um disco rígido secundário e use um ISO do Live Linux dd
na partição.
Corrigindo o setor de inicialização da partição NTFS
Esta é a parte hackish.
Estamos quase prontos, mas o Windows XP não inicializa, porque precisamos definir o número de setores ocultos do sistema de arquivos no deslocamento 0x1C
. Isso basicamente vários setores antes da partição NTFS. Podemos obter esse número pelo fdisk -ul
comando O start
campo da saída indica em qual setor a partição especificada começa, que é basicamente o número de setores antes da partição. Portanto, obtenha o número de lá, converta-o para hexadecimal usando gcalctool, por exemplo.
Abra a partição com hexedit
, assim:
# hexedit /dev/sda4
Em seguida, escreva o número de setores ocultos em pequena ordem endian no 1C
deslocamento. Pequenos meios endieanos: 0xABCDEFGH
serão GH EF CD AB
. Se o número hexa for menor que 8 dígitos, anteceda-o com zero.
Quando terminar, salve-o e saia (Ctrl + X).
Configurando o GRUB
Você deve dizer ao GRUB para inicializar diretamente essa partição, para o GRUB adicionar a seguinte entrada de menu:
title Microsoft Windows XP Professional
root (hd0,3)
savedefault
makeactive
chainloader +1
Onde (hdX, Y)
identifica a partição. X é 0 para o disco rígido padrão, 1 para /dev/sda
, 2 para /dev/sdb
etc. Y é o número da partição. 0 para /dev/sda1
, 1 para /dev/sda2
etc.
Isso também deve ser semelhante ao GRUB2, mas usa uma sintaxe um pouco diferente para as entradas do menu.
Toques finais
A nova partição NTFS está pronta para inicializar. Mas você ainda precisa de alguns hackers para acessar a área de trabalho do Windows XP. Outros sistemas podem precisar de hacks diferentes. Primeiro, o boot.ini precisa ser corrigido.
[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
Defina o número da parição de acordo. Eu instalei no / dev / sda4. Portanto, o número da partição deve ser 3.
Pode ser necessário corrigir a entrada MountedDevices no registro se o Windows congelar um pouco antes da tela de logon.
O registro está em que <path to windows>/system32/config/system
você pode visualizá-lo chntpw
. Isso pode ser um problema se a letra da unidade do sistema não for C. Como chntpw
os recursos de gravação do registro são bastante limitados, você precisa fazer o fallback e usar um hexeditor, como o ghex2, para corrigi-lo. Você precisa encontrar \DosDevices\C:
e substituir o C por uma letra de unidade diferente, F
no meu caso.
Depois disso, você deve conseguir acessar a área de trabalho, agora precisa procurar todos os drivers, mas isso está fora do escopo deste tutorial.
Fontes
Movendo o Windows XP para uma partição diferente
Monte uma VDI no Linux