当前,虚拟化解决方案已经在数据中心普及应用,帮助我们整合资源、节约成本,提升可用性,可以更加灵活调配基础架构资源。作为数据中心管理员,在享受虚拟化带来的红利的同时,也不免有一些担忧:假如虚拟机因为故障无法开机了怎么办?虚拟机中的重要数据还能否找回?
今天,我们就借助一个具体案例来分析一下。
前段时间,我司受理了一个客户请求,客户的服务器因为意外断电,导致部分虚拟机无法正常启动。其中一台虚拟机运行着重要的业务系统,并存储有重要数据,且虚拟机没有备份副本可供恢复,因此必须进行修复。
客户在找了多家服务商修复无果后,最后找到了我们。经过分析和处理,最终成功帮助客户修复所有受损虚拟机文件,实现虚拟机正常开机,全部数据正常可用。
经此案例,我们对虚拟机无法启动的问题进行了总结分析,今天把经验分享给大家。
总结起来,虚拟机无法启动,无非是下面这几种原因:
|
|
本篇先来介绍前面三种故障原因:
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非正常关机,如突然断电、意外宕机、出现存储故障、重新构建RD或执行磁盘更换后等情况,导致部分元数据没有正常提交,进而引起文件错误。
发生这种故障时,一旦你将虚拟机从vCenter清单中移除了,可能就无法再重新注册了,会提示拒绝访问或I/O error。而且,无法对虚拟机文件进行操作,比如:复制、移动、克隆、下载等操作,均无法执行。
上面的案例就属于这种情况。
此时,基本就可以判定,是元数据错误导致的文件系统或底层逻辑卷出问题了。到了这种程度,传统的解决办法都已经无效了,需要对文件系统和底层逻辑卷进行修复,才可以解决元数据错误。
对于这种问题,VMware同样提供了工具来进行元数据的扫描和修复,就是vSphere On-disk Metadata Analyzer (VOMA),它可确定并修复影响文件系统或底层逻辑卷的元数据损坏事件。
下面是VOMA工具的功能介绍:
通过VOMA对虚拟机所在的LUN进行数据一致性检查和修复,可以修复大部分元数据错误,在修复完成后,虚拟机就可以正常开机了。