Running Linux in a VM
Hardware Requirements
You need a system with virtualization (VT-d), at least 4GB of RAM, and 40GB of free hard drive space in order to run Linux in a VM. If you want to download and compile the kernel, you may need additional space of up to 20GB.
Download Debian
Download link to Get a recent version of Debian.
Install Qemu Virtualizer
Instructions for Debian OS
sudo apt-get install qemu-kvm qemu-system-x86
Setup Qemu
You need a space for VM either a file image or disk block.
Example with using a file for VM.
Create a 50GB qcow2 format image file for VM Note qcow2 grows in space as needed. In the start it is not 50GB in size.
qemu-img create -f qcow2 debian-vm.img 50G
Simple way to start Qemu
Get a suitable iso image file for distro installation.
qemu-system-x86_64 -enable-kvm -smp 2 -boot menu=on -m 2048m -vga std -cdrom debian-install-iso.img -hda debian-vm.img
Qemu Screenshots
01) Example OS Install Screen
02) Example Guest OS Grub2 Boot Screen
Advanced Qemu
Create a script file qemu.sh with executable permissions:
touch qemu.sh; chmod +x qemu.sh
Edit the qemu.sh and add lines like this:
MEM="2048m" BOOT="menu=on" [ ! -z "$1" ] && MEM="$1" [ ! -z "$2" ] && BOOT="$2" MACH="-machine q35" CPU="-cpu host" CDROM_IMG="/path/to/debian-install-iso.img" HDA_IMG="/path/to/debian-vm.img" CDROM="-cdrom ${CDROM_IMG}" HDA="-hda ${HDA_IMG}" VGA="-vga std" SSH_ENABLE="hostfwd=tcp:127.0.0.1:10101-:22" NET="-netdev user,id=n1,${SSH_ENABLE} -net nic,netdev=n1,model=virtio-net-pci" PATH_9P="~/9p/shared" P9="-fsdev local,id=p9d1,path=${PATH_9P},security_model=none" P9="${P9} -device virtio-9p-pci,fsdev=p9d1,mount_tag=p9_mnt" USB="-usb" USB_MICE="-usbdevice tablet" SOUNDHW="-device intel-hda,msi=auto -device hda-duplex" qemu-system-x86_64 -enable-kvm ${MACH} ${CPU} -smp 2 -boot "${BOOT}" \ -m "${MEM}" ${CDROM} ${HDA} ${NET} ${P9} ${USB} ${USB_MICE} ${SOUNDHW} \ ${VGA} -rtc base=utc
Put qemu.sh in PATH directory if needed. E.g. ~/bin.
Above script sets up network, usb, sound, video, 9p, and ssh access to Qemu VM Guest OS.
SSH Access
Install ssh (rsync) in both Host and Guest OS
Debian/Ubuntu install instructions:
apt-get install ssh rsync
For SSH access to Guest OS run:
ssh -p 10101 guest_user@127.0.0.1
9P Access for Host and Guest
9p can be used for easy transfer of files to and from host and guest OS.
Create 9p shared directory in host:
mkdir ~/9p/shared
And in guest load the 9p module if neccessary.
modprobe 9p
And run in guest to create 9p shared directory and to mount 9p filesystem on it:
mkdir /tmp/shared sudo mount -t 9p -o trans=virtio 9p_mnt /tmp/shared
Now put things in host 9p directory and see it in guest 9p directory and vice-versa.
Some Tips
While running Qemu Virtualizer you can press:
Ctrl+Alt+F for Fullscreen view and back.
Ctrl+Alt+G for mouse grab and release.