После аварийной перезагрузки компьютера с гипервизором VMware Workstations перестала запускаться часть виртуальных машин с ошибкой блокировки файлов ВМ:
The process cannot access the file because another process has locked a portion of the file Cannot open the disk 'D:\VM\testVM1\testVM1.vmdk' or one of the snapshot disks it depends on.
Ошибка указывает что файлы дисков виртуальной машины (или снапшоты) заблокированы другим процессом. При этом с помощью стандартных средств Windows не удается найти процесс, который заблокировал файл.
Причина проблемы в этом случае в архитектуре блокировок файлов от изменений в VMware Workstation. При запуске виртуальной машины, гипервизор должен заблокировать файлы дисков, чтобы предотвратить к ним одновременный доступ и обеспечить целостность данных. Для всех файлов, которые заблокированы гипервизором в данный момент в текущем каталоге создается новая папка с именем файла и суффиксом .lck. В этом каталоге будут хранится lck файлы устройств. Наличие lck файлов указывает процессам VMware, что данный файл используется.
При выключении ВМ, эта блокировка снимается и каталоги .lck удаляются. Однако, если хост с гипервизором VMware перезагрузился нештатно, файлы ВМ останутся заблокированными. При при следующей попытке запуска ВМ, гипервизор будет считать, что файлы ВМ используются другим процессом.
.lck
из папки виртуальной машины.Список заблокированных файлов ВМ можно получить с помощью PowerShell:
Get-ChildItem D:\VM\testVM1 -Recurse -Include *.lck|select directory,name
В данном примере видно, что заблокированы файл конфигурации ВМ (
vmx
), файл виртуального диска (
vmdk
), и резервная копия файла подкачки ВМ (
vmem
).
Чтобы снять блокировку, удалите все lck файлы виртуальной машины. После этого ВМ должна запуститься успешно.
Если к ВМ подключено несколько виртуальных дисков, они могут находится в каталоге, который отличается от каталога ВМ. Удалите lck файлы для всех дисков.