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

Wesley13
• 阅读 778

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

风险提示:两种方案的实验都验证通过了,但第一种方案在生产环境中没有成功,如有类似问题,建议采用第二种方案!

环境: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系统也可以通过这个方法回收,只是用到的软件不同。

第二种方案:使用再生龙Clonezilla软件进行备份还原

虽然上文提到第一种方法实验验证通过了,但是在操作生产环境中的机器时,由于各种未知原因(快照、磁盘整合、漫长的数据迁移时间…),导致最后的结果并不理想,虽然成功的把文件系统的大小减小到了55G,但从厚置备转换为精简置备后,并没有达到空间释放的目的。

此处应有图片,晚上截图。

这个方法走不通之后,我想到发生问题之初,曾咨询过一位老哥,当时提到了一个很牛逼的软件,产自宝岛台湾的再生龙Clonezilla。

由于那时我还没有找到减小文件系统大小的方法,而再生龙有如下限制,因此也就没法通过备份还原的方式解决问题。

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

其实现在想来,通过先备份,再还原到精简置备磁盘的方式,应该也是可以的,不过没有验证,而且对于强迫症患者来说,这个方案也并不完美。

所以我的方法是先备份原机器/dev/sda1分区,再新建一台虚拟机,空间比原机器/dev/sda1分区的大小略大(原因参考使用再生龙Clonezilla备份还原Linux系统),然后把备份内容还原到新虚拟机上,之后再把原机器/dev/sdb1分区所在的虚拟磁盘添加到新虚拟机中。

当然,还是要先通过实验验证一番,具体步骤另外写了一篇随笔使用再生龙Clonezilla备份还原Linux系统

实验很成功,效果很满意,接下来就是在半夜没有业务的时候关机调整了。得益于再生龙Clonezilla超高的备份还原效率,30分钟之内完成了全部操作,经过一天的测试,一切正常。

原机器和新机器的配置对比

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

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

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

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

总结:

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

2.大体积虚拟磁盘文件的迁移很费时间,一晚上可能只能干这一件事。

点赞
收藏
评论区
推荐文章
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
小森森 小森森
3天前
租房类微信小程序-基于微信云开发-小程序端集成了管理员后台-一键部署,快速发布
温馨提醒本项目使用MITLicense协议,仅适用于学习交流,并且不提供无偿的、不提供无偿的、不提供无偿的维护修改服务(但可提issue)。若直接将本项目用于商用,因本项目带来的所有后果由使用者自行承担。如需商用升级版,请联系我微信,微信二维码在本博客页面右上角在此奉劝某些人,请尊重作者的劳动成果,做人积点德吧!最近发现有人拿我的源码进行二次分
初识DevOps
基本概念和延伸的思考DevOps,是Development(开发)和Operations(运维)组成的复合词,一般译为“开发运维一体化”。看到这个概念,首先会产生几个问题:开发是什么,哪些环节是开发?运维是什么,哪些环节是运维?开发人员写好代码在本地调试,环境出问题了自己来调整,这是开发工作还是运维工作?系统故障后,运维人员发现是配置文件内容出错了就改成了正
SPDK QOS机制解析
本文关键词:intelspdkbdevqos序:intelspdk软件在存储领域应用广泛。因其可以高效管理linux系统的nvmessd盘,又支持vhostuser协议可以对接qemu虚拟机,在云计算领域通常被用来做本地盘云主机的存储管理软件。如此优秀的一款软件,有必要仔细分析其内部的实现机制,本篇文章主要介绍spdkqos机制。spdk
天翼云高可用虚拟IP(HAVIP)实践
(一)产品概述天翼云高可用虚拟IP(HighAvailabilityVirtualIPAddress,简称HAVIP)是一种可用独立创建和删除的私有网络IP地址资源。通过在VIPCIDR中申请一个私有网络IP地址,然后与高可用软件(如高可用软件Keepalived)配合使用,可用在VPC中搭建高可用的主备集群服务,提高VPC中服务的可用性。限制和说明
一个关于SDWAN单臂部署方案验证的实验
假设有这样一张网络,其中RTA和PCA表示某公司的A分支,通过中国电信CT路由器接入互联网ISP;RTB和PCB表示某公司的B分支,通过中国联通CU路由器接入互联网ISP。DNS(8.8.8.8)表示某互联网应用。为实现A分支私网192.168.2.0/24和B分支私网192.168.3.0/24的互通,现计划使用某厂商的SDWAN方案进打通两个内网,像下图
高性能API网关Kong介绍
本文关键词:高性能、API网关、Kong、微服务1.Introduction是随着微服务(Microservice)概念兴起的一种架构模式。原本一个庞大的单体应用(Allinone)业务系统被拆分成许多微服务(Microservice)系统进行独立的维护和部署,服务拆分带来的变化是API的规模成倍增长,API的管理难度也在日益增加,使用API网关发布和管
SPDK对接Ceph性能优化
关键词:SPDK、NVMeOF、Ceph、CPU负载均衡SPDK是intel公司主导开发的一套存储高性能开发套件,提供了一组工具和库,用于编写高性能、可扩展和用户态存储应用。它通过使用一些关键技术实现了高性能:1.将所有必需的驱动程序移到用户空间,以避免系统调用并且支持零拷贝访问2.IO的完成通过轮询硬件而不是依赖中断,以降低时延3.使用消息传递,以避免IO
3A网络 3A网络
6个月前
理解 virt、res、shr 之间的关系(linux 系统篇)
理解virt、res、shr之间的关系(linux系统篇)前言想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过t
3A网络 3A网络
6个月前
开发一个不需要重写成 Hive QL 的大数据 SQL 引擎
开发一个不需要重写成HiveQL的大数据SQL引擎学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。各种知识表象看杂乱无章,若只是学习