另一个程序已锁定文件的一部分,进程无法访问解决办法
问题描述
在使用虚拟机时,电脑意外死机,重启后打开虚拟机,出现如图问题:
产生原因
在上网查阅资料得知,这是一种虚拟机的保护机制虚拟机在运行时,为防止数据被篡改,会将所运行的文件保护起来。当虚拟机突然崩溃或者强制结束导致异常退出,会导致虚拟机来不及解锁保护文件。这样在下一次运行时就会出现报错问题。
.lck 文件是VMWare软件的一种磁盘锁文件,由于虚拟磁盘(.vmdk)本身有一个磁盘保护机制,为了防止多台虚拟机同时访问同一个虚拟磁盘(.vmdk)带来的数据丢失和性能削减方面的隐患,每次启动虚拟机的时候虚拟机会使用扩展名为.lck(磁盘锁)文件对虚拟磁盘(.vmdk)进行锁定保护。当虚拟机关闭时.lck(磁盘锁)文件自动删除。可能由于各种非正常关闭虚拟机,而虚拟机还没来得及删除系统上的.lck(磁盘锁)文件,所以当下次启动虚拟机的时候出现了报错信息。
解决办法
打开虚拟机所在的路径,本文中的路径为:F:\VM\Ubuntu20
然后找到VM运行日志文件并打开:
在日志中,有这样的描述:
2022-03-20T16:19:04.677+08:00| vmx| I005: FILE: FileLockWaitForPossession timeout on ‘F:\VM\Ubuntu20\Ubuntu20.vmdk.lck\M49596.lck’ due to a local process ‘4548-132922190260635112(vmware-vmx.exe)’
2022-03-20T16:19:04.677+08:00| vmx| W003: FILE: FileIO_Lock on ‘F:\VM\Ubuntu20\Ubuntu20.vmdk’ failed: An attempt was made to load a program with an incorrect format
2022-03-20T16:19:04.677+08:00| vmx| I005: OBJLIB-FILEBE : FileBEOpen: can’t open ‘F:\VM\Ubuntu20\Ubuntu20.vmdk’ : The process cannot access the file because another process has locked a portion of the file (2162692).
大概意思为是这个文件’F:\VM\Ubuntu20\Ubuntu20.vmdk.lck\M49596.lck’导致的错误。
在文件夹中找到该文件,并删除即可。
事实上,虚拟机文件夹中可能有许多以 .lck 为后缀的文件夹:
简单粗暴地将其全部删除,也可以解决问题。