I recently ran upon a thread about Virtual Machines (VM's) and Virtualization. I figured a post on this topic has been long over due. For those of you who don't know what VM's are, I HIGHLY recommend that you read on. This technology is a game changer, even if it's been around for quite some time.
So let's just get right down to it.
WHAT is it?
A lot of people have different definitions of Virtualization but the way I think of it is that it's abstracting and decoupling SOMETHING from the hardware. When you virtualize an OS, you're basically abstracting all the hooks that it has into the hardware so it's more portable, mobile, and flexible. The output of that virtualization process creates a VM (which is essentially a set of files).
The VM runs on a hypervisor. There are two types (Type 1 and Type 2). Type 1 is under all OS's while Type 2 is install on top of an OS. For the purpose of this post, we'll just focus on Type 2, and on VMware. VMware's Type 2 hypervisor is called Player (it's free and can be found here: http://www.vmware.com/products/player/). I'm choosing VMware because it's the leader in the market right now, and by a wide margin. Their converter, aka P2V, is also free (found here: http://www.vmware.com/products/converter).
WHY use VM's?
I mentioned that virtualization's benefits is that it's more portable, mobile and flexible--and that applies to VM's. There's a ton of use cases and benefits because of this, but here's my top list:
Test Drive. Let's suppose you have Windows 7 installed, and you like it, but you've heard good things about Linux and you'd like to try it out. Typically you'd only have 2 options available: Live CD (run it off of a CD, USB drive, etc) or create a new partition (or shrink your existing one--can be dangerous) and install Linux there. Both options require you to shutdown Windows 7 and boot into Linux. What Player does is you install it in your Windows machine and then boot the Linux VM inside Windows 7 and run both OS's simultaneously. No need to reboot.
Obviously, if you can run multiple OS's, a big benefit of this is that you can run applications you typically couldn't before. I've posted before how I've been able to create an SSH tunnel back to my house with Putty and Linux, but it was on a Windows 7 machine--this is how I did it.
With Unity mode, you can seamlessly merge your VM's applications with the OS that you're running Player on. So let's say the OS you've got Player installed on is Linux (because it kicks butt) but you have to use Microsoft Visio for work. You can fire up the Windows VM that has Visio on it, enter Unity mode, and voila, you have the Visio application on your Linux desktop without being confined to the Windows's VM's window, so it looks like you've installed Visio on your Linux machine. If that doesn't make sense, check this youtube video out: http://www.youtube.com/watch?v=JeGOGD1SGgE
Consolidation. This is more for the Data Center's out there, but this was the biggest value prop of virtualization back when it came out. Most servers run 10-20% on utilized throughout the day on average, and being able to increase the utilization of your assets (servers) by consolidating your servers you've purchased via virtualization resonated with companies. Not really a benefit for you here with the exception that you don't need to buy another computer to run another machine/OS simultaneously with your other machine(s).
Isolation. Since a VM is another OS, and separate from the OS you've installed Player on, you can isolate yourself from potential threats. Let's face it, surfing the internet can be dangerous. Spyware, trogans, keyloggers... the list goes on. It's not uncommon for a windows machine to slow down over time. What if you could fire up a VM and do all your internet browsing, or testing of new (untrusted) applications, in a sandbox like environment? And when you're done, you can just blow the VM away and recreate another one based off of a template you've created? It protects your main OS, which means you don't need to rebuild it as often (if at all). And since you can share files between the VM and your main OS seamlessly, you don't lose any functionality.
Hardware Refresh. This is all about the decoupling effect of virtualization. I don't know if you caught on to this, but you don't need to reinstall an OS (or repair it) just because you installed a new mobo. The drivers, ram, CPU, and network are all "virtualized" or "generic-ized". The obvious down side here is that you lose some of the benefits that come with tightly integrated drivers (read: able to fully utilize that expensive graphic cards). But if you don't virtualize your gaming machine... or if you don't game... then the benefits are great.
Baseline = Goodness. I briefly mentioned the template VM. Let's say you've created a Windows 7 VM that has all the latest patches on it. Like clean install before you install any applications on it. You can easily copy and paste that to another location for safe keeping (remember, a VM is basically a set of files)... in other words you're making a baseline/gold-copy VM. So if for whatever reason you accidently corrupted your Windows machine, just copy/paste a new copy of your gold-copy and voila, you've got a pristine machine once again (no need to re-install from scratch). This, of course, assumes that Windows 7 is your VM, not the OS you've got Player installed on.
Multiple VMs. There's no reason why you can't have multiple VM's running simultaneously. I can't think of a use case of how this would be helpful off the top of my head, but I'm sure you can think of one. Probably goes back to isolation use case (think dedicated browser VM, FTP VM, etc).
Virtual Appliances. Virtual Appliances are VM's that people have already built. Not interested in building a Kubuntu VM from scratch? Someone's already done that for you. Check out this section of VMware's website and search around: https://solutionexchange.vmware.com/store/category_groups/19
VMware has been around for a while. The real awesome stuff is in their Type 1 hypervisor. For the IT Professionals out there, I'd HIGHLY recommend for you to build up your skills around VMware. Being able to move a VM live, without the end user realizing you're moving it, to another server is cool. But doing that at an extended distance (like another state)? Mind officially blown. There's a lot of really awesome stuff they are doing (Storage DRS, Fault Tolerance, vApps, Cloud Foundry, vFabric, VDI, etc) but this post is long enough as is.
Until next time my users,
Informative blog and very well explained about the need and working of Virtual Machines.
That is a nice "intro" write-up.
I think you might be missing the single most important reason to use VM's - Money.
Before virtualization, you had one physical machine that had an OS and performed some kind of task. Companies had dozens or literally hundreds of these physical machines.
Imagine how much money you will save having 30 or 40 servers running as VM's on a single "host" machine. It also uses a LOT less electricity. Looking specifically at VMware, they also have functions such as vMotion that allow you to move a running VM from one host to another without any downtime. Your users never know they just got moved to a different physical machine. Other than for Windows Updates, we rarely have to reboot these VM's - they just run and run.
There are certain things that you do need to consider when you go the virtualization route, such as scheduled AntiVirus scans all hitting at the same time, network and storage resources, etc. But with some good planning, you can save yourself and your users a lot of headaches by using a good virtualization solution.
@EdFromOhio, Thanks. Yeah I touched on it briefly with Consolidation, but you're obsolutely right. The post was really meant to address VM's for your average user (i.e. hypervisor type 2), not for the data center, but again, you're spot on.
There are many considerations that VMware Administrators have to take into account, which you hinted at (boot storms, AV storms, backup, DR, compliance, randomness of IO against backend storage, network throughput, memory usage, RDM vs VMDK, FT/HA impact, etc, etc).
@Root - My apologies for misinterpreting your intended audience. Virtualization is really for business use, although it can have some limited application in a home environment. So I completely agree with your " can't think of a use case of how this would be helpful off the top of my head, but I'm sure you can think of one. " statement.
I did use VMware Server 2.0.2 which runs on any Windows machine. It's free and it's great for up to 4 smallish VM's. Your use-case scenarios of "trying Linux" and such are perfect cases for this.
One thing that some might not expect is that backing up a VM is much easier than a physical machine. Just power off the VM, backup the files in the VM's directory, then start it back up. If you ever need to recover from a total crash, restore your backup, go into VMware, browse your drive to find your machine, then right-click on the .VMX file and say "Add To Inventory". Voila, your machine is back and ready to power on.
It can also do snapshots so if you want to test some things out and want a way to very easily revert your VM back to the way it was without doing a backup, it's literally just a few mouse clicks.
Again, great write up for the Average Joe.