Archive

Archive for the ‘Virtualization’ Category

Inicializando sua Partição Windows via KVM

August 11th, 2011 1 comment

Ter uma máquina com dual-boot é muito bom. Sempre que precisamos utilizar um dos sistemas operacionais (SO) instalados nele, basta reiniciar a máquina e logar no sistema que deseja. O problema é quando você utiliza extensivamente um dos SOs e precisa reiniciar a máquina no meio do dia para executar apenas uma operação no outro SO, o que acontece muito comigo – utilizo Linux como ferramenta de trabalho, mas algumas operações que tenho que realizar são suportadas apenas no Windows.

Alternativa para esse problema existe: virtualização. Dessa forma, posso usar uma das diversas opções de virtualização disponíveis no mercado, VMWare, VirtualBox ou KVM (usando o qemu-kvm), para “executar o Windows dentro do Linux” sem problema algum. Mas o fato de eu ter que criar um disco virtual (entenda como sendo um arquivo) no sistema host (host é o SO verdadeiro que você está usando, no meu caso Linux, e guest é o sistema virtual) e realizar uma nova instalação do Windows sendo que já possuo uma instalação no meu disco, me incomoda e muito. Na verdade isso me incomodava, até que escutei alguêm no trabalho falar que o KVM inicializa um disco físico e executar qualquer  SO que nele está instalado. Resolvi pesquisar.

Pesquisando, realmente descobri que o KVM pode receber como argumento um device ao invéz de uma imagem. E descobri mais. Não somente o KVM faz isso como o VMWare também. Já com relação ao VirtualBox, não encontrei nenhuma indicação de que ele faça isso, mas existe no fórum oficial um procedimento de como exportar sua partição Windows para um disco virtual. A seguir, explico como inicializar o Windows no KVM.

Antes de mais nada é necessário saber se seu processador possui suporte a virtualização através das tecnologias Intel-VT e AMD-V. O KVM somente vai conseguir virtualizar seu disco local se seu processador for suportado. No Linux, para saber se seu processador possui o suporte a Intel-VT basta procurar pela flag ‘vmx’ no conteúdo do /proc/cpuinfo, e para AMD-V procure por ‘svm’:

# grep vmx /proc/cpuinfo –color -n
19:flags                : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt aes lahf_lm ida arat dts tpr_shadow vnmi flexpriority eptvpid

Caso seu processador suporte as tecnologias, basta instalar o KVM. No Debian (versão testing Wheezy), execute:

# apt-get install qemu-kvm kvm

Neste ponto você, teoricamente, já pode inicializar sua partição Windows usando o KVM. Para isso, basta passar o device de sua particão Windows (ou de onde o GRUB está instalado – não tive como confirmar isso pois todas máquinas que possuem suporte a virtualização as quais tenho acesso possuem somente um único disco físico) como argumento para o KVM. No meu caso, o Windows 7 que possuo está na partição /dev/sda1, então:

# kvm -hda /dev/sda

Neste ponto o KVM inicializa o sua BIOS virtual e o GRUB aparece. Selecionando a entrada relativa ao Windows, você verá a imagem gráfica do Windows na tela mas logo após aparecerá uma tela reportando que o processo de inicialização foi abortado. A figura abaixo é um exemplo que aconteceu com o Windows2008.

Windows crash

Windows crash

Isso ocorre pois o sistema de registro do Windows salva as informações da controlodara de IDE/SATA em que ele foi instalado. Sempre que você tentar utilizar o disco em que foi instalado o Windows em uma máquina com outra controladora, ele apresentará essa mensagem. No caso, como o KVM virtualiza as informações de hardware, o registro do Windows detecta que ele está inicializando em uma máquina com outra controlodara. Para solucionar este problema deve-se modificar algumas informações no registro do Windows e a forma mais fácil que achei foi seguir o procedimento descrito por Gary Hollands neste site. A própria Microsoft publicou uma solução contendo basicamente os mesmos passos (mas sem se responsabilizar pela consequências).

Assim, o procedimento que realizei foi:

  1. Reinicializar a máquina e acessar o Windows
  2. Fazer o download do arquivo Move XP Utility, decompactá-lo e executar o arquivo bat dele.
  3. Reinicializar a máquina e acessar o Linux

Apesar de o procedimento acima ser especifico para Windows XP, ele funcionou no Windows 7 (minha versão atual). Após esse procedimento você estará apto a executar o KVM novamente utilizando o comando citado acima, e então o Windows inicializará sem problemas e você terá acesso a todos os arquivos de sua partição Windows. Atente para o fato de que o Windows instalará novos drivers relativos ao “novo hardware”.

PS: Assim como a Microsoft, também não me responsabilizo por eventuais problema que você tenha ao executar os passos descritos neste artigo, principalmente os relacionados a alteração do registro do Windows.