QEMU is a very interesting emulator. It is small, around 100MB in my mac. It is open source and very old piece of software. It is used in many places. But the most important one in my opinion is the Android Emulator. It is really powerful and has lot of features. I’m planning to use QEMU as a replacement of VMWare and VBox. They are really heavy. But for my requirements I need something lightweight.
Installation on Mac
It was very easy because of HomeBrew. Just run:
brew install qemu
Creating a virtual hard disk
I’m creating a virtual hard disk of size 0MB. This will expand when the OS write data to it. And the format I’m using is qcow2. This supports creating snapshots of VM.
qemu-img create -f qcow2 alpine.img 0M
I’m running a 64bit Alpine linux. I gave 128MB RAM to it and I’m using user mode networking. It has some limitations. But basic networking will work fine. It is possible to SSH to the VM. Thats enough for me.
The monitor flag gives control to the VM after launching it. I’m using it for making snapshots.
qemu-system-x86_64 -m 128M -cdrom alpine-standard-3.7.0-x86_64.iso -monitor stdio -hda alpine.img -net nic -net user
While running the VM we can save the entire state of it as a snapshots. Its like pausing and resuming the entire OS. It is useful because next time we can load the snapshots instead of booting the entire system. Just like hibernation.
To save a snapshot:
To list saved snapshots:
To load a snapshot while running VM:
To load snapshot while starting QEMU for that add this flag to it:
I loved its simplicity. But I might forget the commands. So I’m planning to make a wrapper around it like Vagrant did.