Wednesday, March 31, 2010

Virtualization with KVM

Introduction:
KVM is an Open-Source Virtual Machine Monitor. It leverages hardware extensions available for virtualization, to provide a FAST! virtual environment.


Installing KVM on your machine:


Does your Machine has hardware extension for virtualization? 
Check if following command produces any output, if not then your machine doesn't has the required extension:

cat /proc/cpuinfo | grep -i vmx



Installing KVM from source:
  • Install some required packages. On Ubuntu, issue following command :
    sudo apt-get install build-essential libsdl1.2-dev zlib1g-dev libasound2-dev pkg-config libgnutls-dev libpci-dev

  • Download latest qemu-kvm from http://sourceforge.net/projects/kvm/files/
  • Extract it in a directory, say ~/kvm
  • cd to above directory and issue following commands:
    • ./configure --prefix=/usr/local/kvm (Install kvm in /usr/local/kvm)
    • make
    • sudo make install
Installing and running a guest Operating System using KVM:

Installing a new Guest OS:
  • To start KVM:sudo modprobe kvm-intel (or sudo modprobe kvm-amd if on an AMD box). If this fails, look for last few lines in output of dmesg | tail - if virtual extension are disabled from boot, enable them from boot options.
  • To create a new virtual disk (on which guest OS will be installed):/usr/local/kvm/bin/qemu-img create -f qcow2 ubuntu1.img 20GThis creates a disk (which is just a file on your actual hard disk) called ubuntu1.img, that can expand to a size of 20GB.
  • To install a new OS in the virtual disk create:sudo /usr/local/kvm/bin/qemu-system-x86_64 -hda /path/to/virtual/disk -cdrom /path/to/iso/of/os/to/be/installed -boot d -m 512
    This starts the installation of guest OS.
Running a Guest OS:
  • To run a guest OS:
    sudo /usr/local/kvm/bin/qemu-system-x86_64 -drive cache=writeback,file=/path/to/virtual/disk -m 512 -soundhw es1370 

    This starts a virtual machine with 512 MB of RAM and with sound support. There are many more options available here, such as configuring guest OS's network etc.
Additional Information:
  1. Under KVM, each guest OS is just a user process running in Linux. Thus one use any command used on a process, such as killing using ctrl-c, stopping using ctrl-z etc.
  2. Around 256 MB of RAM is enough to run a Linux guest OS.
  3. There are multiple networking options available - one can assign a separate IP address to each of virtual machine and make them accessible to each other and the host. You can use such an arrangement for various experiments.

Cheers,
Nipun

3 comments: