需求:因为要做网络实验,需要复制几台虚拟机出来,但是原虚拟机是采用预分配方式分配的50G磁盘,有点太费空间了,并且虚拟机的文件本身也不多,所以想把预分配磁盘改为自增的磁盘分配方式。我的VMware版本是VMware Workstation Pro 16.0,虚拟机镜像是CentOS 7.6
方法:
运行命令
在VMware的安装目录打开powershell,运行命令:
1 | .\vmware-vdiskmanager -r "路径1" -t 0 "路径2" |
路径1是指原虚拟磁盘文件地址,在虚拟机文件目录下,大小大概是1k,路径2是新生成的虚拟磁盘文件地址,这个也放在虚拟机文件目录下,文件名可以自己指定。我的是虚拟机文件目录是在 F:\CentOS 7.6\,原虚拟磁盘文件名是CentOS 7.6.vmdk,指定生成的文件名是CentOS 7.6-flat_1.vmdk,命令如下:
1 | .\vmware-vdiskmanager -r "F:\CentOS 7.6\CentOS 7.6.vmdk" -t 0 "F:\CentOS 7.6\CentOS 7.6-flat_1.vmdk" |
如果出现”Diskname or some other argument is missing.”错误提示,可能是文件地址错误,建议使用绝对地址。
如果出现”VixDiskLib: Failed to initialize PhoneHome library.”错误提示,可能是原虚拟磁盘文件的文件名错误。
正确输出如下:
1 | VixDiskLib: Failed to initialize PhoneHome library. |
修改配置文件
生成了新的虚拟磁盘文件之后,可以明显发现新文件的大小比之前的文件小了很多,此时重启虚拟机还是报错:”vmware提示指定的文件不是虚拟磁盘”.
因为还要更改一下VMware虚拟机配置文件,我的是”CentOS 7.6.vmx”,使用记事本打开,修改”scsi0:0.fileName = 磁盘名称”里面的磁盘名称,为刚刚生成的文件名,就可以了。
确认没问题之后,删掉原来的预分配空间大小的虚拟磁盘文件。
缺陷:
更改了磁盘分配方式之后,原本磁盘的描述文件会不可用,比如我的原本的磁盘描述文件是”CentOS 7.6.vmdk”,这样在克隆的时候,无论是克隆本机还是克隆快照,都会报错:”vmware提示指定的文件不是虚拟磁盘”,这是因为磁盘描述文件引导的那个虚拟磁盘文件已经不存在了(被我删了),而我更改磁盘分配方式的初衷就是为了克隆虚拟机,搜索了各种方法,最后在官方文档中找到了一点解决思路,需要重新生成磁盘描述文件,但是官方文档给的是通过ESXI系统来操作的,我一顿操作无果之后,选择删掉原本无用的磁盘描述文件,这样在克隆的时候果然出现了新的报错:”找不到文件: CentOS 7.6.vmdk,克隆此虚拟机时需要用到该文件。如果该文件被移走,请提供其新位置”。找不到文件是正常的,因为我刚刚删掉它了,所幸给出了VMware给出了浏览选项,我选择了另一个描述文件:”CentOS 7.6-0.vmdk”,然后成功创建。从这个文件的修改时间来看,他并不是新生成的,但是却能用,详细原因不知,等以后详细了解之后再补充。
这是虚拟机的配置文件”CentOS 7.6-0.vmdk”的内容:
1 | # Disk DescriptorFile |