热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

VMwareWorkstation磁盘如何整理碎片

多年来,我一直将VMwareWorkstation用于软件测试、技术支持和应用程序虚拟化。我明白了一点:经过了长期使用,尤其是操作系统升级后,虚拟磁盘使用的实际磁盘空间会变得远大于其虚拟空间,可能会导致性能下降。VMwareWorkstation图形化工具并非总是能够收回

多年来,我一直将VMware Workstation用于软件测试、技术支持和应用程序虚拟化。我明白了一点:经过了长期使用,尤其是操作系统升级后,虚拟磁盘使用的实际磁盘空间会变得远大于其虚拟空间,可能会导致性能下降。VMware Workstation图形化工具并非总是能够收回这部分空间,但是你只要采用特定的操作程序和一些可下载的VMware工具,就可以清理臃肿的磁盘。

不用快照或链接克隆

不妨先说一个重要的注意事项。如果你在使用VMware Workstation中的快照或链接克隆(linked clone),那么就别采用我在本文中概述的操作程序。通过快照或链接克隆运行的虚拟机是通过虚拟磁盘来运行的,而这些虚拟磁盘好比是原始虚拟机的覆盖层(overlay)。如果你试图为原始虚拟机或克隆机整理碎片,就会大大增添复杂性,保证你实际上会遇到性能更糟糕的情况。覆盖机制已经尽量减小了用于虚拟磁盘的空间数量;你可能要增加用于克隆磁盘的空间数量。

注意:可以使用本文介绍的一些方法来清理VMware所谓的完全克隆(full clones)。完全克隆通过一套完整的原始源虚拟机创建而成,但并未与它捆绑在一起。如果你不确信VMware机器是不是克隆、快照还是源虚拟机,那么只要看一下VMware Workstation中的机器详细资料。克隆和快照明确提到了克隆或快照来源,如所示。所示的机器是非链接,只显示了VMware Workstation的版本。

:克隆机的机器详细资料

:非链接机器的机器详细资料

我需要为虚拟磁盘整理碎片吗?

碎片现象给虚拟磁盘带来了不一样的性能和大小问题,具体要看多个因素。我运用了两条简单的经验法则。

首先,如果我认为我发现虚拟机的性能大幅下降,那么机器可能需要清理。其次,我将磁盘所在的虚拟机磁盘格式(VMDK)文件的大小与虚拟机内部报告用于该驱动器的空间数量作一番比较。如果你的VMware磁盘使用预先分配的空间,这种比较就没有参照意义。固定磁盘仍得益于碎片整理,但是VMDK文件对虚拟机磁盘来说总是最大的大小。

想找到该文件直接使用的空间,鼠标右击VMware Favorites列表中的虚拟机,从上下文菜单选择Settings(设置)。在打开的Virtual Machine Settings(虚拟机设置)窗口中(如所示),选择窗口左边Hardware(硬件)选项卡下方Device(设备)这一列下面的硬盘。然后,关注窗口右半边的Capacity(容量)区域。Current size(当前大小)值显示了磁盘上文件的当前大小。接下来,启动访问操作系统,找到它声称所使用的空间数量。如果访客操作系统声称的使用量远小于VMDK文件所列的数量,那么你可能会得益于为磁盘整理碎片和减肥瘦身。

:虚拟机设置

第一步:从访客操作系统来清理

第一步是从访客操作系统里面为磁盘整理碎片。这时候可能正好可以执行一般性的维护,比如操作系统和应用程序更新。(执行维护后,这些更新会立即带来一些碎片,增加已使用空间。)整理碎片后,关闭虚拟机。

第二步:使用VMware工具来整理碎片和减肥瘦身

虽然VMware Workstation有一些选项,可通过虚拟机设置窗口中的Utilities(实用工具)按钮,加载和缩减虚拟磁盘,但是这些选项很少对虚拟磁盘的大小产生重大影响。比如说,我有一个Windows 2000 Professional VMDK文件,有大量闲置空间。Win2K访客操作系统报告,它只使用了2.31GB的空间,但是磁盘文件占用了6.6GB的空间。使用GUI工具并没有减小磁盘空间方面的要求。我而是建议你应该使用VMware可下载的命令行工具:vmware-vdiskmanager和vmware-mount,对磁盘来一次效果显著的减肥瘦身。

开始,你要从VMware网站获得工具。你需要向VMware注册,然后搜索tool download(工具下载)。在运行VMware Workstation 7.1的Windows 7上,我使用了VMware虚拟磁盘开发工具包(VDDK),该工具包含有上面两款工具。安装VDDK,确保记下安装VDDK的文件夹。在32位Windows系统上,该文件夹通常类似C:\program files\vmware\vmware virtual disk development kit\bin;在64位Windows系统上,它通常类似C:\program files (x86)\vmware\vmware virtual disk development kit\bin。现在你可以准备开始:

1. 使用拥有管理权限的帐户,打开命令提示符。

2. 使用这个命令:pushd

把你的当前目录设置成VDDK文件夹,如代码片段1中标注 A部分的代码所示。这一步确保,VMware工具——以及更重要的是,它们的支持性DLL——在命令搜索路径的前面。如果你运行64位Windows,我强烈建议执行这一步,哪怕你认为自己知道有一种更好的办法。如果先搜索其他路径,VMware虚拟磁盘加载工具vmware-mount经常会失败。

3. 使用VMware工具,为虚拟磁盘整理碎片。在命令提示符下,运行这个命令:vmware-vdiskmanager

使用-d(表示碎片整理)选项和虚拟磁盘文件的完整路径。代码片段1中标注 B部分的代码显示了这个命令,VMDK文件在E:\win2k pro\w2kprodisk1.vmdk。

4. 这时候,你要使用vmware-mount,把文件映射为磁盘。你必须为VMDK文件指定未使用的驱动器符和路径。代码片段1中标注 C部分的代码把驱动器Z映射成W2kProDisk1.vmdk文件。

5. 为了让磁盘准备减肥瘦身,使用这个命令:vmware-vdiskmanager

使用-p(表示准备)选项和加载VMDK文件的驱动器对应的驱动器符,而不是VMDK文件的路径。首次尝试为磁盘减肥瘦身时,使用错误的驱动器符是第二种导致问题的根源;这时候,你要依赖驱动器符。代码片段1中标注 D部分的代码显示了作为磁盘Z加载文件的正确操作程序。你会收到不断更新的百分比显示,告诉你磁盘擦除方面的进度。擦除掉的不是整个磁盘,而是文件中的空白区。

6. 接下来卸载磁盘,为此使用这个命令:vmware-mount -d

如代码片段1中标注 E部分所示。在这个命令中,“d”表示“卸载”。

7. 最后,缩减VMDK文件,为此使用这个命令:vmware-vdiskmanager -k

如代码片段1中标注 F部分所示。在这个命令中,“k”是个助记符号,表示“缩减”这个词;字母“s”用于另一个选项。

这时候,你大功告成了。这个方法极其有效。我前面提到的Win2K磁盘文件(访客操作系统明明只用了2.3GB空间,它却占用了6.65GB空间)缩减到了只有2.32GB。你可以对占用过多空间的每个访客操作系统重复执行这个过程。

第三步:为主机磁盘整理碎片

作为提升性能的最后一步,从主机操作系统为虚拟机驻留在上面的物理磁盘整理碎片。如果你因访客驱动器的碎片现象而遇到性能或存储空间问题,这一步有望解决问题。

自动为磁盘减肥瘦身

虽然我觉得需要时手动执行访客操作系统维护最简单,但是VMware磁盘碎片整理和缩减操作很容易实现自动化。(它们通过命令行来运行。)

可以下载批文件ShrinkVmdk.cmd,使之前过程的第二步实现自动化。这个文件所作的一个假定是,驱动器Z未使用;如果实际情况不是这样,就要修改靠近批文件顶部的这一行:set tmpdrive=Z:,并指向闲置的驱动器符。

你安装了VDDK后,可以开启一个已经提升权限的命令行窗口,以需要整理碎片的那个VMDK文件的完整路径来运行脚本。如果使用批文件,你可以为示例虚拟磁盘文件整理碎片,只要使用这个命令:shrinkvmdk "E:\Win2k Pro\W2kProDisk1.vmdk"

凭我的经验,VMware的虚拟磁盘一般没有麻烦,并不经常需要全面清理。不过,当你确实发现虚拟磁盘在占用过多的驱动器空间时,可以使用这个方法来迅速解决问题。

代码片段1:ShrinkVmdk.cmd


推荐阅读
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • windows便签快捷键_用了windows十几年,没想到竟然这么好用!隐藏的功能你知道吗?
    本文介绍了使用windows操作系统时的一些隐藏功能,包括便签快捷键、截图功能等。同时探讨了windows和macOS操作系统之间的优劣比较,以及人们对于这两个系统的不同看法。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Win10下游戏不能全屏的解决方法及兼容游戏列表
    本文介绍了Win10下游戏不能全屏的解决方法,包括修改注册表默认值和查看兼容游戏列表。同时提供了部分已经支持Win10的热门游戏列表,帮助玩家解决游戏不能全屏的问题。 ... [详细]
  • 如何在联想win10专业版中修改账户名称
    本文介绍了在联想win10专业版中修改账户名称的方法,包括在计算机管理中找到要修改的账户,通过重命名来修改登录名和属性来修改显示名称。同时指出了windows10家庭版无法使用此方法的限制。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
author-avatar
梦苓718
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有