侧边栏壁纸
博主头像
liveJQ博主等级

沒有乐趣,何来开始

  • 累计撰写 171 篇文章
  • 累计创建 67 个标签
  • 累计收到 2 条评论

ESXi 将 Windows 虚拟机未使用的空间回收

liveJQ
2024-05-31 / 0 评论 / 0 点赞 / 133 阅读 / 1,954 字

环境: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 的可用空间也确实空出来了。

参考资料

  1. Esxi虚拟机硬盘压缩及回收空间
  2. ESXi精简置备(Thin)虚拟机的磁盘空间回收
  3. Windows 下 VMware 虚拟机的 vmdk 文件的压缩
  4. VMware vSphere 移除置零块
0

评论区