最近巡检中发现,在vCenter管理下的一台vSphere ESXi 中,有出现虚拟机Linux系统内实际磁盘用量与虚拟机磁盘vmdk大小不一致的情况。

在本次处理中也走了不少坑,特在此留贴记录一下,大家有同样的问题可以避坑。

 

问题前期说明及主要表现的现象有如下:

说明:该虚拟主机在初期创建的时候采取的是“精简置备”模式,按照以往经验,实际磁盘占用空间会在初期设定的限定值内、且会随着系统内文件增量的累积而逐渐增长。但总体实际使用空间和vmdk文件所占用的空间相差在5GB以内,一般不会相差太多。

正常原因:导致vmdk文件占用变大的主要原因有:

  1>磁盘快照文件。每次生成的快照都会占用磁盘空间导致占用量变大,这个是正常现象。

  2>正常文件增量。正常的文件增量也是导致占用的磁盘空间变大,同样为正常现象。

  3>历史增量文件扩充导致。系统内历史增量的文件生成后会导致占用的磁盘空间变大,但文件删除后VMware没有对该部分文件进行回收,所以导致了磁盘实际用量大小与vmdk大小𣎴一致的情况。

 

实际情况:巡检发现,虚拟机Linux系统内实际磁盘用量小于虚拟机vmdk文件所占用的空间很多,虚拟机系统内的使用空间在43GB左右,但vmdk文件的大小已经达到了143GB左右。已排除快照的问题。

本次现象原因:本次问题已经排除了磁盘快照和正常文件增量,所以问题从历史增量文件方面着手排查。

 

注:本次处理参考了这篇文章,这篇博文中,针对Windwos系统的磁盘回收确实可以实现,并且操作成功了。

但关于Linux系统的磁盘占用进行回收时出现了无法回收的情况,所以我采取的是将虚拟导出后再导入的方式来处理。

Windows系统虚拟机磁盘回收可参考如下博文:

 


首先是查看虚拟机vmdk文件占用的大小,实际占用是143GB左右。

esxi已制备空间释放 esxi占用空间_自动跳转

进行虚拟机中的Linux操作系统,使用df-h 查看实际用量在43GB左右

esxi已制备空间释放 esxi占用空间_x系统_02

 

缩减前,磁盘使用空间为222GB

esxi已制备空间释放 esxi占用空间_自动跳转_03

 

首先将虚拟机关机,并在ESXi后台中操作导出。

注意:vCenter管理模式下,不可在vCenter中导出,只能进入宿主机ESXi后台操作。

esxi已制备空间释放 esxi占用空间_占用量_04

 

导出的文件:

esxi已制备空间释放 esxi占用空间_自动跳转_05

 

然后将虚拟机取消注册

也可以选择直接删除,然后导入,但保险起见,建议是采取取消注册的方式,后续也是按照取消注册的方式来进行。

esxi已制备空间释放 esxi占用空间_esxi已制备空间释放_06

esxi已制备空间释放 esxi占用空间_自动跳转_07

 

取消注册后,进入对应的磁盘目录,将整个虚拟机系统的目录移动到其它磁盘

esxi已制备空间释放 esxi占用空间_x系统_08

esxi已制备空间释放 esxi占用空间_占用量_09

 

返回vCenter后台,选择部署OVF模板。

也可以直接在ESXi后台中,选择“创建虚拟机-从OVF或OVA文件部署虚拟机”方式来创建。该操作在vCenter后台和ESXi后台的操作方法是一样的。

esxi已制备空间释放 esxi占用空间_自动跳转_10

 

选择本地文件,并全选之前导出的文件,点击下一步。

esxi已制备空间释放 esxi占用空间_esxi已制备空间释放_11

 

确认虚拟机名称并选择需要部署的目标位置:

esxi已制备空间释放 esxi占用空间_自动跳转_12

 

选择目标位置内的ESXi主机

esxi已制备空间释放 esxi占用空间_自动跳转_13

esxi已制备空间释放 esxi占用空间_x系统_14

 

注意:先选择虚拟机系统存放的驱动器位置,再选择“精简置备”。如果步骤反了、精简置备会自动跳转为厚置备,需要重新选择。

esxi已制备空间释放 esxi占用空间_自动跳转_15

 

选择对应的交换机网络

esxi已制备空间释放 esxi占用空间_自动跳转_16

 

再次确认磁位置和模式

esxi已制备空间释放 esxi占用空间_自动跳转_17

esxi已制备空间释放 esxi占用空间_x系统_18

 

执行完毕后将虚拟机开机,并进入linux SSH终端查看

esxi已制备空间释放 esxi占用空间_自动跳转_19

 

重建后再次查看vmdk文件实际占用情况

 

esxi已制备空间释放 esxi占用空间_x系统_20

 

 

重建前后对比

esxi已制备空间释放 esxi占用空间_自动跳转_21

 

 

 

 

说明:如果是虚拟机是WIndows操作系统的,中按照上面提到链接的博文中的方法使用“sdelete.exe”这个软件来辅助来回收,如果是linux操作系统可以考虑采取本博文重建的方式。

在Linux系统中,我自己按照上面博文的方式执行“dd if=/dev/zero of=//zeroes && rm -f //zeroes”命令后并回收了zeroes空间后,再到ESXi主机中对应文件目录下也执行了"vmkfstools -K UAT_APP.vmdk"命令,但发现出现了一些问题空间没有被正确回收。所以才采取了最简单但也是最耗时的方法。