在给虚拟机分配磁盘时,为了不让分配的磁盘立马占用大量宿主机空间,可以使用精简分配(thin provisioning)。虚拟机的磁盘文件大小会随着磁盘中内容的增多而增加,但是却不会随着文件的删除而减少。这是因为操作系统在删除文件时并不会将文件完全删除(用 0 复写删除的内容),而是将该磁盘空间标记为已删除。为了让这部分空间返还给宿主机,仅仅删除是不够的。这篇文章将介绍如何把虚拟机精简分配的磁盘空闲的空间返还给宿主机。
在进行操作之前,请切记有快照的磁盘是不能够被 vmware-vdiskmanager
和 vmkfstools
工具调整的。*
概念
要想返还未使用的空间,首先 VM 必须用 0 复写所有未使用的空间,然后宿主机将用 VMware 自带的工具(vmkfstools
或者 vmware-vdiskmanager
)消减内容为 0 的磁盘空间。
Windows VM 复写未使用空间
在 Windows VM 中,可以使用 SysInternals 工具中的 SDelete
来用 0 复写磁盘中未使用的空间。
|
|
例如,如果要复写 C 盘中的内容的话,则该执行:
|
|
Linux 复写未使用空间
在 Linux 中,可以使用从 /dev/zero
中不断读取 0 并且写入到一个文件中直到把文件系统占满为止的方式来复写未使用的空间。最后会将该文件删除来标记空间为已删除。注意以下命令均应该以 root 权限执行,尤其是复写 root 分区的操作。
第一种方式为使用 cat
命令:
|
|
第二种方式为使用 dd
命令:
|
|
使用 VMware 工具重新调整磁盘大小
在将未使用的空间归零以后,宿主机必须使用 VMware 自带的硬盘工具重新自动调整精简分配磁盘的大小来缩小磁盘体积。
如果宿主是 VMware Workstation Pro,则可以使用以下命令:
|
|
如果宿主是 ESXi,则可使用以下命令:
|
|
参考文章
- https://community.hitachivantara.com/s/article/reclaim-disk-space-from-thin-provisioned-vmdk-files-in-esxi-server
- https://communities.vmware.com/thread/546700
April 4, 2022 追加
新的 VMware Workstation 新增了一个 Compact Disk 功能,大概不需要用 vmkfstools
的命令行来精简磁盘了,可以直接在 GUI 里进行最后一步操作。
最后修改于 2020-01-12