Снапшоты (снимки) виртуальных машины в VMWare позволяют сохранить состояние виртуального диска виртуальной машины, конфигурацию ВМ и, при необходимости, виртуальной памяти на определенный момент. Снапшоты можно создавать перед установкой обновлений, обновлением приложений или в различных тестовых сценариях. Подавляющее большинство решений по резервному копированию виртуальных машин в процессе создания резервной копии ВМ сначала создают снапшот ВМ, забирают его к себе (на диск или на ленту), а потом удаляют снапшот у ВМ. Тем самым в бэкап попадает состояние ВМ на определенный момент.
В этой статье мы покажем, как создавать в среде VMWare создавать, удалять и консолидировать снапшоты из командной строки PowerCLI.
Создаем снапшот ВМ из PowerCLI
Предположим, вы уже подключились в PowerCLI к своему серверу vCenter с помощью командлета Connect-VIServer. Для создания снапшота используется командлет New–Snapshot.
New-Snapshot -vm msk-app01 -Name beforeAppUpdate
Или можно воспользоваться конвейером:
get-vm -Name msk-app01 | New-Snapshot -Name beforeAppUpdate
В списке снапшотов ВМ появится еще один.
Можно получить список имеющихся снапшотов определенной ВМ с помощью команды:
Get-VM -name msk-app01 | Get-Snapshot | Select VM,Name,Created,SizeMB | FT
Можно получить список снапшотов за определенный период. Например, нам нужно найти все ВМ со снапшотами, созданными более 30 дней назад:
Get-VM| Get-Snapshot |Where {$_.Created -lt (Get-Date).AddDays(-30)}| Select-Object VM,Name,Created,SizeGB | FT
Удаление снапшота ВМ из PowerCLI
Можно удалить снапшот с помощью командлета Remove-Snapshot.
Get-VM -Name msk-app01 | Get-Snapshot | Remove-Snapshot
Появится уведомление, в котором у вас запросится подтвердить удаление всех снапшотов.
Если вы хотите удалить только один снапшот, нужно указать его имя.
Get-VM -Name msk-app01 | Get-Snapshot -name beforeAppUpdate | Remove-Snapshot
Можно одной командой удалить все снапшоты старше 30 дней у всех ВМ в vCenter:
Get-VM | Get-Snapshot | Where {$_.Created -lt (Get-Date).AddDays(-30)} | Remove-Snapshot
Запуск консолидации дисков из PowerCLI
При удалении одного или всех снапшотов (DeleteAll) у виртуальной машины, они немедленно пропадают из консоли Snapshot Manager, после чего выполняется консолидация .vmdk файлов в VMFS хранилище. Если при консолидации произойдет ошибка, старые файлы снапшотов vmdk дисков могут остаться на хранилище. Вы можете выполнить консолидацию дисков с помощью командлета Consolidation:
Найдем все ВМ, которые требуют консолидации файлов:
Get-VM | Where-Object {$_.Extensiondata.Runtime.ConsolidationNeeded}
После чего можно выполнить консолидацию всех ВМ:
Get-VM | Where-Object {$_.Extensiondata.Runtime.ConsolidationNeeded} | foreach {$_.ExtensionData.ConsolidateVMDisks_Task()}
5 комментариев
Здравствуйте. Спасибо за статью.
Вопрос такой — возможно ли создание виртуальных машин из снепшотов других виртуальных машин?
Как-то было настроено что снэп делается каждый день в определенное время, как отключить это?
Добрый день!
Спасибо за статью.
У меня после выполнения команды выводится следующая строка:
PS C:\Users\bb129> Get-VM | Where-Object {$_.Extensiondata.Runtime.ConsolidationNeeded} | foreach {$_.ExtensionData.ConsolidateVMDisks_Task()}
Type Value
—- ——
Task haTask-43-vim.VirtualMachine.consolidateDisks-1965632861
Консолидация не проходит, снепшоты остаются на месте. Буду признателен если подскажете куда рыть дальше.
И еще вопрос, должна ли быть выключена виртуальная машина на момент выполнения команд? Я виртуалку не отключал.
Если онлайн слияние не пойдет, попробуйте все таки выключить ВМ. Там могут быть и другие проблемы с блокировкой файлов.
Но я бы сначала прежде чем лесть в дебри попробовал на выключенной ВМ.
запустил удаление старого снэпшота , но оно так долго выполняется.. очень нужно остановить vmware — проблемы с физическим диском. если отменить «Remove Snapshot» — надо будет ждать ещё три часа?