ESXi手动缩小vmdk虚拟机硬盘大小
折腾虚拟机的时候发现虚拟机硬盘竟然只支持扩大不支持缩小……虽然理论上来讲hypervisor确实不知道客户机的文件系统分布,但是这也太反人类了……所以还是手动来吧~
官方方法
据说vmtools有命令 sudo vmware-toolbox-cmd disk shrinkonly
可以缩小,但是我这虚拟机服务开的比较多会报错
1 | The shrink feature is not available, |
如果能用那最好了,不能用可以尝试下面的手动方法。
手动缩小
以下方法在ESXi 7.0 U1中测试通过,操作前务必备份数据。
分区
首先我们需要把空余空间全部移到虚拟硬盘尾,这样在shrink的时候才不会丢数据。
- Windows可以使用自带的磁盘管理器或者高级一点的DiskGenius,划分出需要减少的磁盘空间,注意务必确保划分出的【未分配】黑色块在最右侧(磁盘尾)。
- Linux可以使用GParted GUI镜像分区,一样需要确保空闲空间在磁盘尾即可,注意如果不想改引导的话不要动/boot分区的起始位置(分区的时候也有提示的)
缩小磁盘
开启ESXi ssh,登陆上去cd到要缩小的vmdk的目录,
vi src.vmdk
(注意不是src-flat.vmdk
),大概长这样1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# Disk DescriptorFile
version=1
encoding="UTF-8"
CID=f0e8b00f
parentCID=ffffffff
createType="vmfs"
# Extent description
RW 536870912 VMFS "src.vmdk"
# The Disk Data Base
#DDB
ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "33418"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "af809bef9bb4064db539125bf0e8b00f"
ddb.toolsInstallType = "2"
ddb.toolsVersion = "10358"
ddb.uuid = "60 00 C2 92 4e 02 fb bc-bb f3 dc 07 32 c2 c0 85"
ddb.virtualHWVersion = "14"需要改两个地方,一个是RW那一行,我这是256G(
256*1024*1024*1024/512=536870912
),改成你的目标大小比如128G就是268435456,还有一个是ddb.geometry.cylinders
,这个我也不会算,可以新建一个相应大小的虚拟机cat一下看看这个值是多少,测试过的几个是- 16G=2088
- 32G=4177
- 128G=16709
- 256G=33418
我们需要把-flat文件缩小,用自带的工具
vmkfstools -i src.vmdk dest.vmdk
将原来的vmdk克隆一份,多余的空间会被自动去除将原来的
src.vmdk src-flat.vmdk
删除,将dest.vmdk dest-flat.vmdk
重命名为src.vmdk src-flat.vmdk
再次
vi src.vmdk
,将RW那一行的文件名改成src-flat.vmdk
,如果有多一行deletable
的需要删掉。
刷新数据
回到ESXi界面,右击【虚拟机-快照-整合硬盘】,然后进去刷新下就能看到硬盘已经缩小了~ 开机测试下就行了