WINDOWS: Conversão de VM – VMware para Hyper-v com PowerShell e MVMC

Embora seja um processo arriscado e traumático, podemos nos ver em uma situação que a melhor saída é optar por converter máquinas virtuais de um hypervisor a outro.

Neste exemplo de como proceder com essa tarefa, iremos converter uma VM VMware para Hyper-V utilizando o PowerShell e MVMC (Microsoft Virtual Machine Converter).

Primeiro devemos saber qual o disco virtual da máquina virtual do WMware iremos utilizar. O VMware gera vários arquivos .vmdk, se configurado o “split” do HD virtual na criação da VM. Para saber qual utilizará para conversão, entre nas Configurações da VM e na janela das Configurações da Máquina Virtual clique em “Disco rígido”. Irá aparecer “Arquivo de disco” e será esse o arquivo a ser considerado. Vou considerar no exemplo o nome “vmexemplo-000001.vmdk”.

Abra o PowerShell com direitos elevados (administrador) no servidor com a máquina virtual com o VMware.

No PowerShell, acesse o diretório onde se encontra instalado o VMware. No exemplo irei considerar a pasta de instalação padrão, porém faça conforme sua instalação.

cd "C:\Program Files (x86)\VMware\VMware Workstation"

Ainda no Powershell, agora vamos unir os arquivos .vmdk utilizando uma ferramenta do próprio VMware.

vmware-vdiskmanager -r C:\path\vmexemplo-000001.vmdk -t 0 C:\path\vmexemplo-unico.vmdk

Substitua o primeiro C:\path pelo caminho correto onde se encontra o disco da VM VMware e no segundo indique o caminho completo onde deseja salvar o .vmdk único.

Mais informações sobre:
https://www.vmware.com/support/ws45/doc/disks_vdiskmanager_eg_ws.html

Agora copie o arquivo gerado para o servidor do Hyper-V (ou deixe reservado em alguma pasta de sua vontade se for o mesmo servidor).

Próximo passo é instalar o MVMC (Microsoft Virtual Machine Converter). A Microsoft descontinuou o MVMC e com isso o uso é por conta e risco, além da difícil tarefa de encontrar a ferramenta para download. Pra facilitar nossa vida, segue link para download:

MVMC Download

Com o MVMC instalado no servidor do Hyper-V, execute o PowerShell como administrador. Execute o comando abaixo para importar um módulo do MVMC:

Import-Module "C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1"

Tudo pronto para, enfim, a conversão. Ainda no PowerShell:

ConvertTo-MvmcVirtualHardDisk "C:\path\vmexemplo-unico.vmdk" -VhdType DynamicHardDisk -VhdFormat Vhdx -DestinationLiteralPath "C:\path\Hyper-V"

Lembrando que deve indicar os diretórios desejados em “C:\path”.

Agora é só aguardar a conclusão da conversão, a qual o tempo irá depender do tamanho do seu disco virtual. Após é só criar uma nova VM no Hyper-V indicando o novo disco .vhdx criado.

Gostou? Se tiverem algumas sugestões, dica ou se ficou com alguma dúvida sobre este tutorial, não tem problema! Basta comentar no post que iremos responder suas dúvidas assim que for possível.

Fonte: brunocosta

HYPER-V: 10 cmdlet populares

O ambiente gráfico é habitualmente mais confortável e prático para diversas tarefas cotidianas, mesmo quando muitos deles possuem um ambiente em modo texto para executar diversas das mesmas atividades permitindo agilizar muitas delas, é o caso dos cmdlets no PowerShell para manipular máquinas virtuais no ambiente do Microsoft Hyper-V.

Os 10 comandos a seguir são apresentados sem ordem de relevância, embora possuindo ajuda, exibindo todos os parâmetros disponíveis sendo alguns com exemplo utilizados através do PowerShell 3.0

1.10:> Get-VM

Possivelmente o comando mais utilizado e também mais simples, praticamente autoexplicativo executando o que sugere o nome:

Após consultar os parâmetros pela ajuda do comando, mais opções serão apresentadas então permitindo obter ainda mais detalhes da máquina virtual consultada:

Aplicando uma pequena série de combinações é possível elaborar filtros mais seletivos na análise das máquinas virtuais:

PS C:> get-vm | where {$_.state -eq ‘running’} | sort Uptime | select Name,Uptime,@{N=“MemoryMB”;E={$_.MemoryAssigned/1MB}},Status

Executando novamente o comando inicial complementado com uma pequena série de parâmetros é exibido uma lista mais compreensível das máquinas virtuais analisadas:

2.10:> Start-VM

Analisar máquinas virtuais tão interessante quanto controlar muitas das configurações disponíveis, desta maneira não poderia ser mais fácil iniciar uma máquina virtual:

PS C:> start-vm chi-win8

Numa ocasião onde a máquina virtual por conta de suas configurações possa demorar a iniciar ou, precise iniciar duas ou mais de maneira rápida, acrescentando o parâmetro -asjob permite executar essas tarefas em segundo plano.

PS C:> start-vm jdh* -asjob

3.10:> Stop-VM

O próximo cmdlet é também muito interessante e igualmente fácil de utilizar, mesmo quando é preciso aplicar em múltiplas máquinas virtuais

PS C:> stop-vm jdh*

O comando de desligamento é enviado direto ao sistema operacional convidado. Quando uma máquina virtual possuir aplicações em execução ou informações não-salvas o tempo para desligamento pode superar 5 minutos, a não ser quando for exibida a mensagem de computador bloqueado. Ainda assim é possível forçar o desligamento adicionando ao comando o parâmetro -force e, no pior dos cenários num exemplo delas não responderem a comandos ou mesmo pelo gerenciador gráfico, pode-se incluir um comando para simplesmente desligar sumariamente a máquina virtual:

PS C:> stop-vm “XP Lab” –turnoff

Na condição de encerrar a máquina virtual mas salvando o estado de execução no momento do encerramento:

PS C:> stop-vm chi-win8 –save –force

4.10:> Checkpoint-VM

Este comando permite criar uma instância da máquina virtual escolhida, praticamente um ponto de restauração, muito útil quando precisar aplicar alterações que possam comprometer a máquina virtual:

PS C:> checkpoint-vm -VMName “XP Lab”

Como o objetivo é apresentar maneiras de facilitar o gerenciamento de múltiplas máquinas virtuais, o PowerShell permite multiplicar as máquinas virtuais escolhidas, uma tarefa impossível de executar pelo gerenciador gráfico do Hyper-V:

PS C:> get-vm chi* | checkpoint-vm -SnapshotName “Weekly Snapshot $((Get-Date).toshortdatestring())” –AsJob

Explicando o comando acima estar selecionando todas as máquinas virtuais com nomes iniciados em chi criando uma instância para cada uma nomeada weekly snapshot incluindo a data da execução. Por conta da possível demorar na criação destas instâncias foi adicionado o parâmetro para execução sem segundo plano.

5.10:> Get-VMSnapshot

Seria improdutivo criar instâncias mas não poder gerenciá-las, aqui entra novamente o cmdlet do powershell permitindo antes de tudo identificar as instâncias existentes das máquinas virtuais:

PS C:> get-vmsnapshot *

Depois, uma seleção mais aprimorada das instâncias:

PS C:> get-vm “fp01″ | get-vmsnapshot

Aqui selecionando apenas uma instância a gerenciar:

PS C:> get-vm chi-fp01 | get-vmsnapshot -Name weekly*

6.10:> Remove-VMSnapshot

Toda instância criada fatalmente ocupará espaço físico em disco, a criação de inúmeras instâncias pode também tornar-se um problema com o tempo pela dificuldade de gerenciamento, com esse pensamento o exemplo abaixo demonstra como excluir determinadas instâncias utilizando uma seleção por data de criação:

PS C:> get-vm chi* | Get-VMSnapshot -Name “weekly snapshot 4/20/2013″ | Remove-VMSnapshot –whatif

Mesmo assim antes de remover as instâncias escolhidas, o comando -whatif exibe a lista escolhida funcionando como uma pergunta sobre realmente excluir os itens selecionados.

Após uma breve revisão basta executar novamente o comando, desta vez omitindo o parâmetro -whatiff.

7.10:> Test-VHD

Outro recurso de muita utilidade é poder avaliar a condição do disco virtual, de preferência periodicamente, por padrão o Hyper-V utiliza discos virtuais no formato .vhd e .vhdx. É um cmdlet capaz de identificar potenciais problemas com os discos virtuais, conforme finaliza a análise dos discos vai exibindo a mensagem True quando nenhum problema foi identificado, é possível efetuar múltiplas verificações:

PS C:> dir F:\VHD\ | test-vhd

Mesmo assim no caso de identificado algum disco potencialmente problemático, no exemplo acima não é possível saber qual deles, por esse motivo adicionando alguns parâmetros fica mais fácil identificar qual disco virtual está potencialmente comprometido:

PS C:> dir G:\VHDs | Select Name,@{n=“Test”;Expression={ Test-VHD $_.fullname}} | sort Test

Na imagem abaixo é possível acompanhar com mais precisão a análise dos discos virtuais:

8.10:> Export-VM

Também indispensável a condição de exportar máquinas virtuais quando é necessário ou desejado transferir para outros locais físicos ou lógicos sem precisar refazer todas as configurações de instalação no novo ambiente. É um comando que irá exportar além da máquina virtual, suas configurações incluindo as instâncias relacionadas à ela.

É importante informar da pasta de destino ter nome diferente da máquina virtual a ser exportada, caso contrário o processo não poderá ser executado, como dica adicional considerando a possível demora nesta atividade é prudente adicionar o parâmetro -asjob, executando a exportação em segundo plano podendo ser utilizado em apenas uma máquina virtual:

PS C:> export-vm “test rig” -Path E:\BackupFolder –asjob

Ou para várias máquinas virtuais:

PS C:> export-vm jdh* -Path e:\backupfolder -asjob

9.10:> Get-VMHost

É um comando que retorna informações sobre o equipamento hospedeiro, executando o Hyper-V:

PS C:> get-vmhost

10.10:> Get-VMNetworkAdapter

De grande importância pois permite saber a configuração de rede atribuída à máquina virtual, assim como o endereço IPv4 e IPv6 quando habilitado:

PS C:> Get-VMNetworkAdapter -VMName chi-dc04

É possível reduzir as informações desejadas, exibindo apenas os endereços de rede:

PS C:> Get-VMNetworkAdapter -VMName chi-dc04 | Select -expand IPAddresses

Para o momento que precise listar a configuração de rede para todas as máquinas virtuais em execução:

PS C:> get-vm | where { $_.state -eq ‘running’} | get-vmnetworkadapter | Select VMName,SwitchName,@{Name=“IP”;Expression={$_.IPAddresses | where {$_ -match “^172.”}}} | Sort VMName

[ Conclusão ]

É inquestionável a facilidade de gerenciamento das máquinas virtuais pelos ambientes gráficos, permitem averiguar rapidamente uma grande quantidade de configurações e funcionamento dos diversos sistemas em execução, efetuar alterações pelo modo gráfico também permite entender como as alterações afetarão o cenário de maneira mais abrangente.

Entretanto costuma ser comum o gerenciamento ocorrer em apenas uma instância por vez, isso para evitar o consumo ou saturamento desnecessário dos recursos do administrador de máquinas virtuais. Utilizando os benefícios do PowerShell e seus diversos parâmetros, aqui aplicados no ambiente de máquinas virtuais, permite dinamizar muitas das atividades que seriam executadas individualmente porém aqui de maneira quase simultânea, considerando o ambiente texto podendo ser iniciado em várias instâncias, é possível executar alterações num ambiente e enquanto ele é atualizado, iniciar outra alteração noutro ambiente seja local ou em ambiente remoto.

Gostou? Se tiverem algumas sugestões ou dicas deixem nos comentários.

Fonte: www.iperiusbackup, learn.microsoft, microsoft, mctblaze, altaro