angle-left

Правка информации о snapshot's vmware через файл конфигурации

 
Иногда может возникнуть ситуация требующая удаления snapshot'ов вручную, из за различных ошибок не позволяющих выполнить удаление/консолидацию через графический/web интерфейс vmware.
 
Подобные проблемы могут возникнуть, например, в случае возникновения ошибок при процессе репликации средствами Veeam, как в нашем случае.
 

Для того, чтобы восстановить рабочее состояние виртуальной машины, необходимо:

  1. зайти через 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
  2. Посмотреть и, в случае необходимости, отредактировать файл с информацией о 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" 
  3. Проверить наличие объектов на файловой системе описанных в filename и корректность 
    занимаемых этими файлами размеров(может быть пустой/битый vmdk файл). - прим. безусловно в случае ошибок типа Consolidate failed for VM MYVIRTUALMACHINE with error: vim.fault.FileLocked или vim.vm.Snapshot.remove: vim.fault.FileNotFound
  4. Если требуется руками удалить неактуальный снапшот, то нужно удалить строчки с данным снапшотом и последующими снапшотами (в примере если мы хотим убрать некорректный snapshot1 с uid 20 мы должны удалить все строчки начинающиеся с snapshot1, если были бы последующие, у которых в цепочке взаимосвязей,указанных в параметре parent значился бы данный снапшот,их так же следовало бы удалить).
  5. [Если на пункте 4 потребовалось изменение файла .vmsd] После изменить на UID последнего снапшота.
    snapshot.lastUID = "20"
    snapshot.current = "20"

    В нашем случае на snapshot0 с UID 18

    snapshot.lastUID = "18"
    snapshot.current = "18"
  6. [Если на пункте 4 потребовалось изменение файла .vmsd] Изменить информаци о количестве снапшотов
    snapshot.numSnapshots = "1" 
  7. [Если на пункте 4 потребовалось изменение файла .vmsd] Если требуется удалить всю информацию о снапшотах, нужно очистить содержимое данного файла.
  8. [Если на пункте 4 потребовалось изменение файла .vmsd] Чтобы изменения были восприняты гипервизором/vsphere необходимо перерегистрировать виртуальную машину в Inventory [1][2]

Исспользуемый источник: Understanding virtual machine snapshots in VMware ESXi and ESX

 

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: