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.
- 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 - 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" - Connect to the service console and query for the files in the VMFS volumes
ls -Ral /vmfs/volumes/* grep .vmsn - 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:
WAYNES WORLD, WAYNES WORLD, PARTY TIME EXCELLENT!
Hello,
the command under 3 has a small error.
It failed the pipe character. Correct would be:
ls -Ral /vmfs/volumes/* | grep .vmsn
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.
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