Sunday, January 28, 2018

VMware - Migrating Exchange P2V

Migrating Microsoft Exchange P2V with VMware

A lot of what you read online related to migrating from a physical to virtual (P2V) MS Exchange server will say don't do it. That's probably good advice, but when you have no other choice, here's some tips I found that helped me get this working.

This was a Server 2012 R2 with Exchange 2010 migrated to VMware 6.5 using the VMware Converter tool. The best steps I've found to make this as successful as possible are:

  • Disable all Exchange services before starting the conversion
  • Make note of all network related settings, specicially all IP addresses used
  • Run the P2V Converter, don't change the disk sizes, leave them as is
  • After the conversion install VMware Tools
  • Assign all IP addresses to the new virtual NIC(s)
  • In Device Manager select "Show Hidden Devices" and remove all unused devices related to the physical hardware
  • Reboot
  • Enable the Exchange services
  • Reboot
  • Test for inbound/outbound mail flow

Disable Exchange Services:

The first step before migrating your Exchange server from physical to virtual is to disable all of the Exchange services. This will accomplish two things, firstly it will speed up the boot process of the virtual server after it has been converted because you won't have to wait on them to start. Secondly it will prevent new mail from coming in while the server is being migrated. You could also accomplish this by stopping SMTP routing to the server but that would involve changing other systems in addition to Exchange. I like to use a simple command line script to stop the services.
  • sc config "MSExchangeADTopology" start= disabled
  • sc config "ADAM_MSExchange" start= disabled
  • sc config "MSExchangeAB" start= disabled
  • sc config "MSExchangeAntispamUpdate" start= disabled
  • sc config "MSExchangeEdgeCredential" start= disabled
  • sc config "MSExchangeEdgeSync" start= disabled
  • sc config "MSExchangeFDS" start= disabled
  • sc config "MSExchangeFBA" start= disabled
  • sc config "MSExchangeIMAP4" start= disabled
  • sc config "MSExchangeIS" start= disabled
  • sc config "MSExchangeMailSubmission" start= disabled
  • sc config "MSExchangeMailboxAssistants" start= disabled
  • sc config "MSExchangeMailboxReplication" start= disabled
  • sc config "MSExchangeMonitoring" start= disabled
  • sc config "MSExchangeProtectedServiceHost" start= disabled
  • sc config "MSExchangeRepl" start= disabled
  • sc config "MSExchangeRPC" start= disabled
  • sc config "MSExchangeSearch" start= disabled
  • sc config "WSBExchange" start= disabled
  • sc config "MSExchangeServiceHost" start= disabled
  • sc config "MSSpeechService" start= disabled
  • sc config "MSExchangeSA" start= disabled
  • sc config "MSExchangeThrottling" start= disabled
  • sc config "MSExchangeTransport" start= disabled
  • sc config "MSExchangeTransportLogSearch" start= disabled
  • sc config "MSExchangeUM" start= disabled
  • sc config "msftesql-Exchange" start= disabled
  • sc config "w3svc" start= disabled
  • sc config "iisadmin" start= disabled
Not all of these services will be installed on every Exchange instance but I listed all of them for reference.


Note All Network Settings:

This may sound obvious since you probably already know the IP address of the Exchange server but keep in mind sometimes there's additional NICs or IP addresses for specific services such as a send/receive connector. Double checking this won't hurt and it might save you some time afterwards.


Clean Up Device Manager:

After you've run the VMware Converter tool and have your new VM up and running be sure to install VMware Tools before doing anything else. This will ensure all of the necessary virtual drivers are installed and up to date. Once the network drivers are loaded you can add back all of your static IPs and mirror the previous physical server's configuration. Assuming you have done those two items you now need to remove all of the previously used hardware that is no longer necessary from Device Manager. First enable the "Show Hidden Devices" option in Device Manager so that you can see all of the old grayed out devices.
Now you can expand each section within the Device Manager tree and remove the grayed out devices. The two key areas to check that will likely cause the most issues are under Network Adapters and Portable Devices -> Exchange. The behavior I experienced was an inability to send e-mail via the SMTP Send Connector. This was due to the leftover network settings from the physical server. Once I removed those I could send e-mail just fine. The really odd and frustrating part of this conversion was that everything except sending worked correctly as soon as I configured the network and started back up all of the Exchange services.

Enable Exchange Services:

The last step before testing to make sure everything is functioning normally is to reset all of the Exchange services from disabled to auto and reboot so they can start cleanly. The process to enable the services is exactly the same as disabling, the status just needs to be auto instead of disabled. Again I've listed those below for reference and scripting purposes.
  • sc config "MSExchangeADTopology" start= auto
  • sc config "ADAM_MSExchange" start= auto
  • sc config "MSExchangeAB" start= auto
  • sc config "MSExchangeAntispamUpdate" start= auto
  • sc config "MSExchangeEdgeCredential" start= auto
  • sc config "MSExchangeEdgeSync" start= auto
  • sc config "MSExchangeFDS" start= auto
  • sc config "MSExchangeFBA" start= auto
  • sc config "MSExchangeIMAP4" start= auto
  • sc config "MSExchangeIS" start= auto
  • sc config "MSExchangeMailSubmission" start= auto
  • sc config "MSExchangeMailboxAssistants" start= auto
  • sc config "MSExchangeMailboxReplication" start= auto
  • sc config "MSExchangeMonitoring" start= auto
  • sc config "MSExchangeProtectedServiceHost" start= auto
  • sc config "MSExchangeRepl" start= auto
  • sc config "MSExchangeRPC" start= auto
  • sc config "MSExchangeSearch" start= auto
  • sc config "WSBExchange" start= auto
  • sc config "MSExchangeServiceHost" start= auto
  • sc config "MSSpeechService" start= auto
  • sc config "MSExchangeSA" start= auto
  • sc config "MSExchangeThrottling" start= auto
  • sc config "MSExchangeTransport" start= auto
  • sc config "MSExchangeTransportLogSearch" start= auto
  • sc config "MSExchangeUM" start= auto
  • sc config "msftesql-Exchange" start= auto
  • sc config "w3svc" start= auto
  • sc config "iisadmin" start= auto
From here there's nothing left to do but test your newly converted Exchange server. Make sure you can both send and receive.internally and externally. A good resource for testing your e-mail setup is MX Toolbox.