Configure VM Snapshots for Crash-Consistent Quiescing with PowerCLI

Oh man oh man oh man. vNoob is back with another post! The title though certainly has a lot of big words, so let’s break it down.

 

First what is crash-consistent quiescing?

 

There are two types of quiescing, Application-Consistent and Crash-Consistent. Awesome! That explains everything right??

 

Application-Consistent snapshots means that the snapshot also has everything that was in memory/RAM at the time of the snapshot. All the running programs(Applications), processes, and even windows that were open at the time of the snapshot can be restored.

Crash-Consistent is just the opposite. It Doesn’t have anything that was in memory at the time of the snapshot. On a restore, the VM acts as if it is being started up after a Crash. All files are intact but everything that was in memory is lost.

 

Sweet, so why would we want to configure VMs for Crash-Consistent then?

Well if we do a VMware KB search for disk.enableuuid, the value we are going to change, there are 13 results. So there are atleast 13 reasons. They range from being unable to take a snapshot with your backup solution, to dynamic disks going missing, and even some old VCB stuff.

Regardless if you have had any of these issues or not, this is a common enough issue to at least be aware of it.

The disk.enableuuid is an advanced VM  setting that needs to change for the VM to change from application-consistent to crash-consistent.

I even posted and article about how to change this setting via the web client, check it out HERE.

 

One sweet tidbit: You can even make this change while the VM is turned on! With the GUI/WebClient method the VM must be turned off.  However with the PowerCLI method, you can not only make the change while the VM is turned On, but from what I can tell it doesn’t need a reboot to take affect either!

SWEET! That’s the hard part now out of the way, so let’s get to the Powershell/PowerCLI goodness.

 

param(
[Parameter(Mandatory=$true)]
$vm,
[Parameter(Mandatory=$true)]
$value)

IF(-not(($value -like “true”) -or ($value -like “false”)))
{Write-Warning “Parameter Value must be ‘True’ or ‘False'”
Break}

$vm=get-vm $vm

$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$extraconfig = New-Object Vmware.Vim.OptionValue
$extraconfig.Key = “disk.EnableUUID”
$extraconfig.Value = “$value”
$vmConfigSpec.extraconfig = $extraconfig
$vm | Foreach-object { (Get-View $_.ID).ReconfigVM($vmConfigSpec)}

$vm.extensiondata.config.flags |FL diskuuidenabled

 

With this as a nice example.

 

Side-Note: The “. .\enableuuid.ps1” is just me dot sourcing the ps1 file so I can run the function.

Tell it the VM you want it to change and the Value you want disk.enableuuid to have(True is Application-Consistent and False is Crash-Consistent), and you are good to go. After it is done, it even returns to you the current value, which should be the one you just set!

 

If you want to just download the the full function click HERE

One thought on “Configure VM Snapshots for Crash-Consistent Quiescing with PowerCLI”

  • One just copies the *.ps1 file to, say, vCenter, then runs it??
    It will find all the VMs and fix them??
    If our VM templates are converted to VMs per se, then run this script, the change will persist to new VMs created from the VM templates??
    Thank you, Tom

Comments are closed.