热门标签 | 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


推荐阅读
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 介绍一个提供正版Windows软件下载的权威网站,确保用户能够安全合法地获取所需软件。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 优化版Windows 10 LTSC 21H2企业版:适用于低内存设备
    此版本为经过优化的Windows 10 LTSC 21H2企业版,特别适合低内存配置的计算机。它基于官方版本进行了精简和性能优化,确保在资源有限的情况下依然能够稳定运行。 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
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社区 版权所有