Question

I'am using vagrant + virtualBox on Mac OS X for some python development with multi vm environment with use of salt

When I end my work I am suspending the machine. with vagrant suspend But when I try to vagrant resume then it alwyas crashes and I have to go through whole time consuming process of vagrant destroy, vagrant up, and salt.

How to deal with it? (please do not provide replacment of virtual box with wmware fusion as a solution I must stay open source)


UPDATE

It looks like this when called vagrant resume:

➜  four  vagrant resume
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2200
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Error: Connection refused. Retrying...
    default: Error: Connection refused. Retrying...
    default: Error: Connection refused. Retrying...
    default: Error: Connection refused. Retrying...
    default: Error: Connection refused. Retrying...
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'restoring, running'. The machine is in the
'aborted' state. Please verify everything is configured
properly and try again.

If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you're using VirtualBox, run `vagrant up` while the
VirtualBox GUI is open.

UPDATE:

I strongly recommend using reload instead of resume.

Was it helpful?

Solution

Make sure you are using the latest VirtualBox 4.3.10 and Vagrant 1.5.4, install VirtualBox Guest Additions (or upgrade it to the latest available, manually or use vagrant-vbguest etc).

When vagrant commands like reload, suspend, resume doesn't work. Try to use more native VBoxManage commands to control the VM.

For example, if it cannot be resumed (from pause in VirtualBox terminology) or crashes when running vagrant resume, try to get the UUID or VM_NAME and use VBoxManage to resume it OR do a hard reboot.

NOTE: Normally there is NO need to destroy and spin-up a new box from the base box to fix this kind of issue.

To get the VM name or UUID

VBoxManage list runningvms or VBoxManage list vms

To get the state of the VM VBoxManage showvminfo UUID_OR_NAME | grep -i state

To resume from pause (vagrant suspend)

VBoxManage controlvm UUID_OR_NAME resume

NOTE: if it is in Saved state, use VBoxManage startvm UUID to start it.

If the above doesn't work, shut it down and restart

VBoxManage controlvm UUID_OR_NAME poweroff

and then do a vagrant up

HTH

OTHER TIPS

In my case, this was happening because Grub was offering a choice of boot modes after the unexpected restart. You can see this if you set v.gui = true in your Vagrantfile (and re-provision the VM).

I think the best course of action in the future would be to disable this boot menu, but I was not able to accomplish that successfully.

What does work for me is the following sequence for sending an Enter key code to the VM (this is what was needed to select the normal boot mode):

VBoxManage list runningvms
VBoxManage controlvm VM_ID_FROM_PREVIOUS_COMMAND keyboardputscancode 1c

If you know you only have one VirtualBox VM running on your machine, you can use the following one-liner (I recommend putting it in a script and adding the script to your path):

VBoxManage controlvm `VBoxManage list runningvms | sed 's/{.*//' | sed 's/"//g'` keyboardputscancode 1c
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top