Como preparar/converter um VHD de máquina virtual geração 1 para geração 2 » GM9 - Gustavo Zimmermann Montesdioca
« Treinamento System Center Configuration Manager (SCCM) 2012 R2
Como montar um laboratório de nuvem privada com System Center 2012 R2 – Parte 4 »
Existem diversas vantagens de utilizar máquinas virtuais (VMs) geração 2 em relação às VMs geração 1, como:
Performance: diversos componentes foram otimizados para melhorar o desempenho de VMs geração 2, começando pelo processo de inicialização, que é baseado no suporte nativo de VMBus do firmware UEFI, sem necessidade de emuladores para iniciar o boot a partir de arquivos VHDX ou ISO.
Segurança: VMs geração 2 utilizam Secure Boot, um mecanismo de verificação de assinatura durante a sequência de inicialização do sistema operacional, garantindo que somente componentes aprovados possam ser executados. Secure Boot é parte da especificação UEFI.
Boot PXE pela placa de rede padrão.
Boot SCSI por DVD.
Preparado para o futuro: essa versão, no qual a Microsoft fornece suporte apenas para VMs Windows 8 e Windows Server 2012, traz uma série de melhorias que prepara o terreno para futuras versões.
O layout de discos em VMs geração 2 também são diferentes, com o uso de partições com tabela de arquivos no formato GPT (ao invés de MBR). GPT suporta partições de boot com tamanho de 64TB, o que pode parecer um exagero, mas vai saber os requisitos futuros 🙂
O procedimento para preparar o disco VHD que possuímos para máquina virtual geração 2 é simples, mas pode levar algum tempo. Existem diversas maneiras de preparar/converter um VHD para VMs geração 2, inclusive no repositório de scripts da Microsoft, existe um script que pode ser utilizado para essa tarefa. Contudo, para fins de aprendizado, esse procedimento foi adaptado a partir do blog de John Howard, que mostra como converter manualmente uma VM geração 1 para geração 2. Vale lembrar que você pode preferir baixar o formato ISO do Windows Server 2012 R2 e realizar uma instalação limpa. Contudo, se o seu objetivo é aprender, esse procedimento é uma ótima oportunidade para explorar ferramentas como o DISM e o DISKPART. Como temos um VHD original com a instalação do Windows Server 2012 R2, precisaremos realizar, em resumo, os seguintes passos:
Converter o disco virtual VHD para um arquivo formato WIM utilizando o DISM;
Criar um novo disco virtual VHDX com partição GPT e boot UEFI utilizando o DISKPART;
Adicionar a imagem do Windows salvo em WIM utilizando o DISM;
Criar a VM geração 2 e anexar o novo VHDX.
Passo 1: Converter o disco virtual VHD para um arquivo formato WIM. WIM é acrônimo para Windows Imaging File Format, um arquivo comprimido e otimizado para realizar a instalação do Windows. Um arquivo WIM pode armazenar várias imagens de instalação do Windows e possui seis tipos de recursos: header, file resource, metadata resource, lookup table, XML data e integrity table. A figura 1 mostra um exemplo do layout do arquivo WIM com todos os recursos e duas imagens (Image 1 e Image 2).
Figura 1: Estrutura do arquivo WIM (Fonte: Technet)
Para fazer extrair o VHD para o arquivo no formato WIM, precisamos montar o VHD e utilizar a ferramenta DISM para criar o arquivo WIM. O DISM é uma ferramenta muito importante na preparação de imagens online e offline do Windows. Imagens online são os sistemas operacionais instalados e em execução, como Windows 8.1 e Windows Server 2012 R2. Você pode adicionar e remover Roles e Features de servidores utilizando essa ferramenta, assim como pode modificar um arquivo ISO (imagens offlines) para pré-instalar determinados componentes. Vamos começar abrindo o PowerShell como Administrador e executando os seguintes comandos:
#Monta o VHD original o formato
Mount-VHD -ReadOnly .\OriginalWindowsServer2012R2.vhd
Após rodar esse comando, a imagem VHD estará montada. Você precisa saber qual letra ela foi montada. Para isso, basta abrir o Windows Explorer e buscar por ela. No meu caso, ela foi montada no drive D:\. Assim, o comando DISM para capturar a imagem será o seguinte:
#Inicia o processo de captura da imagem montada em um arquivo WIM
dism /capture-image /imagefile:captured.wim /name:"Captured" /capturedir="D:\"
Isso levará um tempo e é normal. No meu caso, levou 25 minutos para fazer esse processo (demorou uns 10 minutos para mostrar começar a mostrar a mensagem Saving image e a barra de progresso). Note que o arquivo captured.wim será criado no diretório onde você está com o PowerShell atualmente (no meu caso, criou no C:\).
Figura 2: Processo de captura da imagem de origem
Passo 2: Esse é o passo mais longo dos quatro. Uma vez que a captura tenha sido concluída, o próximo passo é criar um VHDX compatível com a geração 2 de VMs e criar as partições necessárias para restaurar o VHD. Uma partição de disco baseada em UEFI/GPT tem o formato padrão da figura 3. Você precisa reservar 300Mb para a partição de recuperação (Windows RE Tools), 100Mb para a partição de sistema (System), 128 para MSR (Microsoft Reserved partition) e o restante para o Windows. Uma partição ideal ainda teria uma área reservada para a imagem de recuperação (arquivo .WIM), porém, como se trata de uma VM, isso é desnecessário (seria útil no caso de um computador físico de usuário para facilitar o processo de recovery).
Figura 3: Formato padrão de disco baseado em UEFI/GPT (Fonte: Technet)
Vamos executar esse passo em duas etapas. Primeiro, você criará um novo VHDX, montará, verificará o número do disco montado e descobrirá as letras disponíveis no seu Windows. Após, utilizaremos o DISKPART para criar as partições. CUIDADO! O uso incorreto do DISKPART pode apagar seu disco rígido, tenha muito cuidado nesse passo. Você deve cuidar o número do disco montado.
# Cria um novo VHDX
New-VHD .\DC1.vhdx -Dynamic -SizeBytes 127GB
# Monta o novo VHDX
Mount-DiskImage C:\Source\DC1.vhdx
# Procura o novo VHDX montado
$Target = Get-DiskImage C:\Source\DC1.vhdx
# Mostra o número do disco VHDX montado
# Obtem as últimas letras de drives disponíveis
Figura 4: Sequência de comandos. Note o número do disco em destaque
Após essa etapa, você possui um VHDX com 127GB de espaço, dinâmico, montado, não formatado. O último comando que você executou mostra que os drives X:, Y: e Z: estão disponíveis para uso em seu sistema (altere esses valores de acordo com a disponibilidade em sua máquina). Além disso, o número do disco que você encontrou é o número 3. Lembra as letras em vermelho acima? Essa é a parte que você tem que ter muito cuidado para acertar, ou seja, selecionar o disco correto. Existe uma outra forma de visualizar o número do disco utilizando o DISKPART. Vamos explorar isso agora. Rode os seguintes comandos.
#Abre o DISKPART
#Lista os discos disponíveis no sistema
Você visualizará, assim, os discos do sistema, conforme a figura 5. Note que o disco 3 é o disco de 127GB que acabamos de criar.
Figura 5: Verificando o número dos discos utilizando o DISKPART
Para finalizar esse procedimento, você precisa criar as partições conforme descrito anteriormente. Para isso, você deve criar um arquivo TXT com o script abaixo. Importante dizer que você poderia copiar e colar esses comandos direto na janela do PowerShell com o DISKPART aberto. Mas para evitar erros, faça o script e, não custa reforçar, máxima atenção no número do disco.
select disk NÚMERO_DO_DISCO_AQUI
Após criar esse arquivo TXT (no meu caso, scritp.txt), analise por um momento esse script que você acabou de criar. Observe nas primeiras linhas a seleção do disco, a limpeza e a conversão dele para GPT. Em seguida, perceba cada comando create e o tipo de partição que cada um está criando. Além disso, observe os comandos format e assign. Você pode explorar mais o DISKPART executando HELP na console da ferramenta. Rode o DISKPART com a opção /S para executar SCRIPT.
Figura 6: Execução do script para criação das partições no VHDX
Veja que você criou cinco partições. Duas reservadas, uma de recuperação, uma de sistema e outra primária. Letras foram atribuídas às partições de Windows RE tools, System e Windows, conforme figura 7.
Figura 7: Drives atribuídos às partições no novo VHDX
Passo 3: Se você chegou até aqui com sucesso, agora é simples. Basta rodar a ferramenta DISM para restaurar a imagem arquivo WIM, configurar a partição de sistema como ESP (EFI System Partition) e desmontar a partição ESP e discos. Rode os seguintes comandos:
#Adiciona a imagem do Windows no novo VHDX. Isso demora, você pode ir tomar um café (no meu caso, durou 9 minutos)
#Rode o BCDBOOT configurar a partição de sistema com ESP
#Você precisa desmontar a partição de sistema ESP. Substitua NNNN pelo número do disco identificado anteriormente e Y:\ pelo seu drive
#Desmonte o novo VHDX
Dismount-DiskImage C:\Source\DC1.vhdx
#Desmonte o VHDX original
Dismount-DiskImage C:\Source\OriginalWindowsServer2012R2.vhdx
Figura 8: Sequência de passos para finalizar o processo
Se tudo deu certo, agora estamos prontos para criar as máquinas virtuais e testar. Um lembrete importante: embora eu tenha criado o novo disco com o nome DC1.vhdx, esse disco deve ser preservado para ser utilizado como imagem em novas VMs. Assim, guarde a cópia dele para não ter que repetir todo esse processo novamente.
Passo 4: Criar a VM geração 2 e anexar o novo VHDX. Para criar a VM, já conhecemos o comando. Porém, ao invés de -Generation 1, vamos alterar para -Generation 2, ou utilizar a interface gráfica, você escolhe. Mostrarei apenas o comando PowerShell. Antes de tudo, copie o novo VHDX para o diretório VMMDisks.
Figura 9: Disco copiado para o diretório C:\VMMDisks
#Cria VM DC1, observe cada parâmetro especificado
New-VM -Name DC1 -MemoryStartupBytes 512MB -VHDPath C:\VMMDisks\DC1.vhdx -Generation 2 -SwitchName "Internal Switch"
#Configura a memória dinâmica
Set-VMMemory DC1 -DynamicMemoryEnabled $true
Se tudo der certo, você verá essa linda imagem da figura 10, com a VM iniciando seu processo de setup.
Figura 10: Setup final do Windows Server 2012 R2
Agora, basta finalizar o setup do Windows especificando País, idioma e teclado, aceitar a licença e colocar uma senha para o Administrator. Para criar as outras duas VMs, basta copiar o novo VHDX e rodar o comando novamente.
Gostou? Reforço a importância de aprender tanto PowerShell como outras ferramentas do Windows, como DISM e DISKPART. No próximo artigo, iremos promover essa máquina virtual para controlador de domínio. Até lá.
HOWARD, John. Hyper-V generation 2 virtual machines – part 8 (2013). Disponível em http://blogs.technet.com/b/jhoward/archive/2013/11/06/hyper-v-generation-2-virtual-machines-part-8.aspx. Acesso em 22 dez. 2014.
MICROSOFT. Generation 2 Virtual Machine Overview (2013). Disponível em http://technet.microsoft.com/en-us/library/dn282285.aspx. Acesso em 22 dez. 2014.
MICROSOFT. Sample: Configure UEFI/GPT-Based Hard Drive Partitions by Using Windows PE and DiskPart (2013). Disponível em http://technet.microsoft.com/en-us/library/hh825686.aspx. Acesso em 22 dez. 2014.
MICROSOFT. Windows Imaging File Format (WIM) (2014). Disponível em http://technet.microsoft.com/en-us/library/cc749478(v=ws.10).aspx. Acesso em 22 dez. 2014.