1. 公司的服务器采用ESXi 进行管理. 有时候为了灵活性,需要将虚拟机从ESXi服务器上面导出来. 放置到不同的客户机器上面去. 

2. 但是发现,比如我在linux里面安装了Oracle数据库, 里面还有Oracle数据库的安装文件, 虚拟机df -h 提示占用空间 55G以上, 我删除了所有的垃圾文件, 看到占用文件信息变成了35G左右.

我将虚拟机导出成为 ovf文件,然后使用workstation导入.发现磁盘文件还是接近60G没有大的变化  如下图示:

ESXi以及WorkStation缩减thin provision模式Linux虚拟机磁盘的方法_5g

 

 虚拟机实际的磁盘占用信息

ESXi以及WorkStation缩减thin provision模式Linux虚拟机磁盘的方法_linux_02

 

 3. 最简单的解决办法:

1. 将导出的ovf文件 在workstation 执行导入
就是第一个张图里面的结果.
并且执行开机操作.ESXi虚拟机里面删除完文件之后执行导出,在workstation里面执行导入,并且开机.
执行如下两个命令
dd if=/dev/zero of=/zero.file bs=2M
rm -rf /zero.file
#注意 dd 命令非常缓慢.根据不同机器的性能执行时间不一样.
#方法来源: https://blog.csdn.net/weixin_42741271/article/details/97256803
#注意这个命令 我在ESXi上面的虚拟机执行,直接导致磁盘文件变成了df -h 里面的容量大小(200G), 但是在Workstation虚拟机里面执行,文件仅仅增长了不到1G. 2. 将 workstation的安装目录放到 环境变量里面去 #注意这一边我就是偷懒,不想输入老长一堆的路径用的. #比如默认安装我这边的目录如图示

虚拟机内文件的信息

ESXi以及WorkStation缩减thin provision模式Linux虚拟机磁盘的方法_命令行_03

 

 

ESXi以及WorkStation缩减thin provision模式Linux虚拟机磁盘的方法_linux_04

 

 

3. 进入workstation vmdk 所在的目录执行命令进行shrink
最简单的办法如下:
在地址栏里面输入 cmd 打开命令行就精确定位到当前目录了.

ESXi以及WorkStation缩减thin provision模式Linux虚拟机磁盘的方法_命令行_05

 

 

4. 执行命令
vmware-vdiskmanager.exe -k  xxxx.vmdk

#注意 一定要保证宿主机的磁盘剩余空间大于 vmdk的文件大小.
#shrink的速度比较慢.
#虽然有一个GUI的界面可以shrink磁盘文件,但是我发现linux的情况下或者某一些极端情况shrink是无效的
#使用命令行反而就有效果.
#需要注意一下shrink的速度是比较慢的. 有百分比的进度显示可以参考.
#我这边接近60G的硬盘, 如果不执行 dd 命令的话 shrink无效.并且shrink的时间大约是20分钟. 如果执行了dd命令, shrink的时间大概是15分钟. 硬盘性能差不多 一分钟读取加写入3G左右. 之后的文件是35G大小.

 ESXi以及WorkStation缩减thin provision模式Linux虚拟机磁盘的方法_服务器_06

 执行shrink命令的最终文件大小

ESXi以及WorkStation缩减thin provision模式Linux虚拟机磁盘的方法_文件大小_07