VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间
工作中由于前期规划不足,导致磁盘空间分配较大,而且是厚置备。后期不再需要时,无法把用不到的空间释放出来,造成空间浪费。经过摸索和实验验证,总结出来一套方法。
风险提示:这个方法在我的环境中验证通过了,但不代表适用于所有情况,生产环境中务必慎重!
环境:Esxi 6.5,vCenter 6.5 U1e,Ubuntu 16.04
由于初始分配给Ubuntu 16.04虚拟机的硬盘空间是2T,后期数据量加大需要增加空间时,发现分区表不是GPT,无法超过2T。
导致已在vCenter里给虚拟机增加的空间浪费,也就是下图中的这个数字,只能调高,不能调低。
VMware官方对于这种情况提供了一种解决办法:通过迁移,改变虚拟磁盘格式,从“厚置备”改成“精简置备”,从而减小实际占用的空间。
官方网址:https://kb.vmware.com/s/article/2014832
通过官方的解决办法进行处理,如下图所示,结果喜忧参半
喜的是实际占用的空间确实减小了,忧的是减小的空间仅仅是未分配的unallocated这部分,前面已分配的空间,虽然文件已经删除了,但并没有减小。
通过查找各种资料,想到了一种方法,通过如下实验进行验证。
1.给虚拟机分配40G的厚置备硬盘空间并安装系统,安装完毕后不进行任何操作,直接关机。
2.关机后迁移虚拟机,虚拟磁盘格式从“厚置备”改成“精简置备”,已用空间减小到6GB,说明在没有写入数据的情况下,通过官方的方法是可以减小实际占用空间的。
3. 再次迁移虚拟机,把虚拟磁盘格式从“精简置备”改成“厚置备”,然后拷贝大文件把硬盘空间填充满。
4.把大文件删除,关机后迁移虚拟机,虚拟磁盘格式从“厚置备”改成“精简置备”。可以看到,虽然删除了大文件,但通过迁移的方式也仅仅能回收没有写入过数据的很小的一块空间。
5.用SystemRescueCD启动虚拟机,减小/分区的大小
fdisk –lu #查看磁盘分区情况
e2fsck –f /dev/sda1 #检查文件系统
resize2fs /dev/sda1 10G #把文件系统大小调整为10G
parted /dev/sda #使用parted调整硬盘分区,注意是/dev/sda
(parted)resizepart 1 12G #调整分区大小,1代表/dev/sda1
#注意:parted分区大小计算方式不同,所以多留一些空间防止数据丢失
resize2fs /dev/sda1 #调整文件系统大小,使之与分区大小相匹配
6.重启,从本地硬盘启动,查看磁盘分区大小,可以看到/dev/sda1已经被压缩了。
7.在未分配的空间新建一个分区,然后全部置零
dd bs=64k if=/dev/zero of=/dev/sda2 #bs表示每次写的块的大小
在Gparted中可以看到File System变成了unknown
删除/dev/sda2,使之变成unallocated
8.关机后迁移虚拟机,把虚拟磁盘格式从“精简置备”改成“厚置备快速置零”。
之所以要多做这么一步,是因为上面的操作只是在把操作系统里把未使用的空间置零了,虚拟机并不知道,因此需要通过这步操作,让虚拟机把未使用的空间也置零。
9.再次迁移虚拟机,把虚拟磁盘格式从“厚置备”改成“精简置备”,可以看到已用空间减小到10GB,也就是实际占用的空间确实减小了。
通过上述实验,基本上验证了虚拟机回收空间的标准:
- 分配后尚未写入过数据;
- 分配后写入过数据,但在操作系统和虚拟机里均进行过置零操作。
以上方法回收的是Linux系统的空间,理论上Windows系统也可以通过这个方法回收,只是用到的软件不同。
由于这台占用了6T空间的虚拟机马上要迁移到物理机了,空间有限的问题不是很紧迫,因此等到迁移完成之后再测试,后面再把操作结果补充上来。
前期的规划很重要,没做好规划,后期就要浪费很多时间来填坑。
VMware虚拟机,从厚置备改成精简置备,并减小硬盘的实际占用空间的更多相关文章
- VMware厚置备延迟置零,厚置备置零,精简置备具体解释
本文具体介绍VMware厚置备延迟置零,厚置备置零,精简置备的概念及选择使用 1.厚置备延迟置零(zeroed thick) 以默认的厚格式创建虚拟磁盘.创建过程中为虚拟磁盘分配所需空间.创建时不会擦 ...
- VMware vSphere中三种磁盘:精简置备/厚置备置零/厚置备延迟置零
VMware磁盘格式分类. 厚置备延迟置零.厚置备置零和精简置备1.厚置备延迟置零(zeroed thick) 以默认的厚格式创建虚拟磁盘.创建过程中为虚拟磁盘分配所需空间.创建时不会擦除物理设备上保 ...
- VMware厚置备延迟置零,厚置备置零,精简置备详解
1.厚置备延迟置零(zeroed thick) 以默认的厚格式创建虚拟磁盘.创建过程中为虚拟磁盘分配所需空间.创建时不会擦除物理设备上保留的任何数据,但是以后从虚拟机首次执行写操作时会按需要将其置零. ...
- 关于vmware虚拟机的ova/ovf转换成aws上的AMI镜像
很多时候,我们会有这样的需求,需要将DC中vmware虚拟化的服务器,迁移到aws上,我们就得先将vmware虚拟机导出,然后转换 关于vmvare虚拟的导出备份,一般有ova(Open Virtua ...
- VMware虚拟机安装Linux英文改中文系统并更新yum安装输入法
今天用VMware Workstation11时,出现了个"难题",在选择了系统盘后(我用iso镜像centos6.5)VMware会提示高速安装,安装后系统是英文版,并且找不到系 ...
- VMWare ESX/ESXi 虚拟机硬盘的厚置备(Thick Provision)与精简置备(Thin Provision)的转换
VMWare ESX/ESXi 有两种硬盘置备方式,厚制备(thick)和精简置备(Thin) 有时可能会由于性能问题或磁盘空间需要将虚拟机磁盘在两种模式间进行互转,虽然在虚拟机配置页面是没有办法修改 ...
- ansible创建vmware虚拟机
环境:vmware 虚拟化需求:如果业务部门一次提几十台甚至几百台虚拟机需求,一个个的手动创建肯定耗时 使用ansible vmware_guest 创建虚拟机,避免手动一台一台创建的纯手工 工作废话 ...
- VMware 虚拟化编程(13) — VMware 虚拟机的备份方案设计
目录 目录 前文列表 备份思路 备份算法 备份细节 连接到 vCenter 还是 ESXi 如何选择快照类型 是否开启 CBT 如何获取备份数据 如何提高备份数据的传输率 备份厚置备磁盘和精简置备磁盘 ...
- VMware虚拟机创建安装之后不出现VMnet1和VMnet8虚拟网卡
大家可能遇到过安装虚拟机之后,不出现这两张虚拟网卡,造成一系列的网络问题 VMware虚拟机无法将网络改为桥接状态 本人亲试可行的解决办法 首先把你之前安装的VMware虚拟机卸载,清理得一干二净: ...
随机推荐
- ffplay常用命令
一.ffplay 常用参数 ffplay不仅仅是播放器,同时也是测试ffmpeg的codec引擎,format引擎,以及filter引擎的工具,并且也可以做可视化的媒体参数分析,可以通过ffplay ...
- 设置ImageView显示的图片铺满全屏
转自:http://m.blog.csdn.net/blog/wjwj1203/32334459 为适应不同屏幕的手机,ImageView显示的图片可能不铺满屏幕,如果定高的话,两边可能会出现空白 ...
- 利用Cglib实现AOP
前文讲了, 可以利用Spring, Guice等框架提供的容器实现AOP, 如果想绕过容器, 直接注入Class, 可以利用Cglib为对象加上动态代理,实现代码切入, 但是每次调用比较繁琐, 因此我 ...
- Hadoop 2.6.0-cdh5.4.0集群环境搭建和Apache-Hive、Sqoop的安装
搭建此环境主要用来hadoop的学习,因此我们的操作直接在root用户下,不涉及HA. Software: Hadoop 2.6.0-cdh5.4.0 Apache-hive-2.1.0-bin Sq ...
- JavaIO 总结
另外参考文章:http://www.ibm.com/developerworks/cn/java/j-lo-javaio/ 一. File类 file.createNewFile();file.del ...
- 将["a"=1,"b"=2] 转为对象
var obj = {}; var arr = ["a=1","b=2","c=3"]; for (var x in arr){ var s ...
- 关于字符latin capital letter sharp s "ß"( U+1E9E)显示的问题
今天测试产品时,遇到德语字符ß在网页上显示为”SS",查了一些相关资料发现这个字符一般用“ss"或"SS"取代. 需要注意,此字符与它的小写形式不同,小写字符l ...
- vue.js设置、获取、删除cookie
项目需要前端获取后台返回的cookie,并以此作判断.我是在main.js入口文件下使用的 具体代码: new Vue({ el: '#app', router, template: '<App ...
- 记录Window系统下myeclipes连接linux下mysql所出现的一个bug
记录myeclipes远程连接mysql所出现的一个bug 今天在玩框架hibernate时,出现一个非常费解的bug,话不多说,先看bug Access denied for user 'root' ...
- HashSet源码分析
在java集合中有一种集合Set(集),他有两个实现类,分别是HashSet,TreeSet.下面仔细分析HashSet源码. 看了HashSet的源码就会发现HashSet的底层实现是利用HashM ...