@ Lutz L. Primeiro obrigado pelo roteiro. Eu tenho o mesmo problema no Xubuntu 14.04 com VB 4.3.10 e um Xubuntu 12.04 ou um Windwos XP Guest está em execução no modo de hibernação.
Na primeira tentativa, o script parece funcionar perfeitamente. Mas na próxima vez que as VMs não forem retomadas automaticamente quando o sistema principal retornar do estado de hibernação.
Esta é a mensagem que encontro no arquivo "pm-suspend.log":
Running hook /etc/pm/sleep.d/05_virtualbox thaw hibernate: Send resume
to VM'sVBoxManage: error: The virtual machine 'Xubuntu12' has
terminated unexpectedly during startup with exit code 1 VBoxManage:
error: Details: code NS_ERROR_FAILURE (0x80004005), component Machine,
interface IMachine Waiting for VM "Xubuntu12" to power on...
Eu posso retomar manualmente os convidados, isso funciona sem problemas,
mas isso não é tão confortável.
P.S .: O problema é conhecido há muito tempo, como você pode ver aqui: link
EDITAR: Existe um script semelhante:
#!/bin/bash
# Script to pause/resume running VBox VMs on hibernate/thaw
operation="$1"
# This script is invoked as root, but root cannot use VBoxManage to
# control the VMs of other users. So we obtain the members of the
# 'vboxusers' group and re-execute as each user in turn
if [ $(id -u) -eq 0 ] ; then
# running as root...
vboxusers=$(grep ^vboxusers /etc/group | cut -d ':' -f 4- | tr ',' ' ')
for user in $vboxusers; do
echo "restarting as $user..."
su - $user -c "$0 $operation" || exit $?
done
exit 0
fi
hibernated_vm_list=$HOME/.vbox-hibernated-vms
# get a list of all running VMs, save their state to disk and
# remember that we have done this
hibernate_vms()
{
rm -f $hibernated_vm_list
# each line in list is: "vmname" {vm-uuid}
local vm_list="$(VBoxManage list runningvms)"
if [ -z "$vm_list" ] ; then # nothing to do
return 0
fi
local tempfile="/tmp/VBoxPauseResume.tmp"
echo "$vm_list" > $tempfile
local pids=""
while read line ;
do
vm_name=$(echo "$line" | sed 's/\(".*"\).*//')
vm_uuid=$(echo "$line" | sed 's/.*\({.*}\)//')
echo "saving state of vm $vm_name for user $user"
(VBoxManage controlvm $vm_uuid savestate && \
echo "$vm_name $vm_uuid" >> $hibernated_vm_list && \
echo "saved state of vm $vm_name for user $user") &
pids="$pids $!"
done < $tempfile
wait $pids
rm -f $tempfile
}
# resumes any VMs that were saved by hibernate_vms(). Uses parallel
# child processes to thaw several VMs faster
thaw_vms()
{
if [ -e $hibernated_vm_list ] ; then
local pids=""
while read line ;
do
vm_name=$(echo "$line" | sed 's/\(".*"\).*//')
vm_uuid=$(echo "$line" | sed 's/.*\({.*}\)//')
echo "resuming vm $vm_name for user $user"
VBoxManage startvm $vm_uuid &
pids="$pids $!"
done < $hibernated_vm_list
wait $pids
rm -f $hibernated_vm_list
fi
}
case $operation in
hibernate) hibernate_vms ;;
suspend) ;;
thaw) thaw_vms ;;
resume) ;;
esac
(Salve este script como /etc/pm/sleep.d/02-VirtualBox e verifique se ele é executável)
Fonte: link
Infelizmente, o mesmo problema com este script ...