Como copiar o conteúdo do VirtualBox VDI para uma partição e inicializar o sistema operacional com dupla inicialização?

12

Eu sou um usuário Linux, mas mantenho uma ISO compactada do Windows XP comigo em um pen drive, pois preciso absolutamente que o Windows faça alguma coisa. Isso funciona no VirtualBox na maioria das vezes.

Mas agora eu quero jogar alguns jogos, então gostaria de rodar a imagem do Windows nativamente. Meu computador não possui unidade de CD, portanto, não é possível gravar apenas o ISO e fazer a instalação normalmente.

O que estou tentando fazer é mover a imagem do Windows instalada para uma partição NTFS física no meu disco rígido e configurar o GRUB para permitir a inicialização dupla.

Encontrei muitos tutoriais que tratam da criação de VDI para a unidade física. Mas eles assumem que eu quero substituir minha unidade inteira. Mover a imagem do disco bruto ddpara a partição resultou em uma partição corrompida.

Também tentei o truque do VMDK para usar essa partição vazia e instalar o Windows nela. Embora a fase no modo de texto da instalação termine sem problemas, a VM não funcionará, trava e continua reiniciando ou congela imediatamente (dependendo de como eu criei o VMDK, com -rawdisk /dev/sda3ou -rawdisk /dev/sda -partition 3).

Calmarius
fonte

Respostas:

4

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 nbddriver e do qemu-nbdcomando. No Ubuntu está no qemu-kvmpacote.

Primeiro carregue o driver nbd:

# modprobe nbd

Isso deve fazer alguns nbddispositivos entrarem /dev.

Em seguida, monte o VDI:

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

Isto deve fazer /dev/nbd0p1, /dev/nbd0p2, /dev/nbd0p3etc para todas as partições virtuais. Eles podem ser montados como qualquer dispositivo comum.

Migrando a Partição

Use ddpara 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 -lpara 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 diskgrupo 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 ddna 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 -ulcomando O startcampo 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 1Cdeslocamento. Pequenos meios endieanos: 0xABCDEFGHserã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/sdbetc. Y é o número da partição. 0 para /dev/sda1, 1 para /dev/sda2etc.

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/systemvocê pode visualizá-lo chntpw. Isso pode ser um problema se a letra da unidade do sistema não for C. Como chntpwos 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, Fno 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

Calmarius
fonte
0

você pode tentar usar o partimage e o gdisk para fazer isso. Pegue o gdisk ou outro programa de partição e redimensione seu disco atual / configure uma partição em um disco em algum lugar. idealmente, será uma partição primária. Eu costumo manter a partição 1 para windows e 2+ para dados linux.

Depois que uma partição é configurada, você pode usar o gdisk ou outro clone fantasma para criar arquivos de backup ou imagem direta para a outra unidade. é possível configurar uma conexão de rede com o host, se você precisar soltar o arquivo dessa maneira ou criar arquivos img e copiá-los do arquivo vmdk para o sistema host ... e use o software de imagem para restaurar a partição para o local que você criou no sistema host

configure o grub conforme necessário para adicionar a inicialização a essa partição NTFS.

Kendrick
fonte
provavelmente você também pode alterar o vmdk em um mannter que permita que o software de imagem o leia diretamente do host, mas depende de como o software de imagem é.
Kendrick #
Passei todo o dia de ontem com pesquisas e finalmente consegui fazer o Windows XP inicializar. Vou anotá-la em detalhes. Não é trivial.
Calmarius # 7/12
é bastante irônico, mas vou precisar fazer esse processo em breve. Eu tenho um PC que não gosta de instalar o Solaris por algum motivo, por isso tenho que retirar os dados de uma VM que tenho para a nova máquina.
Kendrick