Friday, May 16, 2008

Find VM snapshots in ESX/VC

Below are four methods I have used to find snapshots of VMs in ESX and VirtualCenter, other than manually looking through each VM in the GUI. Query the database using SQL management studio, use sqlcmd from the command-line, list the files in the service console, or use the new VI Toolkit powershell snap-in.

  1. Query SQL using SQL Server Management Studio

    select ENT.Name as 'Name', Lower(DNS_Name) as 'DNS Name', Guest_OS as 'OS', Mem_Size_MB as 'Mem', IP_Address as 'IP', VM.FILE_Name as 'VMX location', VM.Suspend_Time as 'Suspend Time', VM.Suspend_Interval as 'Suspend Interval', VMS.Snapshot_Name as 'Snapshot Name', VMS.Snapshot_Desc 'Snapshot Description', DateAdd(Hour, 10, VMS.Create_Time) as 'Snapshot Time', VMS.Is_Current_Snapshot 'Current Snapshot' from vpx_vm VM inner join VPX_GUEST_NET_ADAPTER NET on VM.ID = NET.VM_ID inner join VPX_ENTITY ENT on VM.ID = ENT.ID inner join VPX_SNAPSHOT VMS on VM.ID = VMS.VM_ID

  2. Use sqlcmd.exe to run the query

    Run this query from a command-line after updating the server and database parameters:
    sqlcmd -S %server% -d %database% -W -s "," -Q "select ENT.Name as 'Name', Lower(DNS_Name) as 'DNS Name', Guest_OS as 'OS', Mem_Size_MB as 'Mem', IP_Address as 'IP', VM.FILE_Name as 'VMX location', VM.Suspend_Time as 'Suspend Time', VM.Suspend_Interval as 'Suspend Interval', VMS.Snapshot_Name as 'Snapshot Name', VMS.Snapshot_Desc 'Snapshot Description', DateAdd(Hour, 10, VMS.Create_Time) as 'Snapshot Time', VMS.Is_Current_Snapshot 'Current Snapshot' from vpx_vm VM inner join VPX_GUEST_NET_ADAPTER NET on VM.ID = NET.VM_ID inner join VPX_ENTITY ENT on VM.ID = ENT.ID inner join VPX_SNAPSHOT VMS on VM.ID = VMS.VM_ID"

  3. Connect to the service console and query for the files in the VMFS volumes

    ls -Ral /vmfs/volumes/* grep .vmsn

  4. Use the VI Toolkit to connect to a VC instance and query for snapshots. Note that this is currently in beta, so for write operations in production I suggest waiting for the production release of the toolkit.
  • Install VMware-Vim4PS-e.x.p-81531.exe (or later)
  • Run this command (or use the start menu shortcut) C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files\VMware\Infrastructure\VIToolkitForWindows\vim.psc1" -NoExit -Command ". \"C:\Program Files\VMware\Infrastructure\VIToolkitForWindows\init.ps1\"" \
  • Get-VC -server %vc-server% (you will be prompted for credentials unless you have a valid certificate path)
  • Get-VM Get-Snapshot

    Name Description PowerState
    ---- ----------- ----------
    A_Snapshot Test PoweredOff


    Note that the output above isn’t very well formed, so I prefer to export the results to a CSV file:
  • Get-VM Get-Snapshot export-csv -path c:\temp\VMsnapshots.csv

    Unfortunately the CSV output exports the the VM object as the object type instead of the properties in the object, so you can also use:
  • Get-VM Get-Snapshot foreach-object {$out= $_.VM.Name + "," + $_.Name + "," + $_.Description + "," + $_.PowerState; $out}

Notes

  • I doubt VMware would recommend querying the database directly, they’d say to use their SDK or the VI toolkit instead of either one or two above.
  • The SQL commands above add GMT+10 to the UTC times recorded in the database using DateAdd()


Wayne's World of IT (WWoIT), Copyright 2008 Wayne Martin.

4 comments:

Anonymous said...

WAYNES WORLD, WAYNES WORLD, PARTY TIME EXCELLENT!

Anonymous said...

Hello,

the command under 3 has a small error.

It failed the pipe character. Correct would be:


ls -Ral /vmfs/volumes/* | grep .vmsn

Anonymous said...

Unfortunately, this won't reveal "hidden" snapshots. Instead, you should look for filenames that has *delta* in it, this will always succeed in finding a snapshot, whether it is visible or not.

Dave Finch said...

Here's the powerShell version of the ls solution:
Connect VI-Server localhost
cd vmstore:
cd DataCenter1
get-childitem datastore1 -include *.vmsn -recurse -force

-force includes hidden items. I don't know if it includes the delta files or not. It takes a long time to run, though.

Post a Comment