虚拟机删除lck文件后无法启动,根因是虚拟磁盘的UUID与vmx配置文件中的记录不一致,修复思路不是恢复lck文件本身,而是让vmx中的磁盘标识与vmdk重新对齐。
虚拟机删除lck文件后无法启动怎么解决
先别急着重建虚拟机,多数情况下这个故障可用修改配置文件的方式修复,lck文件是VMware虚拟机运行期间生成的锁文件,作用是把磁盘“占住”,防止多个虚拟机实例同时写入同一块虚拟磁盘。
lck文件的锁机制是如何工作的
VMware Workstation和ESXi在虚拟机通电启动时,会在虚拟磁盘目录下生成与vmdk同名的lck锁定文件夹,只要这个锁存在,其他进程就无法打开对应vmdk,物理主机的文件系统在机制上就保证了同一块磁盘只有一个虚拟机实例在使用。
删除lck文件的常见场景有两种:一种是虚拟机异常断电后,锁文件残留导致提示“虚拟机被占用”或“无法打开磁盘”,此时删除lck属于正常的解锁操作;另一种是虚拟机仍在运行或未完全关停时强制删除,这种操作会破坏UUID校验依据,下次启动时VMware会发现“磁盘元数据与配置文件不匹配”,直接拒绝启动。
删除lck后启动报错的典型特征
这类故障的报错信息通常包含三类关键词:
- “UUID已更改,是否重新生成”提示,指明vmx配置与vmdk头部的UUID不一致
- “该虚拟机的一个磁盘已被锁定”提示,实际锁信息已经丢失但校验环节报错
- “文件系统错误”或“磁盘链不一致”提示,多见于快照链较深的虚拟机
VMware虚拟机lck文件删除后打不开的修复步骤
修复前先把虚拟机所在目录完整复制一份备份,操作路径为:找到虚拟机存放目录(默认在
文档Virtual Machines下或自定义存储位置),整体复制到其他分区,这一步非常必要,后续修改配置若出现语法错误,可直接还原。
第一步:读取vmdk头部UUID
用记事本或VS Code打开主磁盘文件(不含“-s001”“-delta”标识的基础vmdk描述文件),头部有一段形如ddb.uuid.vmdk = "6000C29C-xxxx-xxxx-xxxx-xxxxxxxxxxxx"的文本,记下这个字符串,如果开了快照,还需打开最顶层的delta子盘,将其中多个父盘UUID一并记录。
第二步:编辑vmx配置文件
用记事本打开虚拟机目录中的vmx文件,在scsi0:0或ide0:0字段附近添加或修改以下两行配置:
disk.EnableUUID = "TRUE",让虚拟机直接读取磁盘硬件UUIDscsi0:0.uuid = "上面记录的UUID字符串",若IDE接口则改为ide0:0.uuid
保存文件后重新打开虚拟机,VMware会跳过UUID比对环节,直接按配置启动。
第三步:用重新添加磁盘的方式重建关联
如果编辑vmx后仍无法启动,可以右键虚拟机选择“编辑设置”,将现有硬盘移除(注意选“移除”而非“从磁盘删除”),再点击“添加硬盘”→选择“使用现有虚拟磁盘”→指向原来的vmdk文件,这个操作会强制VMware重新读取vmdk头部信息,重新生成磁盘关联记录。
第四步:清理锁目录并重置快照信息
确认虚拟机完全关机后,删除目录下以.lck结尾的所有文件夹,快照信息异常时,可以在快照管理器中删除失效快照条目,让虚拟机的磁盘链路回到单一vmdk状态,降低UUID校验的复杂度。
ESXi与Workstation的lck文件差异及处理差异
不少用户在物理服务器上跑ESXi也遇到同样故障,操作思路类似但细节不同。
VMware Workstation场景
Workstation的lck文件是纯文件锁,删掉后可通过修改vmx恢复,主要风险在于锁被删后若虚拟机仍在运行,会造成两个虚拟机实例同时写入同一磁盘,底层数据损坏概率较高,处理时先确认vmware进程已退出,再执行上述修复流程。
ESXi场景
ESXi的lck文件除了文件锁还包含SCSI预留信息,直接删lck往往无法解除锁状态,常见的恢复路径是:
- 在vSphere Client中取消注册该虚拟机,再重新注册
- 使用SSH登录宿主机执行
vmkfstools -e /vmfs/volumes/datastore/目录/vm.vmdk查看锁持有者 - 若显示被主机自身持有,执行
vmkfstools -U /vmfs/volumes/datastore/目录/vm.vmdk强制解锁
清理完成后,系统会自动重新生成锁文件,无需手动补建。
| 平台 | lck文件性质 | 删除后的恢复方式 | 数据损坏风险 |
|---|---|---|---|
| Workstation | 普通文件锁 | 改vmx或重建磁盘关联 | 较低 |
| ESXi | 文件锁+SCSI预留 | vmkfstools解锁或重启主机 | 较高 |
快照条件下的特殊修复
带快照的虚拟机删除lck后,除了主磁盘,每个快照对应一个delta vmdk文件,它们的父盘UUID链若断裂,启动报错会更复杂,这类情况直接改vmx往往无效,更有效的方法是在快照管理器中删除所有快照(需要足够空间执行提交操作),将多磁盘链合并为单一vmdk,重新走第一套修复流程。
避免lck文件导致启动故障的运维建议
行业共识认为,lck文件相关故障中相当一部分是人为操作不规范所致,锁机制的存在本身是保护数据安全,只要不强行干预,基本不会触发启动失败。
正确关机避免残锁
虚拟机使用“挂起”功能时,vmem文件和lck锁不会完全释放,后续迁移或复制目录前必须选择“关机”而不是“挂起”,物理机重启前,也应在vSphere中维护模式中关闭所有虚拟机,然后从宿主机这一侧断开连接,不要直接重启物理机。
备份策略覆盖意外情况
备份虚拟机的vmdk+vmx两个核心文件即可应对大部分启动故障,备份频率建议与虚拟机数据重要程度匹配,重要业务虚拟机可使用VMware自带的“克隆”功能做冷备,克隆后的虚拟机自带独立UUID,不会干扰原虚拟机运行。
关于虚拟机删除lck文件后无法启动的常见问答
问:删除lck文件后报错“磁盘被锁定”,多次重试仍无法启动,怎么办?
先确认所有VMware相关进程已关闭,删除目录下所有后缀为.lck的文件夹,再检查vmdk文件是否被其他程序(如杀毒软件)占用,若仍有锁报错,执行vmkfstools -U(ESXi)或直接重启宿主机(Workstation)刷新文件句柄状态。
问:lck文件误删后,用快照能恢复吗?
快照不能恢复lck文件本身,但可以绕过修复流程,先创建快照再尝试启动,VMware会基于快照信息重建磁盘关联状态,多数情况下可正常开机,启动成功后,在快照管理器中将该快照删除,让磁盘恢复统一状态。
问:重新使用现有虚拟磁盘后,lck文件会重新生成吗?
虚拟机正常启动后,VMware会在目录下自动创建新的lck文件夹,这是锁机制正常工作的标志,若启动失败则不会生成新锁,此时需检查vmdk头部信息是否被修改过。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/639612.html





