Linux P2V with VMware Converter Stand Alone

Over the years I have seen thousands of Windows Servers and completed hundreds of Windows P2Vs.  I only have dozens of Linux Servers and have yet to attempt a Linux P2V – until now!

To beign I found an older model physical server.  This physical server had a Dell PERC RAID controller with two RAID-1 volumes.  I installed RedHat Enterprise 4.5 using only the first RAID-1 set and accepting the default partitioning options.  Once the install was complete I added the second drive as the /data mount.  This wasn’t necessary; I just wanted to verify that additional disks would be available for cloning.

mkfs.ext3 /dev/sdb2
mkdir /data
mount /dev/sdb2 /data
vi /etc/fstab

Once the fstab was open in VI, I added the following line at the end of file:

/dev/sdb2  /data  ext3  defaults  1 2

Instructions for adding this second disk as the /data mount were obtained here: http://www.cyberciti.biz/faq/linux-disk-format/

This actual P2V process was completed using the free VMware Converter Standalone.

  1. Specify the machine source.  I’ve allowed root login over SSH, which isn’t a best security practice, but was requested by the converter utility.  Supported Linux distributions are listed on the first screen but include:
    1. Red Hat Enterprise Linux 2.1, 3.0, 4.0, 5.0
    2. Red Hat Linux Advanced Server 2.1
    3. SUSE Linux Enterprise Server 8, 9, 10
    4. Ubuntu Linux 5.x, 6.x, 7.x, 8.x
  2. Specify the vCenter or ESX/ESXi host name, user name and password.
  3. Select a host (if needed), enter information about the VM name, datastore, and hardware version.
  4. A “View/Edit Options” screen appears that allows you to reconfigure the virtual hardware.  In my ‘data to copy’ heading I see all of my volumes with their current size – and am provided the ability to shrink/grow them as needed.  I have also removed CPU/Memory to ‘right-size’ the VM configuration.
  5. The final option on the “View/Edit Options” page asks for the “Helper VM Network” information.  My first attempt to complete this P2V failed because of an invalid configuration on this step.  My test network did not have DHCP available — it turns out that the converter process boots the target VM from an ISO image to assist in the process.  This last step is where the temporary IP information is assigned to the target virtual machine for the cloning process.
  6. Here is a screenshot of the ‘helper’ VM while the cloning operation is going on:
  7. The successful log below gives a better summary of what actually happens:
  8. Once the virtual machine is powered on, a wizard starts to help you with the hardware changes.  In my build I had to press a key to begin and the first screen I saw was really straight forward:
Posted in Virtualization | Leave a comment

P2V Post Migration Cleanup

I’ve been doing a lot of P2V migrations over the last few months and wanted to share a couple of lessons learned. Our environment uses McAfee ePO to centrally manage our desktops and servers. We noticed that after a P2V migration the agent would no longer be able to communicate with the ePO server. After doing some searching we located several registry keys that contain Agent keys unique to a specific piece of hardware. If we delete these keys and restart the framework service clients are again able to communicate. Additionally, I look through the device manager and remove old devices — such as network cards that are no longer installed. Since these steps are repetitive, and I have a large quantity of P2V’s, I created this simple batch file to help me out:

[cc lang=”dos”]
@echo off
echo This tool fixes keys after a major hardware change – such as a P2V migration

if %PROCESSOR_ARCHITECTURE% == x86 reg delete “HKLM\SOFTWARE\Network Associates\ePolicy Orchestrator\Agent\Keys” /v binap /f
if %PROCESSOR_ARCHITECTURE% == x86 reg delete “HKLM\SOFTWARE\Network Associates\ePolicy Orchestrator\Agent\Keys” /v binas /f
if %PROCESSOR_ARCHITECTURE% == x86 reg delete “HKLM\SOFTWARE\Network Associates\ePolicy Orchestrator\Agent\Keys” /v binrs /f
if %PROCESSOR_ARCHITECTURE% == x86 reg delete “HKLM\SOFTWARE\Network Associates\ePolicy Orchestrator\Agent\Keys” /v binsp /f

if %PROCESSOR_ARCHITECTURE% == AMD64 reg delete “HKLM\SOFTWARE\Wow6432Node\Network Associates\ePolicy Orchestrator\Agent\Keys” /v binap /f
if %PROCESSOR_ARCHITECTURE% == AMD64 reg delete “HKLM\SOFTWARE\Wow6432Node\Network Associates\ePolicy Orchestrator\Agent\Keys” /v binas /f
if %PROCESSOR_ARCHITECTURE% == AMD64 reg delete “HKLM\SOFTWARE\Wow6432Node\Network Associates\ePolicy Orchestrator\Agent\Keys” /v binrs /f
if %PROCESSOR_ARCHITECTURE% == AMD64 reg delete “HKLM\SOFTWARE\Wow6432Node\Network Associates\ePolicy Orchestrator\Agent\Keys” /v binsp /f

net stop McAfeeFramework
net start McAfeeFramework

if %PROCESSOR_ARCHITECTURE% == x86 “%ProgramFiles%\McAfee\Common Framework\CmdAgent.exe” -s -p
if %PROCESSOR_ARCHITECTURE% == AMD64 “%ProgramFiles(x86)%\McAfee\Common Framework\CmdAgent.exe” -s -p

reg delete “HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run” /v CPQTEAM /f

set devmgr_show_nonpresent_devices=1
start devmgmt.msc
[/cc]

To make things even easier, I have placed this script in an ISO image on my desktop. I can easily connect this ISO to the VM and access utilities even if my network connection is not connected.

Other utilities I keep in this ISO image are:

Posted in Scripting, Virtualization | Leave a comment

A quick way to find virtual machines with incorrect names

A few days back I saw a twitter post from @maishsk which linked to this article:

http://technodrone.blogspot.com/2010/04/how-to-speed-up-your-powercli-queries.html

The article got me thinking about the difference between Get-VM and Get-View and I wanted to apply it to a script I’ve been using for a little while.  This is a pretty simple script that finds my virtual machines that have incorrect names — the host name inside the VM doesn’t match the name of the VM in the vCenter console.

Using the Get-VM cmdlet takes 148.7862461 seconds to find all of my virtual machines (excluding the templates):
[cc lang=”powershell”]$getvms = (Measure-Command {get-vm | where { $_.Guest.HostName -ne $NULL -AND $_.Guest.HostName -notmatch $_.Name } | select-object name, {$_.Guest.HostName}}).TotalSeconds[/cc]

Using the Get-View VirtualMachines cmdlet with a filter to exclude templates only takes 11.6853342 seconds:
[cc lang=”powershell”]$getviewf = (Measure-Command {get-view -viewtype virtualmachine -Filter @{“Config.Template”=”false”} | where { $_.Guest.HostName -ne $NULL -AND $_.Guest.HostName -notmatch $_.Name } | select-object name, {$_.Guest.HostName}}).TotalSeconds[/cc]

While either script does a better job than trying to compare these settings manually, this Get-View method shows a very significant savings!  Thanks for the suggestion @maishsk!

Just in case you only want the query to show VM’s with incorrect names, here you go:

[cc lang=”powershell”]get-view -viewtype virtualmachine -Filter @{“Config.Template”=”false”} | where { $_.Guest.HostName -ne $NULL -AND $_.Guest.HostName -notmatch $_.Name } | select-object name, {$_.Guest.HostName}[/cc]

Posted in Scripting, Virtualization | Leave a comment

Repeated Characters when Typing in Remote Console

I’m attending a training class this week – vSphere Troubleshooting – and have used the vMA (vSphere Management Assistant) for the first time. In the lab guide we began by deploying the virtual appliance for vMA. One of the first steps said to define the “keyboard.typematicMinDelay” on our new VM. I wasn’t familiar with this setting, so I Googled it and found this VMware KB Article:

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=196

This setting resolves a possible issue where characters are repeated in the console when accessing it over a slow WAN link.  I’ve ran into this problem before, but never took the time to find a resolution.

Posted in Virtualization | Tagged | 1 Comment

Storage vMotion with Thin-Provisioning in PowerShell

In an earlier post I mentioned a script written by a co-worker to determine all of the non-thinprovisioned virtual machines.  This script is a follow-up to that, which allows actually uses storage vMotion to resolve the problems.  It is important to note that this script does not provide ANY error checking — if you try to move virtual machines to a datastore that does not have enough capacity you’ll be in trouble.  However, I have used this script to re-arrange many virtual machines and it was successful (I always verified I had enough target capacity before starting the script).
[cc lang=”powershell”]$dsView = Get-Datastore -Name “target-datastore” | Get-View -Property Name

Get-VM “vm-num1″,”vm-num2” | % {
$vmView = $_ | Get-View -Property Name
$spec = New-Object VMware.Vim.VirtualMachineRelocateSpec
$spec.datastore = $dsView.MoRef
$spec.transform = “sparse”
$vmView.RelocateVM($spec, $null)
}[/cc]

Posted in Scripting, Virtualization | Leave a comment