All over the world people are upgrading to VMware vSphere. The
upgrade procedure of the hypervisor and the management layer is
straight forward. If you want to take full advantage however of all the new
features and performance improvements your virtual machines will also
need to be upgraded. Scott Lowe wrote an excellent article on this
topic and I wanted to bring this post to your attention as it's an
important part of the upgrade path in my opinion. Please visit the
source article for feedback or comments.
Scott Lowe – vSphere Virtual Machine Upgrade Process
Upgrading a VMware Infrastructure 3.x
environment to VMware vSphere 4 involves more than just upgrading
vCenter Server and upgrading your ESX/ESXi hosts (as if that wasn’t
enough). You should also plan on upgrading your virtual machines.
VMware vSphere introduces a new hardware version (version 7), and
vSphere also introduces a new paravirtualized network driver (VMXNET3)
as well as a new paravirtualized SCSI driver (PVSCSI). To take
advantage of these new drivers as well as other new features, you’ll
need to upgrade your virtual machines. This process I describe below
works really well.
I’d like to thank Erik Bussink, whose posts on Twitter got me started down this path.
Please note that this process will require some downtime. I
personally tested this process with both Windows Server 2003 R2 as well
as Windows Server 2008; it worked flawlessly with both versions of
Windows. (I’ll post a separate article on doing something similar with
other operating systems, if it’s even possible.)
- Record the current IP configuration of the guest operating system. You’ll end up needing to recreate it.
- Upgrade VMware Tools in the guest operating system. You can do this
by right-clicking on the virtual machine and selecting Guest >
Install/Upgrade VMware Tools. When prompted, choose to perform an
automatic tools upgrade. When the VMware Tools upgrade is complete, the
virtual machine will reboot.
- After the guest operating system reboots and is back up again,
shutdown the guest operating system. You can do this by right-clicking
on the virtual machine and selecting Power > Shutdown Guest.
- Upgrade the virtual machine hardware by right-clicking the virtual machine and selecting Upgrade Virtual Hardware.
- In the virtual machine properties, add a new network adapter of the
type VMXNET3 and attach it to the same port group/dvPort group as the
first network adapter.
- Remove the first/original network adapter.
- Add a new virtual hard disk to the virtual machine. Be sure to attach it to SCSI node 1:x; this will add a second SCSI adapter to the virtual machine. The size of the virtual hard disk is irrelevant.
- Change the type of the newly-added second SCSI adapter to VMware Paravirtual.
- Click OK to commit the changes you’ve made to the virtual machine.
- Power on the virtual machine. When the guest operating system is
fully booted, log in and recreate the network configuration you
recorded for the guest back in step 1. Windows may report an error that
the network configuration is already used by a different adapter, but
proceed anyway. Once you’ve finished, shut down the guest operating
- Edit the virtual machine to remove the second hard disk you just added.
- While still in the virtual machine properties, change the type of the original SCSI controller to VMware Paravirtual (NOTE: See update below.)
- Power on the virtual machine. When the guest operating system is fully booted up, log in.
- Create a new system environment variable named DEVMGR_SHOW_NONPRESENT_DEVICES and set the value to 1.
- Launch Device Manager and from the View menu select Show Hidden Devices.
- Remove the drivers for the old network adapter and old SCSI adapter. Close Device Manager and you’re done!
If you perform these steps on a template, then you can be assured
that all future virtual machines cloned from this template also have
the latest paravirtualized drivers installed for maximum performance.
UPDATE: Per this VMware KB article,
VMware doesn’t support using the PVSCSI adapter for boot devices. That
is not to say that it doesn’t work (it does work), but that it is not supported. Thanks to Eddy for pointing that out in the comments!