Passei tudo ontem com pesquisa e finalmente consegui fazer o boot do Windows XP. Deve ser um pouco semelhante para outros sistemas operacionais também. Mas a operação é tudo menos trivial.
Por ser uma operação perigosa, recomendo fazer backup de seus dados preciosos.
Aqui estão os passos:
Preparação
No caso do Windows XP, você precisa esquecer as configurações atuais de letra de disco e partição, portanto, é necessário apagar todos os valores da chave HKEY_LOCAL_MACHINE / MountedDevices na máquina virtual antes da migração. O kernel irá reconstruí-lo na próxima reinicialização. Em 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 ele também contém um MBR. Você precisa copiar apenas a partição virtual, então primeiro você precisa encontrar uma maneira de montar o VDI.
Você precisa do driver nbd
e do comando qemu-nbd
. No Ubuntu está no pacote qemu-kvm
.
Primeiro, carregue o driver nbd:
# modprobe nbd
Isso deve gerar alguns nbd
de dispositivos em /dev
.
Em seguida, monte o VDI:
# qemu-nbd -c /dev/nbd0 path_to.vdi
Isso deve fazer /dev/nbd0p1
, /dev/nbd0p2
, /dev/nbd0p3
etc para todas as partições virtuais. Estes 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.
ATUALIZAÇÃO:
Aparentemente nbd não é uma solução infalível. Isso pode causar erro de E / S e fazer com que o dd falhe. 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 grupo disk
para que funcione. Em seguida, adicione esse vmdk à máquina virtual como um disco rígido secundário e use um ISO do Live Linux para dd
da partição.
Corrigindo o setor de inicialização da partição NTFS
Esta é a parte hackea.
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 um número de setores antes da partição NTFS. Podemos obter esse número do comando fdisk -ul
. O campo start
da saída indica em qual setor a partição especificada começa, que é basicamente o número de setores antes da partição. Então pegue o número de lá, converta 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 na ordem little endian no 1C
offset. Pouco significa endiean: 0xABCDEFGH
será GH EF CD AB
. Se o número hexa for menor que 8 dígitos, preceda-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
Em que (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 para o GRUB2, mas ele usa uma sintaxe um pouco diferente para entradas de menu.
Toques finais
A nova partição NTFS está pronta para arrancar. Mas você ainda precisa de algum hacking para chegar ao desktop 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. Então o número da partição deve ser 3.
Talvez seja necessário corrigir a entrada MountedDevices no registro se o Windows congelar imediatamente antes da tela de logon.
O registro está em <path to windows>/system32/config/system
, você pode visualizá-lo por chntpw
.
Isso pode ser um problema se a letra da unidade do sistema não for C. Como os recursos de gravação de registro do chntpw
são bastante limitados, é necessário usar um hexeditor, como o ghex2 para consertá-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 você precisa procurar por todos os drivers, mas isso está fora do escopo deste tutorial.