Como copiar o conteúdo do VirtualBox VDI para uma partição e inicializar o sistema operacional a partir dele?

12

Sou um usuário de Linux, mas mantenho um ISO do Windows XP compactado comigo em um pen drive para o caso. Eu realmente preciso que o Windows faça alguma coisa. Isso funciona no VirtualBox na maioria das vezes.

Mas agora quero jogar alguns jogos, então gostaria de executar a imagem do Windows nativamente. Meu computador não tem drive de CD, então não pode simplesmente gravar o ISO e fazer uma instalação normalmente.

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

Eu encontrei muitos tutoriais que lidam com a criação de VDI para a unidade física. Mas eles assumem que quero substituir todo o meu disco. Mover a imagem de disco bruta com dd para a partição resultou em uma partição corrompida.

Eu também tentei o truque do VMDK para usar essa partição vazia e instalar o Windows nela. Embora a fase de modo de texto da instalação seja concluída sem problemas, a VM não funcionará, falhará e continuará reinicializando ou congelará imediatamente (dependendo de como eu criei o VMDK, com -rawdisk /dev/sda3 ou -rawdisk /dev/sda -partition 3 ).

    
por Calmarius 05.10.2012 / 11:14

2 respostas

4

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.

Fontes

Movendo o Windows XP para uma partição diferente

Monte um VDI no linux

    
por 07.10.2012 / 11:36
0

você pode tentar usar partimage e 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 o Windows e 2 + para os dados do Linux.

uma vez que uma partição é configurada, você pode usar o gdisk ou outro clone fantasma para criar arquivos de backup ou imagens retas na outra unidade. é possível configurar uma conexão de rede com o host se você precisar soltar o arquivo dessa forma ou fizer arquivos img e depois copiar do arquivo vmdk para o sistema host ... e, em seguida, usar 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.

    
por 07.10.2012 / 01:37