Reputation: 23321
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
.
Upvotes: 3
Views: 3653
Reputation: 1
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
Upvotes: 0
Reputation: 13920
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
Upvotes: 2