虚拟机磁盘扩容无法开机 虚拟内存设置过大无法开机的原因

当前,虚拟化解决方案已经在数据中心普及应用,帮助我们整合资源、节约成本,提升可用性,可以更加灵活调配基础架构资源 。作为数据中心管理员,在享受虚拟化带来的红利的同时,也不免有一些担忧:假如虚拟机因为故障无法开机了怎么办?虚拟机中的重要数据还能否找回?
今天,我们就借助一个具体案例来分析一下 。

虚拟机磁盘扩容无法开机 虚拟内存设置过大无法开机的原因

文章插图
前段时间,我司受理了一个客户请求,客户的服务器因为意外断电 , 导致部分虚拟机无法正常启动 。其中一台虚拟机运行着重要的业务系统 , 并存储有重要数据,且虚拟机没有备份副本可供恢复,因此必须进行修复 。
客户在找了多家服务商修复无果后,最后找到了我们 。经过分析和处理,最终成功帮助客户修复所有受损虚拟机文件,实现虚拟机正常开机 , 全部数据正常可用 。
经此案例,我们对虚拟机无法启动的问题进行了总结分析,今天把经验分享给大家 。
总结起来,虚拟机无法启动,无非是下面这几种原因:
  • 虚拟化 OS问题
  • 文件锁定
  • 文件损坏
  • 客户机OS问题
  • 虚拟机未完成任务
  • 网络问题
  • 数据存储问题
  • 用户权限
  • 虚拟机配置问题
  • 虚拟机快照问题
本篇先来介绍前面三种故障原因:
1. 虚拟化OS问题 。
虚拟机无法正常打开电源,会有诸如“内部错误”、“找不到xxx文件”、“策略阻止启动”等提示 。
虚拟机磁盘扩容无法开机 虚拟内存设置过大无法开机的原因

文章插图
这种故障其实是最好排查的,对虚拟机执行一个vMotion,就可以很快定位出问题 。如果vMotion至新的Esxi服务器后可以正常开机,则说明源主机存在问题 。至于问题的原因,可能是兼容性问题、配置问题、版本问题等等,需要具体原因 , 具体分析,在这里我们不多做赘述,如果有感兴趣的朋友,我们可以私下探讨 。
2. 文件锁定 。
为了防止并行更改关键虚拟机文件和文件系统 , 虚拟机处于运行状态时,ESXi 主机对一些虚拟机文件建立了锁定 。在某些情况下,即使关闭虚拟机的电源,这些锁定也不会解除 。因此,其他 ESXi 主机无法访问这些文件,虚拟机也无法打开电源 。
虚拟机磁盘扩容无法开机 虚拟内存设置过大无法开机的原因

文章插图
运行时期间锁定的虚拟机文件包括:
虚拟机磁盘扩容无法开机 虚拟内存设置过大无法开机的原因

文章插图
当虚拟机文件被非正常锁定时,会出现以下一种或几种现象:
    • 打开虚拟机电源导致打开电源任务无限期停留在 95% 。
    • 打开虚拟机电源提示无法锁定VMDK文件 。
    • 虚拟机快照整合失败 。
    • 将现有虚拟机磁盘 (VMDK) 添加到已打开电源的虚拟机失败,并显示以下错误:

虚拟机磁盘扩容无法开机 虚拟内存设置过大无法开机的原因

文章插图
    • 在vmkernel 日志文件中,您会看到类似以下内容的条目:

虚拟机磁盘扩容无法开机 虚拟内存设置过大无法开机的原因

文章插图
对于文件锁定,大体可以分为三类:
文件被其他Esxi锁定、文件被当前Esxi锁定、文件被第三方设备锁定 。
当发生此类问题时,首先要做的就是调查文件锁定,以确定是哪一种锁定 。
下面是调查文件锁定的大概过程:
1)检查虚拟机文件夹内有没有.lck文件 。
虚拟机开机时会自动产生此文件 , 关机后即会删除 , 如果没有正常删除多是因为虚拟机非正常关机,没有正常释放文件锁定 。可以尝试删除.lck文件后重新开机,如果依然无法开机,请继续执行下面的步骤 。
2)通过CLI命令查找持有锁定的主机或服务 。
SSH登录到虚拟机驻留的Esxi,通过PS命令和lsof命令查找锁定 。通过这两个命令,可以找到当前持有文件锁定的Esxi主机或服务/进程 。如果这两个命令执行结果返回的是空值,说明没有针对当前虚拟机的锁定;如果返回非空值,则说明存在针对当前虚拟机的文件锁定 。接下来,就需要根据命令返回结果去确定锁定文件的正主 , 可以再通过vmfsfilelockinfo命令进一步查找持有锁定的所有者 。
如果是被其他Esxi锁定,那将虚拟机vMotion到对应的Esxi上面 , 即可正常开机;如果是被其他服务或进程锁定,那通过Kill命令结束对应的服务和进程即可,也可以执行storage vMotion释放锁定;如果是被当前驻留的Esxi持有锁定,且没有其他锁定的任务或进程,那大概率是文件系统出了问题,需要结合后面要分享的文件损坏处理过程来排查 。
在这里,跟大家介绍一下文件锁定的几种模式:
锁定模式
模式说明
mode 0
无锁定
mode 1
独占锁定
mode 2
只读锁定
mode 3
多写入器锁定
3. 文件损坏 。
这种故障多发生于Esxi非正常关机,如突然断电、意外宕机、出现存储故障、重新构建RAID或执行磁盘更换后等情况,导致部分元数据没有正常提交,进而引起文件错误 。
虚拟机磁盘扩容无法开机 虚拟内存设置过大无法开机的原因

文章插图
发生这种故障时,一旦你将虚拟机从vCenter清单中移除了,可能就无法再重新注册了,会提示拒绝访问或I/O error 。而且,无法对虚拟机文件进行操作,比如:复制、移动、克隆、下载等操作 , 均无法执行 。
上面的案例就属于这种情况 。
此时 , 基本就可以判定,是元数据错误导致的文件系统或底层逻辑卷出问题了 。到了这种程度 , 传统的解决办法都已经无效了,需要对文件系统和底层逻辑卷进行修复,才可以解决元数据错误 。
对于这种问题,VMware同样提供了工具来进行元数据的扫描和修复,就是vSphere On-disk Metadata Analyzer (VOMA) , 它可确定并修复影响文件系统或底层逻辑卷的元数据损坏事件 。
下面是VOMA工具的功能介绍:
虚拟机磁盘扩容无法开机 虚拟内存设置过大无法开机的原因

文章插图
【虚拟机磁盘扩容无法开机 虚拟内存设置过大无法开机的原因】通过VOMA对虚拟机所在的LUN进行数据一致性检查和修复 , 可以修复大部分元数据错误,在修复完成后,虚拟机就可以正常开机了 。