环境:ESXi 6.0,目标虚拟机是一台 Windows10
起因是一开始将全部硬盘空间都分给了这一台虚拟机,后面需要再开虚拟机发现硬盘空间不足,而这台虚拟机实际只使用了不到20%的空间。所以接下来的需求是将该虚拟机压缩大半空间,空出来给其它虚拟机使用。
Windows 压缩卷
先进入目标 Windows10 虚拟机,使用自带的磁盘管理压缩卷,输入需要空出来的空间大小,单位是MB,例如:我需要空出1TB的空间,1x1024x1024。
完成后,我是直接关机了。看其他人好像还有最后一步,使用 SDelete 工具进行置零的操作。
ESXi 命令行操作
开启 SSH 服务后
[root@localhost:/vmfs/volumes/634f4a64-f0a3fada-9d37-f01fafd118df/win10] vmkfstools -K win10.vmdk
vmfsDisk: 1, rdmDisk: 0, blockSize: 1048576
Hole Punching: 100% done.
-K 该选项会对所有清零块取消分配,只留下那些先前分配且包含有效数据的块。生成的虚拟磁盘为精简格式的虚拟磁盘
我是从1.7TB里面空出1TB出来,加上比较差的机械硬盘,花了一个半小时才完成。磁盘置备类型从后置备延迟置零
转换为精简置备
。
完成之后查看文件大小没有变化。
[root@localhost:/vmfs/volumes/634f4a64-f0a3fada-9d37-f01fafd118df/win10] ls -hl
total 1045219336
-rw-r--r-- 1 root root 606.5K Aug 2 13:37 vmware.log
-rw------- 1 root root 1.7T Aug 2 13:36 win10-flat.vmdk
-rw------- 1 root root 8.5K Aug 2 13:36 win10.nvram
-rw------- 1 root root 489 Nov 2 2022 win10.vmdk
-rw-r--r-- 1 root root 0 Nov 2 2022 win10.vmsd
-rwxr-xr-x 1 root root 2.8K Aug 2 13:37 win10.vmx
但是实际使用大小确实缩小了。
[root@localhost:/vmfs/volumes/634f4a64-f0a3fada-9d37-f01fafd118df/win10] du -ah
8.0K ./win10.vmx
996.8G ./win10-flat.vmdk
0 ./win10.vmdk
0 ./win10.vmsd
1.0M ./win10.nvram
1.0M ./vmware.log
996.8G .
一开始编辑win10.vmdk
,想把大小修改为实际大小。也就是将RW 3565158400
修改为RW 253139353.6
。
# Disk DescriptorFile
version=1
encoding="UTF-8"
CID=b0ce61a9
parentCID=ffffffff
isNativeSnapshot="no"
createType="vmfs"
# Extent description
RW 3565158400 VMFS "win10-flat.vmdk"
# The Disk Data Base
#DDB
ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "221920"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "3b3b04d364f6aa4e3715cf36b0ce61a9"
ddb.uuid = "60 00 C2 95 29 1c 78 8a-92 30 b7 75 f4 3e 35 7e"
ddb.virtualHWVersion = "11"
996.8G的实际大小 X 1024 X 1024 X (1024/512) = 253139353.6
修改完需要重新注册虚拟机生效,也确实变成了实际大小,但是打开虚拟机后会出现正在修复,而且最后总会修复失败告终,无法正常进入系统。最后还原回去了,虽然查看虚拟机硬盘属性还是显示分配了1.7TB,但是可以正常进入系统,系统里面是显示的实际的大小,而且 ESXi 那 1TB 的可用空间也确实空出来了。
评论区