找回丢失的虚拟机

2016-11-26 11:27
网络安全和信息化 2016年6期
关键词:磁盘阵列扇区磁盘

引言: 由于中心机房的UPS故障,导致服务器突然掉电。电力恢复供应后,开启VMware ESXi 5.5主机,用vSphere Client登录该主机后,发现里面的虚拟服务器一台都不见了。经过一天的排查,终于找到虚拟机不见的原因,并成功解决了问题。

由于中心机房的UPS故障,导致服务器突然掉电。电力恢复供应后,开启VMware ESXi 5.5主机,用vSphere Client登录该主机后,发现里面的虚拟服务器一台都不见了,着实惊出了冷汗。单位主要的一些服务以及数据都部署在了虚拟机上,虚拟机找不回来,不但意味着无法提供正常的网络服务,连数据都可能丢了。经过一天的排查以及资料查阅,终于找到虚拟机不见的原因,并成功解决了问题。

故障现象

为了进行资源整合减少服务器数量,前一段时间对中心机房的服务器进行了虚拟化,在一台DELL PowerEdge R720(128G内存)服务器上部署了VMware ESXi 5.5,两 台DELL MD3600F光纤通道存储阵列通过光纤连接服务器,在ESXi上两台存储阵列分别为一个数据存储盘,并建立了7台虚拟机为单位提供各种网络服务,虚拟机的数据都是存放在磁盘阵列上。

图1 存储标识中没有storage1、storage2、data

图2 磁盘阵列列表,每个设备名称对应一个逻辑盘

最近,一次UPS故障引起断电后,重新开启服务器和存储阵列,用vSphere Client登录ESXi主机后,发现该主机下的虚拟机列表都变成灰色了,无法开机,选中任何一台虚拟机都无法进行任何操作。

在vSphere Client中选择当前主机进入配置——存储器,这里有两个标签“数据存储”和“设备”,发现“数据存储”下只有本机存储标识database1,没有两个磁盘阵列的存储标识storage1和 storage2(如图1)。但是在“设备”里有两个磁盘阵列的列表(如图2),其中设备名称尾号为“79”的应该是磁盘阵列1的逻辑盘,标识应该是storage1,名称尾号为“3d”的应该是磁盘阵列2的逻辑盘,标识应该是storage2,名称尾号为“49”的是磁盘阵列1上分出来的一个逻辑盘,用来做测试,无有用数据,标识为data。正常情况下每个设备都对应着一个数据存储的标识,供ESXi存储数据。

故障排查

根据上述现象,可以判断出,两个磁盘阵列的设备是存在的,但是ESXi无法认出该设备的分区,没法把它当做一个现有的存储来使用,而虚拟机的文件都存放在磁盘阵列上,因此现在主机里的虚拟机都找不到它们对应的虚拟机文件,才会显示灰色,无法操作。在对磁盘阵列、光纤、光纤接口等硬件设备进行排查后,发现都没有问题。最后我们注意到,有数据存储标识的服务器本机存储在设备标签下有分区信息显示(如图3),而名称尾号为“49”的设备则没有主分区信息显示。

由此推断,ESXi无法认出磁盘阵列提供的逻辑盘,是由于停电导致分区表丢失,ESXi用作数据存储的分区一般是VMFS分区,即VMFS分区表丢失导致磁盘无法被ESXi认出,无法读取虚拟机文件,引起虚拟机的丢失。

故障解决

首要任务就是修复逻辑盘的VMFS分区表,以便ESXi能够读取逻辑盘,找到虚拟机文件。

图3 服务器本机存储的分区信息

一般情况下,存储标识没有显示的话,通过vSphere Client登录主机后,选择主机→配置→存储器,在“数据存储”标签下,用“全部重新扫描”和“添加存储器”来找回没有显示标识的设备和加载新的存储器。但是在VMFS分区表丢失的情况下,进行重新扫描没有任何作用,而用“添加存储器”确实可以发现两个磁盘阵列的逻辑盘,但是下一步系统会提示这是全新的存储器,要进行格式化等操作。这可万万不行,虚拟机的文件都在里面,只能另想方法了。

经过查阅资料和研究,决定使用partedutil命令来对VMFS分区表进行修复。首先用vSphere Client登录VMware ESXi 5.5主 机,进入配置→存储器,查看系统的数据存储和设备,设备名称是待一会要用到的。用SSH2登录VMware ESXi 5.5主机,使用命令对磁盘进行操作,SSH服务可以在vSphere Client中的配置→安全配置文件里进行开启,在此不累述。在以下我们以修复设备图2中的逻辑盘naa.6b083fe000e6b8a6 0000038a5712bf49的分区表信息并使之显示正常的数据储存标识为例,来讲述VMFS分区表丢失后的修复过程。

以下操作在用SSH2登录主机后操作。

1.查看存在的磁盘设备及分区

ls /vmfs/devices/disks/

该命令主要是查看现有磁盘的分区信息(如图4),我们只要看前面一列的磁盘名称即可,后面有冒号1,说明这是该磁盘的第一个分区,依次类推。可以看出来naa.6b083fe000e6b8a60000038a5 712bf49磁盘下没有分区,其他磁盘下都有一个或多个分区,接下来就要修复该磁盘的分区表,当然我们得事先知道在坏掉以前它是几个分区的,此处我们的逻辑磁盘在分区表坏掉前都是一个分区的(在进行截图时,名称尾号为“79”和“3d”的逻辑盘的分区表已经用此文中的方法修复,因此它们下面都有分区信息)。

2.用partedutil查看某个磁盘上的分区表

确认具体某个逻辑盘具体的分区表的体信息,命令:

partedutil getptbl"/vmfs/devices/disks/naa.6b083fe000e6b53c0000025b 54a8d579"

除了逻辑盘的名称naa.6b083fe000e6b53c0000025b 54a8d579,其他都是固定格式,此命令可以分别查看有分区信息的逻辑盘和分区表丢失的逻辑盘,如图4中:

gpt代表分区格式。

4348570表示磁盘的柱面数。

255表示磁头数。

63表示每磁道扇区数。

69859790554总扇区数。

“1 2048 69859790520 AA31E02A400F11DB95900 00C2911D1B8 vmfs 0”代表了一条分区表信息,“1”表示第一个分区,“2048”表示起始扇区,“69859790520”表示结束扇区,“AA31E02A40 0F11DB9590000C2911D1B8 vmfs 0”表示这是VMware的数据存储分区,VMFS分区,“0”是分区属性(一般都是0),这些是固定格式。

图4 查看所有磁盘的分区信息以及具体某个盘的分区表

从图4可以看出,naa.6 b083fe000e6b8a60000038a57 12bf49这个逻辑盘没有分区表了,下面就来修复它的分区表。

3.用partedutil取得磁盘可用的扇区数

partedutilget Usable Sectors /vmfs/devices/disks/naa.6b083fe 000e6b8a60000038a5712bf49

因为一个磁盘在ESXi中是从2048扇区开始使用的,还要去掉VMFS分区占用的头部34个分区,所以还是用这条命令获取一下可用的扇区数比较合理。注意,这条命令中的参数getUsableSectors严格区分大小写。此命令执行后得到数据“3420971486”,代表该磁盘可用的扇区到“20971486”,这个数据稍后的命令参数中要用到。

4.重建VMFS分区表

得到了磁盘名称,磁盘可用的扇区数,就可以用命令partedutil来重建VMFS分区表了。本例中,磁盘名称为naa.6b083fe000e6b8 a60000038a5712bf49,最大可用扇区“20971486”,整个逻辑盘只有1个分区,其他参数都是固定的。

命令为:

执行后出现提示:

表示在这个逻辑盘上的VMFS分区建立好了。

至此,磁盘丢失的分区表已经修复。回到vSphere Client,在图1界面进行“全部重新扫描”应该会出现修复回来的数据储存标识,只要再把该存储标识进行“挂载”即可正常使用了。进行“浏览数据存储”,看到数据文件都在。利用同样的方法,修复了其他两个逻辑盘,每个设备对应的数据存储标识都正常显示了(如图5),丢失的虚拟机又回来了,正常开机,数据完好。

经验总结

分区虽然修复了,虚拟机也找回来了,但还是心有余悸,有两点体会特别深刻。

1.中心机房的设备与环境同样重要。不能光顾着更新服务器、交换机等设备,而忽略UPS、空调等环境设备,突然的断电,对服务器、磁盘阵列损伤极大,轻者分区丢失,重者直接硬件损坏。

图5 修复后每个设备对应数据存储标识都正常显示了

2.不断学习,不断进步。对服务器虚拟化可以提升资源利用率、减少能耗、减少物理服务器的数量,但是它有时又不像实际服务器那样看得见摸得到,作为使用者我们应该对虚拟机系统有更深的了解,以便出现问题时能及时找到解决方案。以下是partedutil命令的官方说明,对该命令想进一步了解可以参考。

猜你喜欢
磁盘阵列扇区磁盘
叶腊石聚合成型及其旋转磁盘的制作方法
分阶段调整增加扇区通行能力策略
解决Windows磁盘签名冲突
更换磁盘阵列磁盘
修改磁盘属性
管制扇区复杂网络特性与抗毁性分析
U盘故障排除经验谈
LSIRAIDBIOS实现磁盘阵列重建
磁盘组群组及iSCSI Target设置
基于贝叶斯估计的短时空域扇区交通流量预测