减小 vmware 虚拟机的硬盘容量,不是压缩

栏目: 服务器 · 发布时间: 7年前

内容简介:默认情况下,vmware 虚拟机的硬盘空间可以在 vmware 的虚拟机设置里调整大小,但只能『扩展』,却无法缩小。一,vmware 的虚拟硬盘文件 *.vmdk 默认是动态分配空间的,没有数据的虚拟 “硬盘空间” 并不占用真实主机的实际硬盘空间。当虚拟机内需要储存更多数据时,对应的 vmdk 文件会相应增大,以便容纳新增的数据。但当虚拟机内的数据被清理时,已经增大的 vmdk 文件却不会自动缩小。随着虚拟机的不断使用,『只增大不缩小』的情况会逐渐严重,直到 vmdk 体积达到预设的虚拟机硬盘完整容量为止

默认情况下,vmware 虚拟机的硬盘空间可以在 vmware 的虚拟机设置里调整大小,但只能『扩展』,却无法缩小。

减小 vmware 虚拟机的硬盘容量,不是压缩

当输入较小数字时,按钮变灰,无法点击。

问题:为什么要缩小虚拟机硬盘

一,vmware 的虚拟硬盘文件 *.vmdk 默认是动态分配空间的,没有数据的虚拟 “硬盘空间” 并不占用真实主机的实际硬盘空间。当虚拟机内需要储存更多数据时,对应的 vmdk 文件会相应增大,以便容纳新增的数据。但当虚拟机内的数据被清理时,已经增大的 vmdk 文件却不会自动缩小。随着虚拟机的不断使用,『只增大不缩小』的情况会逐渐严重,直到 vmdk 体积达到预设的虚拟机硬盘完整容量为止。

  • 向虚拟机内复制文件并随后删除。
  • 设置虚拟机快照并随后删除。
  • 安装各类软件而后卸载 / 利用快照恢复原样

等等各种情况都会增大 vmdk 体积。vmware 针对这种情况提供了 shrink disk(压缩硬盘)功能,也就是在虚拟机数据已经被清除后,整体扫描一遍 vmdk 文件,清理无效数据,缩小真实体积。但这也有两个麻烦:

  1. 因为膨胀永远存在,所以压缩也要经常进行,难免感觉在做无用功。
  2. Linux 下 shrink 功能有 bug,需要配合 dd 命令先以 0 数据充,相当于先撑大再缩小,耗时数倍。参考:第四条豆知识

二,很多情况下,我们安装虚拟机的用途都比较单一,比如干净 WinXP / Win7 测试软件,练习多个 Ubuntu Server 组集群,或在 Linux/Mac 主机上利用 Windows 虚拟机操作网银。虚拟机的实际硬盘占用也往往小于 vmware 的推荐值。这是实际需求方面及可操作方面。

三,强迫症 / 好奇 / 无理由。

于是,根据实际使用情况,适当降低虚拟机的硬盘容量,将『使用膨胀』的上限卡住,释放真实硬盘空间并避免经常的压缩操作,对时间和金钱都有好处。尤其是现在 SSD 逐步标配的阶段,虚拟机硬盘容量设置不当造成的浪费是很可观的。

问题:如何操作

我以一个当初决策不当分配了 40GB 硬盘空间的虚拟机 Windows XP 为例,重新调整的目标为 10GB。该虚拟机的所有文件放在 D:\Program files\Windows XP.vmwarevm 目录下。一般来说,全新安装的 Windows XP 大约占 4-5GB 空间,则我们还有约 5GB 空间可用来安装测试软件等,足够了。如果不够就自行酌情决定调整目标。

一、清理删除当前虚拟机下的所有快照,如果这些快照很重要不能删,那接下来的操作对你就没意义了。

二、确认虚拟机硬盘是拆分成多个文件的动态分配硬盘。用 VSCode 打开虚拟机目录下和虚拟机同名的 *.vmdk 文件,如 『Windows XP.vmdk』。找到 # Extent description 部分,检查描述部分,一看就懂了。如图:

减小 vmware 虚拟机的硬盘容量,不是压缩
  • 如果有多行描述,并且每行写了 SPARSE ,这是我们需要的类型,拆分+动态分配磁盘。
  • 如果有多行描述,但每行写的是 FLAT ,则为拆分的预分配磁盘,需要转格式。
  • 只有一行描述,写的是 FLAT ,则是单一文件预分配磁盘,也需要转格式。
  • 如果乱码或者提示打不开,则是单一文件动态分配磁盘,还是需要转格式。

VMWare 在新建虚拟机时会默认选择第一种类型,但玩家当初可能出于性能等考虑,选择了其它类型的虚拟硬盘。那么就需要使用 vmware 自带的一个命令行工具 vmware-vdiskmanager.exe 转换成第一种类型。该 工具 在 vmware 安装目录下,默认为 “C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe”。

转换方法:

该工具的命令行写法为:

工具名 参数1 源文件 参数2 参数3 目标名称
vmware-vdiskmanager -r(转格式) Windows XP.vmdk(例) -t(目的) 1(目的磁盘类型,1 为拆分+动态分配) newdisk.vmdk

该命令中, - r - t1 两部分不需要变化, 目标名称 随意,之后会改名覆盖源文件。 源文件名 根据实际情况变化,而 工具名 通常要带上路径。

所以完整的命令大约是如下样子:

>"c:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe" -r "d:\Program Files\Windows XP.vmwarevm\Windows XP.vmdk" -t 1 "d:\Program Files\Windows XP.vmwarevm\newdisk.vmdk"

回车以后开始执行转换:

减小 vmware 虚拟机的硬盘容量,不是压缩

转换完成以后,删除旧的 “windows XP.vmdk” 和多个关联文件 “windows XP-s0xx.vmdk”,然后把新的 newdisk.vmdk 重命名成 “windows XP.vmdk” 以替换。其它 newdisk-s00x.vmdk 不用变。

三,打开虚拟机,进入系统。

  • 在虚机机内,使用分区管理软件将硬盘分区缩小,并将空闲保留在右端,分区块保持在左端。我们的整体目标是从 40GB 缩到 10GB,则现在要多缩一点给后续操作留出余量。如图,暂时缩到 9GB。 减小 vmware 虚拟机的硬盘容量,不是压缩 减小 vmware 虚拟机的硬盘容量,不是压缩
  • Windows 7 以上系统,自带的磁盘管理就有『压缩卷』功能可以调整分区大小,WinXP 用的是 DiskGenius 免费版本。Win98 则需要寻找更古老的相应软件。
  • 中途可能需要重启虚拟机,无妨,调整完关闭虚拟机即可。

四,加减乘除:

再次打开 Windows XP.vmdk 文件,定位到 # Extent description 部分。这次重点放在第二部分数字内容上,经计算,该数字为每个分块文件对应虚拟硬盘的簇数量,每簇 512 Byte,2 簇 = 1KB。我们的目标容量为 10GB,也就是:

  • 10(GB)*1024(MB/GB)*1024(KB/MB)= 10485760 KB = 20971520 簇。

检查 # Extent description,前两个文件每个 8323072,则把第三行的数字改为

  • 20971520 – 8323072*2 = 4325376

减小 vmware 虚拟机的硬盘容量,不是压缩

并删掉后续各行及对应文件,我们就在 vmware 部分完成了虚拟机硬盘大小调整。

五,补足余量:

重开虚拟机。前次调整分区时,预留了 1GB 左右的余量。再次打开分区工具,把剩余未使用空间重新分配给各分区。

这是因为对计算机分区而言,存在分区表、特殊扇区等原因,物理上的 10GB 空间在系统内的表现肯定是略小于 10GB 的,这对于虚拟机也一样成立。『内』『外』之间有差额,如果一开始就分区 10GB 而外部调整也等 10GB 的话,再次启动虚拟机就会报分区表错误,界时修改起来反而麻烦。预留余量,而后补足分区就没问题了。

六,清理死数据:

由于直接修改了描述文件,改小了簇数量,-s003.vmdk 里原本存于 4325376 之后的数据变成了永久的『死数据』。关闭虚拟机后,需要使用 vmware-vdistmanager -r -t 1 再作一次转换。虽说是转换,但目的却是清理死数据。清理完以后直接单独替换新旧 -s003.vmdk 即可。(想想为什么?) 目标> 源>

————————————————-

相关细节:

  • 虚拟机 Linux 系统时原理一样。利用 GParted 等分区工具,首先缩小使用分区,并调整未分区块到尾端。而后编辑 vmdk 描述改为需要的容量,最后再重进系统分区调整补足余量即可。
  • 预分配类型的虚拟硬盘必须先 vdiskmanager 转类型,不能直接操作。追求性能的话在编辑完再转回去。不过追求性能的话应该上 SSD,一力降十会。
  • 编辑 .vmx 和 .vmdk 文件不要用 windows 自带的记事本。
  • 虚拟机备份直接复制整个目录即可。

以上所述就是小编给大家介绍的《减小 vmware 虚拟机的硬盘容量,不是压缩》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

标签: vmware 虚拟机

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

复杂网络理论及其应用

复杂网络理论及其应用

汪小帆、李翔、陈关荣 / 清华大学出版社 / 2006 / 45.00元

国内首部复杂网络专著 【图书目录】 第1章 引论 1.1 引言 1.2 复杂网络研究简史 1.3 基本概念 1.4 本书内容简介 参考文献 第2章 网络拓扑基本模型及其性质 2.1 引言 2.2 规则网络 2.3 随机图 2.4 小世界网络模型 2.5 无标度网络模型 ......一起来看看 《复杂网络理论及其应用》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具