VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

时间:2022-05-26 10:35:22

工作中由于前期规划不足,导致磁盘空间分配较大,而且是厚置备。后期不再需要时,无法把用不到的空间释放出来,造成空间浪费。经过摸索和实验验证,总结出来一套方法。

风险提示:这个方法在我的环境中验证通过了,但不代表适用于所有情况,生产环境中务必慎重!

环境:Esxi 6.5,vCenter 6.5 U1e,Ubuntu 16.04

由于初始分配给Ubuntu 16.04虚拟机的硬盘空间是2T,后期数据量加大需要增加空间时,发现分区表不是GPT,无法超过2T。

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

导致已在vCenter里给虚拟机增加的空间浪费,也就是下图中的这个数字,只能调高,不能调低。

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

VMware官方对于这种情况提供了一种解决办法:通过迁移,改变虚拟磁盘格式,从“厚置备”改成“精简置备”,从而减小实际占用的空间。

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

官方网址:https://kb.vmware.com/s/article/2014832

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

通过官方的解决办法进行处理,如下图所示,结果喜忧参半

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

喜的是实际占用的空间确实减小了,忧的是减小的空间仅仅是未分配的unallocated这部分,前面已分配的空间,虽然文件已经删除了,但并没有减小。

通过查找各种资料,想到了一种方法,通过如下实验进行验证。

1.给虚拟机分配40G的厚置备硬盘空间并安装系统,安装完毕后不进行任何操作,直接关机。

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

2.关机后迁移虚拟机,虚拟磁盘格式从“厚置备”改成“精简置备”,已用空间减小到6GB,说明在没有写入数据的情况下,通过官方的方法是可以减小实际占用空间的。

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

3. 再次迁移虚拟机,把虚拟磁盘格式从“精简置备”改成“厚置备”,然后拷贝大文件把硬盘空间填充满。

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

4.把大文件删除,关机后迁移虚拟机,虚拟磁盘格式从“厚置备”改成“精简置备”。可以看到,虽然删除了大文件,但通过迁移的方式也仅仅能回收没有写入过数据的很小的一块空间。

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

5.用SystemRescueCD启动虚拟机,减小/分区的大小

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

fdisk –lu              #查看磁盘分区情况

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

e2fsck –f /dev/sda1        #检查文件系统

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

resize2fs /dev/sda1 10G        #把文件系统大小调整为10G

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

parted /dev/sda                                   #使用parted调整硬盘分区,注意是/dev/sda

(parted)resizepart 1 12G                    #调整分区大小,1代表/dev/sda1

#注意:parted分区大小计算方式不同,所以多留一些空间防止数据丢失

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

resize2fs /dev/sda1         #调整文件系统大小,使之与分区大小相匹配

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

6.重启,从本地硬盘启动,查看磁盘分区大小,可以看到/dev/sda1已经被压缩了。

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

7.在未分配的空间新建一个分区,然后全部置零

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

dd bs=64k if=/dev/zero of=/dev/sda2           #bs表示每次写的块的大小

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

在Gparted中可以看到File System变成了unknown

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

删除/dev/sda2,使之变成unallocated

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

8.关机后迁移虚拟机,把虚拟磁盘格式从“精简置备”改成“厚置备快速置零”。

之所以要多做这么一步,是因为上面的操作只是在把操作系统里把未使用的空间置零了,虚拟机并不知道,因此需要通过这步操作,让虚拟机把未使用的空间也置零。

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

9.再次迁移虚拟机,把虚拟磁盘格式从“厚置备”改成“精简置备”,可以看到已用空间减小到10GB,也就是实际占用的空间确实减小了。

VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间

通过上述实验,基本上验证了虚拟机回收空间的标准:

  1. 分配后尚未写入过数据;
  2. 分配后写入过数据,但在操作系统和虚拟机里均进行过置零操作。

以上方法回收的是Linux系统的空间,理论上Windows系统也可以通过这个方法回收,只是用到的软件不同。

由于这台占用了6T空间的虚拟机马上要迁移到物理机了,空间有限的问题不是很紧迫,因此等到迁移完成之后再测试,后面再把操作结果补充上来。

前期的规划很重要,没做好规划,后期就要浪费很多时间来填坑。