Estou tentando encontrar uma solução para encerrar normalmente todas as VMs convidadas em execução no VirtualBox Windows quando o computador host for desligado ou reiniciado.
Parece que a opção mais segura seria acionar o comando "salvar estado" quando o host começar a desligar, mas não está claro se o host aguardará tempo suficiente para que as VMs terminem de salvar o estado e desliguem.
Alguém tem uma solução robusta para esse problema (aparentemente básico)?
windows
virtualbox
virtual-machine
virtualization
shutdown
Matt Jenkins
fonte
fonte
Respostas:
Eu tive um problema semelhante e o resolvi executando o VirtualBox como um serviço:
http://vboxvmservice.sourceforge.net/
Com o VBoxVMService, você pode escolher como deseja que a máquina seja desligada (Salvar estado, desligado) e iniciada. Como está sendo executado como um serviço, o Windows espera automaticamente o desligamento durante o processo de desligamento do sistema.
fonte
Infelizmente, isso não parece possível para VMs iniciadas via GUI do VirtualBox. Embora a GUI possa pegar o evento de desligamento do host e reagir, o serviço VirtualBox é encerrado: https://forums.virtualbox.org/viewtopic.php?p=278668#p278668
Se você não precisar de um console gráfico, o VBoxHeadlessTray ou o VBoxVMService pode ser o caminho a seguir. Ambos suportam salvamento e retomada automáticos no desligamento e reinicialização do host do Windows.
O VirtualBox 5.0 apresenta um modo de inicialização "interface do usuário destacável" . Esse modo inicia uma VM sem cabeçalho com um processo de interface do usuário separado. Porém, o desempenho gráfico sofre e a aceleração 3D ainda não é suportada. Mas talvez isso possa ser combinado com o VBoxHeadlessTray no futuro (o VBoxHeadlessTray ainda não suporta 5.0). Links para o repositório do GitHub do VBoxHeadlessTray e para a solicitação de recebimento do GitHub correspondente para adicionar suporte ao VirtualBox 5 .
Edit: VBoxVmService também não suporta o novo modo destacável a partir da versão 5.0. Apenas sem cabeça até agora. Eu adicionei uma solicitação de recurso para isso.
fonte
Eu tenho 3 scripts em lote que eu uso em vez dos botões de energia do menu Iniciar.
do_shutdown.bat (desligar o pc com um período de espera de 10 segundos, não para dar tempo de economia de 10 segundos para a VM, mas para permitir que eu cancele o desligamento em 10 segundos. A contagem regressiva começa depois que a VM foi desligada)
do_reboot.bat (reinicia imediatamente após o encerramento da VM)
do_cancel.bat (permite cancelar o desligamento do PC dentro do período de espera de 10 segundos. Em seguida, reinicia os vm novamente, pois eles foram desligados com o do_shutdown.bat)
Em vez de
savestate
você também pode usar um dos seguintesfonte
Desculpe o atraso na festa. Existe uma resposta exata para isso, embora exija algum comando-foo. Consulte esta publicação no tópico para obter mais informações: https://forums.virtualbox.org/viewtopic.php?f=6&t=53684#p285540
O comando que você está procurando é:
"C: \ Arquivos de Programas \ Oracle \ VirtualBox \ VBoxManage.exe" setextradata GUI "VM NAME" / Shutdown DefaultCloseAction
É isso que eu uso em várias VMs, fecho a janela e ele inicia um desligamento seguro automaticamente. Desligue o Windows e, na tentativa de fechar tudo, aguardará a conclusão desses processos.
fonte
Eu tive uma pergunta semelhante e encontrei esta página. Não quero executar o VirtualBox como um serviço, porque tenho muitas VMs para teste e geralmente escolho diferentes para executar na interface do usuário do VirtualBox. Quando eu desligo o computador, é chato salvar manualmente o estado de cada VM. Usar scripts para salvar todas as VMs em execução parece ser uma solução prática nesse caso. Para tornar a resposta de Daniel F mais geral, escrevi esses scripts que salvam automaticamente o estado de todas as VMs em execução sem nomeá-las explicitamente.
saveRunningVMs.bat para Windows:
saveRunningVMs.sh para Linux:
fonte
Criei um script python que suspenderia todas as VMs do VirtualBox em execução e configurei o sistema para executar o script no logout como uma tarefa agendada.
Não sei exatamente como esse método é confiável. Como outros observaram, há limites para quanto tempo o sistema aguardará a conclusão de uma tarefa do Winlogon 7002. Mas, pessoalmente, não tive nenhum problema em fornecer estados de salvamento utilizáveis, mesmo com várias VMs em execução em mais de 4 GB de RAM geral da VM.
Aqui estão as etapas para configurá-lo:
python.exe
, por exemploc:\Python27\python.exe
C:\Users\rakslice\Documents\vboxsuspend\vboxsuspend.py
Agora as VMs do VirtualBox devem ser suspensas no logout / reinício / desligamento.
O script python para fazer o desligamento está abaixo:
fonte