Иногда может возникнуть ситуация требующая удаления snapshot'ов вручную, из за различных ошибок не позволяющих выполнить удаление/консолидацию через графический/web интерфейс vmware.
Подобные проблемы могут возникнуть, например, в случае возникновения ошибок при процессе репликации средствами Veeam, как в нашем случае.
Для того, чтобы восстановить рабочее состояние виртуальной машины, необходимо:
-
зайти через CLI в каталог с виртуальной машиной и посмотреть на наличие файлов snapshot'ов и delta-дисков на файловой системе
/vmfs/volumes/9619731d-7db0f1c5-998f-00157812468ad/MYVIRTUALMACHINE_replica_1 # ls -l
total 131951640
-rw------- 1 root root 34836 Dec 12 17:41 MYVIRTUALMACHINE-Snapshot18.vmsn
-rw------- 1 root root 34836 Dec 13 17:42 MYVIRTUALMACHINE-Snapshot20.vmsn
-rw------- 1 root root 8684 Dec 13 17:41 MYVIRTUALMACHINE.nvram
-rw------- 1 root root 1101 Dec 13 17:59 MYVIRTUALMACHINE.vmsd
-rwx------ 1 root root 6077 Dec 13 17:59 MYVIRTUALMACHINE.vmx
-rw------- 1 root root 3500 Dec 13 17:41 MYVIRTUALMACHINE.vmxf
-rw------- 1 root root 372736 Dec 13 17:42 MYVIRTUALMACHINE_1-000001-delta.vmdk
-rw------- 1 root root 327 Dec 13 17:42 MYVIRTUALMACHINE_1-000001.vmdk
-rw------- 1 root root 3070603264 Dec 13 17:41 MYVIRTUALMACHINE_1-000010-delta.vmdk
-rw------- 1 root root 343 Dec 13 17:59 MYVIRTUALMACHINE_1-000010.vmdk
-rw------- 1 root root 193273528320 Dec 13 17:59 MYVIRTUALMACHINE_1-flat.vmdk
-rw------- 1 root root 521 Dec 13 17:59 MYVIRTUALMACHINE_1.vmdk
-
Посмотреть и, в случае необходимости, отредактировать файл с информацией о snapshot'ах виртуальной машины .vmsd
.encoding = "UTF-8"
snapshot.lastUID = "20"
snapshot.current = "20"
snapshot0.uid = "18"
snapshot0.filename = "MYVIRTUALMACHINE-Snapshot18.vmsn"
snapshot0.displayName = "Restore Point 12.12.2016 20:05:19"
snapshot0.description = "<RPData PointTime=|225247857609617387904|22 WorkingSnapshotTime=|2252
snapshot0.createTimeHigh = "344953"
snapshot0.createTimeLow = "-1653115076"
snapshot0.numDisks = "1"
snapshot0.disk0.fileName = "MYVIRTUALMACHINE_1.vmdk"
snapshot0.disk0.node = "scsi0:0"
snapshot1.uid = "20"
snapshot1.filename = "MYVIRTUALMACHINE-Snapshot20.vmsn"
snapshot1.parent = "18"
snapshot1.displayName = "Restore Point 13.12.2016 20:04:59"
snapshot1.description = "<RPData PointTime=|225247858473417387904|22 WorkingSnapshotTime=|2252
snapshot1.createTimeHigh = "344973"
snapshot1.createTimeLow = "-1122050657"
snapshot1.numDisks = "1"
snapshot1.disk0.fileName = "MYVIRTUALMACHINE_1-000010.vmdk"
snapshot1.disk0.node = "scsi0:0"
snapshot.numSnapshots = "2"
-
Проверить наличие объектов на файловой системе описанных в filename и корректность
занимаемых этими файлами размеров(может быть пустой/битый vmdk файл). - прим. безусловно в случае ошибок типа Consolidate failed for VM MYVIRTUALMACHINE with error: vim.fault.FileLocked или vim.vm.Snapshot.remove: vim.fault.FileNotFound
-
Если требуется руками удалить неактуальный снапшот, то нужно удалить строчки с данным снапшотом и последующими снапшотами (в примере если мы хотим убрать некорректный snapshot1 с uid 20 мы должны удалить все строчки начинающиеся с snapshot1, если были бы последующие, у которых в цепочке взаимосвязей,указанных в параметре parent значился бы данный снапшот,их так же следовало бы удалить).
-
[Если на пункте 4 потребовалось изменение файла .vmsd] После изменить на UID последнего снапшота.
snapshot.lastUID = "20"
snapshot.current = "20"
В нашем случае на snapshot0 с UID 18
snapshot.lastUID = "18"
snapshot.current = "18"
-
[Если на пункте 4 потребовалось изменение файла .vmsd] Изменить информаци о количестве снапшотов
snapshot.numSnapshots = "1"
-
[Если на пункте 4 потребовалось изменение файла .vmsd] Если требуется удалить всю информацию о снапшотах, нужно очистить содержимое данного файла.
-
[Если на пункте 4 потребовалось изменение файла .vmsd] Чтобы изменения были восприняты гипервизором/vsphere необходимо перерегистрировать виртуальную машину в Inventory [
1][
2]
P.S. Возможные ошибки
Ошибка quiesce
Error: An error occurred while saving the snapshot: Failed to quiesce the virtual machine.
2016-12-13T15:20:46.251+03:00 [02752 error 'vmsnapshot' opID=0D3F1714-00000060-b1] [VmMo::ConsolidateDisks] Consolidate failed for VM MYVIRTUALMACHINE with error: vim.fault.InvalidSnapshotFormat
Ошибки vim.fault.FileLocked
2016-12-13T16:59:00.941+03:00 [02736 error 'vmsnapshot' opID=0D3F1714-00000386-8b] [VmMo::ConsolidateDisks] Consolidate failed for VM MYVIRTUALMACHINE with error: vim.fault.FileLocked
2016-12-13T16:59:01.945+03:00 [02736 info 'Default' opID=0D3F1714-00000386-8b] [VpxLRO] -- ERROR task-74490 -- vm-13111 -- vim.VirtualMachine.consolidateDisks: vim.fault.FileLocked:
--> Result:
--> (vim.fault.FileLocked) {
--> dynamicType = <unset>,
--> faultCause = (vmodl.MethodFault) null,
--> faultMessage = (vmodl.LocalizableMessage) [
--> (vmodl.LocalizableMessage) {
--> dynamicType = <unset>,
--> key = "msg.snapshot.vigor.consolidate.error",
--> arg = (vmodl.KeyAnyValue) [
--> (vmodl.KeyAnyValue) {
--> dynamicType = <unset>,
--> key = "1",
--> value = "msg.snapshot.error-DUPLICATEDISK",
--> }
--> ],
--> message = "An error occurred while consolidating disks: One of the disks in this virtual machine is already in use by a virtual machine or by a snapshot.",
Ошибки NOTFOUND
2016-12-13T16:32:32.741+03:00 [05584 info 'Default' opID=0D3F1714-00000310-9c] [VpxLRO] -- ERROR task-74486 -- vm-13109 -- vim.vm.Snapshot.revert: vim.fault.InvalidSnapshotFormat:
--> Result:
--> (vim.fault.InvalidSnapshotFormat) {
--> dynamicType = <unset>,
--> faultCause = (vmodl.MethodFault) null,
--> faultMessage = (vmodl.LocalizableMessage) [
--> (vmodl.LocalizableMessage) {
--> dynamicType = <unset>,
--> key = "msg.snapshot.vigor.revert.error",
--> arg = (vmodl.KeyAnyValue) [
--> (vmodl.KeyAnyValue) {
--> dynamicType = <unset>,
--> key = "1",
--> value = "msg.snapshot.error-NOTFOUND",
--> }
--> ],
--> message = "An error occurred while reverting to a snapshot: A required file was not found.",
--> }
--> ],
--> msg = "Detected an invalid snapshot configuration."
--> }
2016-12-13T16:32:24.034+03:00 [02736 info 'Default' opID=0D3F1714-0000030B-ea] [VpxLRO] -- ERROR task-74485 -- vm-13109 -- vim.vm.Snapshot.remove: vim.fault.FileNotFound:
--> Result:
--> (vim.fault.FileNotFound) {
--> dynamicType = <unset>,
--> faultCause = (vmodl.MethodFault) null,
--> file = "[]",
--> msg = "File [] was not found",
--> }
--> Args: