记一次快照引发的血案 – 作者:andiSEC

背景

事情是这样子的,前段时间卖给客户几台服务器,然而客户要求我们帮他安装好VM的虚拟化管理平台(vSphere),说起vSphere安装其实也没有什么难的,而且网上有很多安装教程,所以很快就帮助客户安装完了5台vSphere系统,并给每台机器分别安装了两台cetnos7,直到这里一切都很顺利。然而悲剧的事件起因是客户要求为所有centos做一份快照。小伙伴们是不是很疑惑,一个快照能引发什么血案。

过程描述

宿主机物理磁盘7T,内存64G,所以在安装vSphere的时候也没有想太多,就把物理机的资源平分给了两台centos7,在安装完每台centos之后,启动所有虚拟机也一切正常,本以为做完客户要求的最后一项工作就可以下班了。

然而当我们做完所有快照之后,客户也完成了所有应用系统的部署,最后在copy一个大小为4G的数据库文件时,ESXI报错显示空间不足,关闭虚拟机后就再也无法正常启动了。如下图:

1619663189_608a19551f7b7aab2ead1.png!small

经过多方查证之后,其实这样问题早就有人遇到过了,也说明了解决方案(https://www.cnblogs.com/eagleow/p/12100426.html),有兴趣的朋友可以移步去看看。

在此文中看似解答了大家的疑问,但同时又产生了另一个疑问,假如你的电脑有100G空间,现在分配给虚拟机80G,然后又做了一个快照,之后的所有操作都在这个快照上操作,最后总有一天这个快照会超过20G,那么此时会不会出现空间不足的情况呢?如果会出现,是不是就意味着做一次快照就需要多一个(80G)虚拟机的空间呢?如果真是这样子,那么应该如何解决虚拟机快照空间倍增的问题呢?

file too short

虚拟机快照的问题我们暂且不讲,留大家思考片刻,后面章节中会给大家提供两个答案。为什么在空间不足的系统中copy文件时,linux系统中的关键文件会出现error呢?同时这样的问题应该如何解决呢?如下图所示:

1619663202_608a19620c82bfae5dccb.png!small

要回答这个问题,我们首先要能进入系统,然后再来分析问题的原因,如上图中所示,我们是不能进入系统的(很多同学看到^D认为是可以进入系统继续操作的,其实不然,这里由于缺少关键库文件,所以按^D也不能继续操作)。能通过^D正常运行的提示如下图所示:

1619663211_608a196b7f2b14fa5d636.png!small

废话不多说,要进入系统此时我们需要修改linux的启动顺序(俗称单用户模式),用来绕过默认启动顺序,一般用来修改root密码,或更换不同启动内核来使用的。这里需要一些Linux的启动顺序知识,不懂的同学可以自行百度。

1619663241_608a198928325b77fda2e.png!small

开机时快速按“上”“下”键打断正常启动(一般情况下有3秒的等待时间,为了不错过这3秒钟,我们使用“上”“下”键饶你正常启动)。

1619663261_608a199de03c5ff122c80.png!small

不同类型的linux系统,以及不同版本的系统这里的启动项都不一样,但大致可以依照找“ro”关键词来找。

然后按Ctrl+x进入单用户模式后,使用ls -l /lib64/libtinfo.so.5查看文件(处理故障时没有及时截图,这里用一个类似的故障图代替),如下图,问题很明显,文件大小为0,大家都知道当copy文件时,是先删除同名文件,然后再进行复制,所以当出现copy故障时很有可能导致文件大小为0的情况,那么需要如何解决这个问题呢?

1619663296_608a19c0a2af256b4b7f2.png!small

救援模式

通过CD/DVD加载系统镜像,然后选择CD启动,选择troubleshooting选项,如下图所示:

1619663352_608a19f832fcaa9c51bbb.png!small

再选择救援模式(rescure a centos system),如下图所示:

1619663360_608a1a0034669ddeae294.png!small

然后依次输入“1”继续,

1619663368_608a1a0888a6466802867.png!small

通过命令cp /lib64/libtinfo.so.5 /mnt/sysimage/lib64/复制对应的库文件,然后重启系统,看看系统还会报哪个文件错误,依次解决即可。

如下图可以正常进入系统后,ping不能正常使用,显示libcrypto.so.10文件太短,同上,依次copy即可。

1619663378_608a1a12eb7979dacb40c.png!small

小插曲1

进入单用户模式时,很有可能出现环境变量等参数不正确的情况,如vi/vim不能编辑,如下图:

1619663388_608a1a1c9507e5bd4a8a2.png!small

E437: terminal capability “cm” required

这个错误一般是环境变量TERM没有配置或者配置错误所致。

解决办法:

执行export TERM=xterm;

或者将export TERM=xterm 添加至profile文件中即可。

小把插曲2

1619663398_608a1a266ae930d975586.png!small

ESXI中的datastore里面的文件就相当于workstation里面的vm文件一样,不懂的不能随便修改,修改不当就会导致如下错误:

1619663423_608a1a3f7b4c1da65e73d.png!small正确的做法是在ESXI中删除对应的快照,datastore中对应的快照文件就会被删除,而不是直接操作datastore中的快照文件。

答案1

在“过程描述”章节中给大家留了一个“作业”,这里给大家分享一下答案(或许是小人不才不懂这个知识点,大佬绕过)

1619663446_608a1a5663843c9bcd5b1.png!small

在ESXI中创建虚拟机时默认使用第一种模式,前两种模式在创建虚拟机时会直接占用物理硬盘的真实大小,而第三种模式被称之为“精简模式”或“瘦模式”是workstation默认的模式,创建时只占用物理磁盘的很小空间,随着使用的过程中不断增加。

答案2

可以在创建虚拟机时,只分配操作系统足额的空间即可,其余所需要的存储空间通过挂载磁盘的方法添加,这样即可以满足“精简模式”的性能问题,也能满足多快照的空间浪费问题。

由以上两种答案来看,为了后期能正常创建快照,我们必须重新安装ESXI系统,在安装过程中,我选用了第二种方式。但也因为这次故障,客户不得不多次重新部署业务系统。

心得

从此次事件来看,没有哪一个故障是特别难的知识点,那么是什么原因导致这次血的教训:

创建虚拟机很难吗?当然不难,做IT的哪个电脑上不安装几个虚拟机的。说白了还是自己不够专业,没有了解产品在某个点上的细节。

linux文件copy错误很难吗?其实也不难,因为权限,因为脚本变量失效,因为空间不足等多种原因,都有可能导致文件copy失败,如何避免,我想一是经验,一是细心。

linux单用户和救援模式很难吗?网上教程一大堆,核心问题还是要具备解决访问的思路。

附 vSphere

说起vSphere让我想起第一次接触vSphere的难忘经历, vSphere是什么?vCenter是什么?ESXi又是什么?VCSA,VIM等等这些概念。

VMware vSphere不是特定的产品或软件,它像Microsoft的Office一样是一套软件的总称,里面包含word、excel、ProwerPoint、Access等。VMware vSphere是VMware虚拟化套件的名称。它有两个核心组件ESXi和vCenter Server。ESXi是虚拟化系统(hypervsior),像VMworkstationg一样,可以在其中创建和运行虚拟机。vCenter Server是用于集中化管理多个ESXi主机和池主机资源的服务。

VCSA和VIM是vCenter的安装文件,VCSA是运行在Linux操作系统中的,VIM是运行在windows系统中的。

VCSA全称是VMware-VCSA-all-x.x.x-xxxxxx

VIM 全称是VMware-VIM-all-x.x.x-xxxxxx

来源:freebuf.com 2021-04-29 10:33:54 by: andiSEC

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论