我们内网有一个vmware的集群,以前年少无知,所以vmdk的格式选择了「厚置备延迟置零」,也就是分配多少,vmdk文件就会占用多大的空间,这里的好处是能提供较好的io,但我们虚拟机大部分用来做测试的,所以对io要求不高,而且实际并不需要这么大的空间,这里是第一个问题,我们需要将vmdk转换为「Thin Provisioning」,就是按需使用,并不是一开始就分配所有空间。
后来的虚拟机,我们选用了「Thin Provisioning」,部分虚拟机在一开始写了大量文件,现在不需要存了,需要回收这部分空间,这是第二个问题。
有2个方式
就是迁移虚拟机,只需要转移存储就可以了,当然也可以连主机也迁移了,原来就是在迁移选择存储时,可以在「选择虚拟磁盘格式」下拉菜单中选择「Thin Provisioning」,我感觉原理和vmkfstools是一样的,就是在迁移的过程中,做一次转换
由于我没有使用此方法,直接贴参考资料好了
Cloning and converting virtual machine disks with vmkfstools (1028042)
在转换的时候, 发现部分机器已经回收空间了,但有些没有自动回收,暂时不知道什么原因,下面讲下手动回收。
大概原理是先在虚拟机里标记哪些磁盘块是已经删除了,然后再通过vmkfstools进行回收
可以用
sdelete.exe -z [DRIVE:]
比较粗暴,用dd填满磁盘,再删除文件
由于它是填满磁盘,就是该盘会最终占用分配给它的全部空间,所以要看看该vmdk所在的物理盘是否有足够的空间
# xxx为你需要回收的磁盘挂载点cd xxxdd if=/dev/zero of=zeroes bs=4096 || rm -f zeroes
经过上面2种虚拟机的处理后,就可以ssh到vmware物理机上进行回收
此处注意,vmkfstools要用xxx.vmdk,不要用xxx-ctk.vmk,也不要用xxx-flat.vmdk
# 处理前确认大小du -h xxx-flat.vmdkvmkfstools -K xxx.vmdk# 处理后确认大小du -h xxx-flat.vmdk
处理完后,在「vShpere Client」中,可以选择「刷新存储使用情况」来获取最新的使用情况
磁盘有价,数据无价,请操作前做好备份,操作的时候,再三确认
联系客服