ESXi精简置备(Thin)虚拟机的磁盘空间回收

ESXi精简置备(Thin)虚拟机的磁盘空间回收

背景:有客户提及到之前没合理为虚拟机分配磁盘空间,虚拟机磁盘类型虽然选择精简置备,但是运行一段时间之后,虚拟机OS系统内看到的实际使用空间远小于存储占用空间。

原理:精简置备vmdk文件容量是随着写入置备增加,即虚拟机某个时间使用磁盘达到历史峰值后,即便删除文件,甚至格式化磁盘,vmdk文件所占用的空间依然是历史峰值容量。删除操作是在OS层面进行的,但是虚拟化底层并不能感知这个删除操作,因此也就不会回收。

因为NTFS文件系统的机制,被写入过的文件即使将文件删除系统也不会将磁盘区块置零,下次再写入数据只会优先操作标记为零的区块来写。

解决思路:分两步:

1、使用磁盘置零工具(Windows下有SDelete工具,Linux下有DD工具)将虚拟机未使用的空间填零;

2、使用vmkfstools 移除置零的块,收缩VMDK文件。

下文以一台Win7虚拟机为例,介绍回收过程。

1、前提:开启主机SSH权限,登录到当前虚拟机所在的存储路径,使用

du - sh *
查看当前vmdk所占空间为16.5G

2、在虚拟机操作系统内拷贝文件,拷贝大约5G文件之后,并删除。

3、因为Windows不会自动将已删除的块清零。Windows下可以使用 SDelete工具 填零,SDelete v2.04工具下载,运行sdelete.exe -z 盘符,运行过程比较慢,耐心等待,期间在操作系统中会看见你的磁盘会被占满,等运行完成后又会回到正常的容量。

请注意,在此过程中,该虚拟磁盘vmdk文件将增长到精简置备分配完整大小。

4、第一次查询为拷贝并删除5G文件后vmdk占用的文件大小为21.5G,可见删除文件后并不会减少vmdk的占用空间大小。如下图:

第二次查询为运行 SDelete工具 之后vmdk的占用空间大小为37.3G。(这里注意:一定要确保存储有足够空间以允许该虚拟机磁盘空间增长到其置备的最大值,否则撑爆存储后果不堪设想。)

5、将虚拟机关机,并使用vmkfstools进行磁盘回收。(备注:不关机强制运行vmkfstools会提示Failed to open virtual disk 'new-win7.vmdk': Failed to lock the file (16392);)

vmkfstools -K [disk-name].vmdk
vmdk回收中,有进度百分比。

需要注意:转换过程中需要用到的文件是vmdk磁盘文件,有两种vmdk,一种是”虚拟机名.vmdk”,另一种是”虚拟机名-flat.vmdk”,vmdk文件很小,存放了虚拟磁盘的一些配置信息(如虚拟磁盘数据文件等),实际数据都存放在flat.vmdk文件中,转换时需要使用vmdk文件而不是flat.vmdk文件。

6、直到显示100%表示回收成功,查询vmdk占用空间已经减少到15.5G。

7、打开虚拟机电源,验证虚拟机可正常使用。

注意事项:

回收前请注意备份虚拟机;虚拟机不能有快照,虚拟机需要关机或者将虚拟磁盘移除以确保磁盘未在使用(需要评估停机窗口,回收时间取决于vmdk大小),并确保存储空间足够。

经验证,Storage vMotion过程修改厚置备和精简置备,来回迁移两次,实际并不能回收vmdk空间。

如果以上方式满足不了要求,VMware vCenter Converter也是可行的。

dinghui.org

关注虚拟化及IT技术发展!

11条评论

皮皮鲁 发布于08:50 - 2024年08月7日

请问,既需要执行SDelete,又需要执行vmkfstools么?

    dinghui.org 发布于18:45 - 2024年08月7日

    vmkfstools是针对ESXi的命令,而SDelete是针对Windows虚拟机操作系统的。

yunyi 发布于10:11 - 2023年09月10日

p2v模式是可以的,v2v没有这个选项,还有centos物理机fstab里面uuid方式挂载磁盘的p2v后无法启动,有什么解决办法吗?

    dinghui.org 发布于19:05 - 2023年09月10日

    无法启动可能是GRUB的原因,检查grub.cfg文件,converter会添加一些注释,试着删除掉试试。

yunyi 发布于01:51 - 2023年09月10日

VMware vCenter Converter 6.4 测试了一个centos7虚拟机,同一个集群下,源和目标仅存储位置不一样,发现无法修改磁盘大小,仅能更改精简或者厚置备模式,是这样吗?

    dinghui.org 发布于09:48 - 2023年09月10日

    在默认情况下,Converter转换向导复制所有磁盘并保持其布局。在“Data copy type”下拉列表中选择“Select volumes to copy”,单击“Advanced”,单击“Destination layout”选项卡,在“size/Capacity”选项中,对应的每个磁盘下拉列表有4个选项“Maintain size”(保持原大小空间)、“Min size”(最小空间)、“Type size in GB”、“Type size in MB”。可以把初始磁盘大小扩大或者缩小。

975 发布于22:25 - 2023年09月2日

Awesome article.

433 发布于11:12 - 2023年01月30日

Good article. I absolutely apprsciate tnis site. Keep writing!

L 发布于23:31 - 2022年03月29日

。。我就按了一下怎么四连发

L 发布于23:31 - 2022年03月29日

老师,为啥我在VSAN里面用命令看不到flatvmdk只有0大小的vmdk

L 发布于23:31 - 2022年03月29日

老师,为啥我在VSAN里面用命令看不到flatvmdk只有0大小的vmdk

发表评论


The reCAPTCHA verification period has expired. Please reload the page.