Назад | Перейти на главную страницу

Получить список всех снимков на виртуальных машинах, управляемых vCenter?

У нас есть несколько серверов ESXi под управлением vCenter; есть ли способ получить список всех снимков на всех виртуальных машинах?

Гррр ... Снимки VMware. Если бы я поступил по-своему, они бы существовали только для резервного копирования и для тестирования изменений.

Вы можете просмотреть пространство, занимаемое снимками (что, вероятно, то, что вам действительно интересно знать) с помощью вкладки «Storage Views» на уровне кластера в вашем клиенте vSphere.

Начните с этого, а затем перейдите к отдельным виртуальным машинам. Записи, которые имеют значения в байтах (B), по сути, означают, что снимков нет.

Похоже, это работа для PowerCLI! Во всяком случае, с рабочей станции Windows, что у меня есть.

Get-Snapshot

В блоге Surly Admin есть даже сценарий, который вы можете скопировать, чтобы получить все снимки всех виртуальных машин в вашей среде., мясо которого я опубликую ниже для вашего удобства.

$Report = Get-VM | Get-Snapshot | Select VM,Name,Description,@{Label="Size";Expression={"{0:N2} GB" -f ($_.SizeGB)}},Created
If (-not $Report)
{  $Report = New-Object PSObject -Property @{
      VM = "No snapshots found on any VM's controlled by $VIServer"
      Name = ""
      Description = ""
      Size = ""
      Created = ""
   }
}
$Report = $Report | Select VM,Name,Description,Size,Created | ConvertTo-Html -Head $Header -PreContent "<p><h2>Snapshot Report - $VIServer</h2></p><br>" | Set-AlternatingRows -CSSEvenClass even -CSSOddClass odd

Ответ HopelessNoob отлично подходит для удобочитаемого отчета. Иногда я предпочитаю разбирать свой на другие объекты PS. Он тоже очень похож на HopelessNoob - я думаю, мы оба начали с одного и того же фрагмента кода для создания наших скриптов:

$ VIServer = "vsphere.ad.example.com"

If (-not (Get-PSSnapin VMware.VimAutomation.Core))
{  Try { Add-PSSnapin VMware.VimAutomation.Core -ErrorAction Stop }
   Catch { Write-Host "Unable to load PowerCLI, is it installed?" -ForegroundColor Red; Break }
}

Connect-VIServer $VIServer -Credential (Get-Credential) | Out-Null

Get-VM | Get-Snapshot | Select VM,Name,Description,@{Label="Size";Expression={"{0:N2} GB" -f ($_.SizeGB)}},Created | FT

Дает:

VM                              Name                            Description                     Size                            Created
--                              ----                            -----------                     ----                            -------
ENETSXS2                        VEEAM BACKUP TEMPORARY SNAPSHOT Please do not delete this sn... 19.28 GB                        8/11/2014 8:42:18 AM
ENETSDFS-BS                     VEEAM BACKUP TEMPORARY SNAPSHOT Please do not delete this sn... 16.30 GB                        8/11/2014 5:24:44 AM

Затем вы можете передать это в Remove-Snapshot или отфильтровать или что-то еще

Вот сценарий, который мы используем для создания дампа списка всех виртуальных машин со снимками состояния, работающего в PowerCLI. Это очень просто и чисто. Результаты будут сброшены на ваш локальный рабочий стол через файл .csv.

#  Possible "Select-Object -Property" variables: Description, Created, Quiesced, PowerState, VM, VMId, Parent, ParentSnapshotId, ParentSnapshot, Children, SizeMB, SizeGB, IsCurrent, IsReplaySupported, ExtensionData, Id, Name, Uid, Client


get-vm | get-snapshot | Select-Object -Property vm,created,sizeGB,name,description | Export-Csv -Path C:\Users\$env:username\Desktop\snapshots.csv

Даже если ответ был принят, я хотел бы указать вам на check_vmware_snapshots.
Это Nagios / Icinga плагин, чтобы проверить возраст и подсчитать моментальные снимки виртуальных машин в среде VMWare ESXi / vSphere.

Это зависит от Perl / VMware :: VIRuntime из "VMware-vSphere-CLI-5.5.0", поэтому на этот раз не будет PowerCLI или -shell. :-)

К сожалению, толстый клиент для Vcenter не имел этой функции с 6.0, я полагаю, но вот еще один вариант, если вы хотите легко сделать это в графическом интерфейсе. В 6.0 или 6.5 запустите веб-клиент vcenter (флэш-версия). В левой части (окно навигатора) выберите vcenter, центр обработки данных или кластер, затем выберите для просмотра виртуальных машин. С правой стороны слева от поля «фильтр» есть небольшой квадратный значок (наведенный на него говорит «Показать и скрыть быстрые фильтры». Щелкните этот квадратный значок, затем нажмите «есть снимок», затем нажмите «Да». Ваш view теперь будет отображать только виртуальные машины со снимками. Наслаждайтесь!

Или выполните следующий запрос в MS SQL (запрос основан на sql2008 и vcenter 5.1)

select t.ID, t.NAME as VMName, s.SNAPSHOT_NAME as SnapshotName
from [VCDB].[dbo].[VPX_SNAPSHOT] s, [VCDB].[dbo].[VPX_ENTITY] t
where s.VM_ID = t.ID order by t.ID

Откройте vCenter с помощью vSphere Client. Перейдите к

Категория «Хранилище данных и кластер хранилищ данных»

"R-Щелкните хранилище данных", где вы хотите найти снимок. (Если несколько хранилищ данных, тогда необходимо использовать каждое хранилище данных)

Вы увидите вкладку папок и поиска.

Нажмите, чтобы увидеть изображение вкладки поиска

Нажмите «Поиск», затем в раскрывающемся списке выберите «Снимок виртуальной машины».

Щелкните Поиск.

Он покажет все снимки, хранящиеся в этом хранилище данных.

R-Щелкните снимок и «Перейти в папку»

Он перейдет в папку виртуальной машины, из которой сделан снимок.

Это сработало для меня в vSphere 6.7 (веб-клиент):

  • Перейдите в хранилище и щелкните хранилище данных
  • Перейдите на вкладку файлов
  • Введите "snap" в поле поиска файла.
  • В нем будут перечислены файлы моментальных снимков, и вы можете определить виртуальные машины на основе имени файла моментального снимка.

Простой собственный способ сделать это - просто использовать следующий лайнер на целевом хосте ESXi после того, как вы подключитесь к нему по SSH, и он покажет вам идентификатор виртуальной машины и детали снимка ниже:

SSH к ESXi и запустите это:

for i in $(seq 1 60); do echo 'VM Id:' $i && vim-cmd vmsvc/get.snapshotinfo $i; done

Как только вы получите результирующий идентификатор виртуальной машины из приведенной выше команды, запустите следующую команду, чтобы получить все идентификаторы виртуальных машин и сведения, чтобы получить точное имя виртуальной машины.

vim-cmd vmsvc/getallvms

Удачи!