购置服务器时为了省钱,硬盘配置的太TM小了。现在来看根本不够用,幸好是安装的ESXi, 不至于重装系统。下面就开始折腾 ESXi 6.5 主机与虚拟机扩充硬盘空间。
首先要把 Guest OS 迁移到另一台 ESXi 上,安全的方法还是克隆它,一来是怕迁移时间太久,影响白天的生产。二来如果迁移失败,那就只能写辞程了。所以,就取克隆的方法。
克隆 Guest OS 需要瘦身,这是个大学问。如果不进行减肥,400G的GuestOS就要克隆一夜时间,12小时。说的是 vmdk 大小而不是 Guest OS 使用的大小。超过400G就会影响生产(白天正常使用)。现在遇到的问题是 windows server 2008 R2 的WEB服务器已经使用 1T 的空间,尽管把系统里该转移该删除的东西都清理,vmdk 并没有减少。因为对于ESXi 来说,VMware 提供了精简置备(Thin Provision)方式,使得磁盘占用按需分配。但是,虚拟机内删除文件虽然释放了 Guest OS 的可用空间,但却不会使得 vmdk 文件相应地缩小。随着虚拟机的使用,vmdk 势必不断增大。对于桌面级 VMware Workstaion,可以通过 Disk Cleanup 功能或者 vmware-tools 的命令来释放未用空间,而 ESXi 并没有直接提供这个功能。精简置备的 vmdk 进行瘦身,我们需要在 Guest OS 上进行准备工作,对未使用的磁盘进行置零操作。
对于Linux虚拟机,可以使用 zerofree 工具。对于 Windows 虚拟机,我们需要用到另一个工具:SDelete64.exe 。将 SDelete64.exe 复制到虚拟机中,执行:
SDelete64.exe -z C:
等程序运行到 100% 时,总里程还没一半呢!
我的D盘分区是1T,SDelete64跑到100%时用的12个小时,而从100%到结束,用了36个小时。期间在D盘上生成了一个SDELTMP000000的文件,逐渐增大,最后估计增到900G应该。凌晨5点起床看时,已经跑完了。
压缩 VMDK在 vSphere Client 中,将虚拟机关机。找到该虚拟机对应的主机,开启主机的 SSH 登录。随后,登入主机,在 /vmfs/volumes 下找到虚拟机目录,查看其对应的 vmdk 文件。
注意,这里面可能会有以 -flat 和 -ctk 等后缀的 vmdk,这不是我们要操作的,只有不带后缀的 vmdk 需要进行操作。执行命令:```
vmkfstools -K 主机名称.vmdk
再次开启虚拟机,存储使用那里已经是压缩后的大小了。
2018.6.20