У меня проблема с переводом в спящий режим и приостановкой работы моего ноутбука Dell во время работы Virtualbox (XP Guest). Я попробовал метод ядра по умолчанию, uswsusp и tuxonice, и ни один из них не работает. Но если я закрою virtualbox, то гибернация и приостановка работает нормально. Ниже приведены технические характеристики системы. ОС: Ubuntu 10.10 64-битная (полностью обновлено). Оперативная память: 4 ГБ. Замена: 8 ГБ. Корень: 500 ГБ (из которых около 79% бесплатны). Он имеет графический чипсет серии ATI HD 5000, и я использую для него проприетарные драйверы, установленные через жокей.
Благодаря.
@TuKsn
Проблема очень проста быть решенной - переменный ДИСПЛЕЙ должен быть установлен.
VirtualBox использует его при запуске vms в режиме gui. Та же проблема происходит, когда я регистрируюсь через ssh и хочу запустить vm в режиме gui.
Спасибо за Ваш сценарий это работает отлично!
Однако я должен был добавить некоторую модификацию для хранения режима, в котором работают vms (т.е. 'gui' или 'бездисплейный', или 'sdl') должен был правильно перезапустить vms.
Ниже существует сценарий с моим включенным correctnesses:
#!/bin/bash
# Script to pause/resume running VBox VMs on hibernate/thaw
# Set your display here
display=":0.0"
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/\(".*"\).*/\1/')
vm_uuid=$(echo "$line" | sed 's/.*\({.*}\)/\1/')
vm_type=$(VBoxManage showvminfo $vm_uuid | grep "Session type:" | awk '{print $NF}')
case $vm_type in
"headless") ;;
"sdl") ;;
"GUI/Qt") vm_type="gui" ;;
*) vm_type="gui" ;;
esac
echo "saving state of vm $vm_name for user $user from mode $vm_type"
(VBoxManage controlvm $vm_uuid savestate && \
echo "$vm_name $vm_uuid $vm_type" >> $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/\(".*"\).*/\1/')
vm_uuid=$(echo "$line" | sed 's/.*\({.*}\)/\1/' | awk '{print $1}')
vm_type=$(echo "$line" | sed 's/.*\({.*}\)/\1/' | awk '{print $2}')
echo "resuming vm $vm_name for user $user in mode $vm_type"
DISPLAY=$display VBoxManage startvm $vm_uuid --type $vm_type &
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
У меня была та же проблема, "приостановитесь", виртуальный гостевой XP (HostKey-P) работал несколько раз, но часто НЕТ. Помещение VM-Guest-XP в "сохраненном состоянии" позволило системе быть в спящем режиме снова без проблем.
Я записал маленький сценарий, вставьте его /etc/pm/sleep.d/05_virtualbox
(не забывайте chmod a+x 05_virtualbox
) и управление питанием сделает save-machine-state и запустит процедуру по VMs автоматически...
#!/bin/sh
# File: /etc/pm/sleep.d/05_virtualbox #(at least in ubuntu/fedora)
#
# This hack saves-state all VirtualBox-VM's off user $VBUSER on hibernate/suspend,
# saves the list of this VMs in $VM_LIST_FILE, and on thaw/resume it starts all
# VMs in that list again, and removes $VM_LIST_FILE.
# BUGS: don't use the same NAME for different VMs, or rewrite the script to use UUIDs
#
# a REAL hack, tried to comment as much as possible, but the chosen syntax is obfuscated,
# sorry...also sorry for the bad english...
#
# Writer (guilty person): Lutz Langenbach
# Copyleft: do what you want with the Code
# Help: VBoxManage 2>&1 |less or http://www.virtualbox.org/manual/ch08.html
VM_LIST_FILE=/var/tmp/vms-in-saved-state-list
VBUSER=Put_YOUR_username_here
PATH=/sbin:/usr/sbin:/bin:/usr/bin
case "${1}" in
suspend|hibernate)
# print list of running VM's output: "vm-name" {vm-uuid}\n
# extract only the name of VM's and send
echo -n "Send savestate to VM's:"
sudo -u $VBUSER VBoxManage list runningvms \
|perl -ne 'chomp;s/^"([^"]*)".*/\1/; print $_; system("sudo -u '"$VBUSER"' VBoxManage controlvm \"$_\" savestate && echo \"$_\">>'"$VM_LIST_FILE"'");'
echo ..done
;;
resume|thaw)
# get each line in $VM_LIST_FILE, use it as VM-Name and send start to it
echo -n "Send resume to VM's"
cat $VM_LIST_FILE | perl -ne 'chomp;s/^"([^"]*)".*/\1/; system("sudo -u '"$VBUSER"' VBoxManage startvm \"$_\"");'
rm -f $VM_LIST_FILE
echo .
;;
*)
echo "Don't know what to do, 1st Arg was:${1}; Must be suspend|hibernate|resume|thaw"
;;
esac
Lutz L. First спасибо за сценарий. У меня есть та же проблема на Xubuntu 14.04 с VB 4.3.10 и Xubuntu 12.04, или Гость XP Windwos работает, в спящем режиме.
При первой попытке сценарий, кажется, работает прекрасный. Но в следующий раз VMs автоматически не возобновляют, когда основная система возвращается из быть в спящем режиме состояния.
Это - сообщение, что я нахожу в файле "pm-suspend.log":
Выполнение рычага/etc/pm/sleep.d/05_virtualbox оттепель в спящем режиме: Отправьте резюме VM'sVBoxManage: ошибка: виртуальная машина 'Xubuntu12' неожиданно завершила во время запуска с кодом выхода 1 VBoxManage: ошибка:Подробнее: кодируйте NS_ERROR_FAILURE (0x80004005), Машина компонента, интерфейс IMachine Waiting для VM "Xubuntu12" для включений...
Я могу вручную возобновить Гостей, это работает без проблемы, но это не столь удобно.
P.S.: проблема была известна в течение долгого времени, как Вы видите здесь: https://www.virtualbox.org/ticket/7716
Править: Существует подобный сценарий:
#!/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/\(".*"\).*/\1/')
vm_uuid=$(echo "$line" | sed 's/.*\({.*}\)/\1/')
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/\(".*"\).*/\1/')
vm_uuid=$(echo "$line" | sed 's/.*\({.*}\)/\1/')
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
(Сохраните этот сценарий как/etc/pm/sleep.d/02-VirtualBox и удостоверьтесь, что это - исполняемый файл),
Источник: http://angryfifer.blogspot.de/2012/02/linux-hibernation-and-virtualbox.html
Печально та же проблема с этим сценарием...
Согласно комментариям к первоначальному вопросу:
я обнаружил, что в virtualbox есть функция, с помощью которой можно сохранить текущее состояние виртуальных машин. Это похоже на гибернацию, за исключением того, что я не сплю с гостевой ОС явно. Более того, процесс очень быстрый, и после этого я могу нормально переводить хост-систему в исходное состояние.
blockquote>Эта функция известна как
Save Machine State
.