存储精简配置可以节省VMware虚拟机磁盘文件(VMDK)上的空间,但回收这个空间需要使用下文介绍到的工具。
从vSphere 4.0系列测试版开始,我已经尝试使用虚拟机磁盘格式(VMDK)精简配置,因为我没有太多的存储空间备用。
在我们进入我发现的细节以前,这里有一些精简配置的背景情况。通常,当一个50GB的VMDK被创建,它会立即在虚拟机文件系统(VMFS)卷上占用掉50GB的磁盘空间。由于应用管理员往往需要比他们真正需要的空间更多的空间,这里有很多昂贵的存储区域网络(SAN)磁盘容量被用于这些将永远不会被使用的应用。当你简单创建一个VMDK磁盘时,存储不分配给VMDK空间,除非它是真的会被使用到的。50GB磁盘空间中只有仅仅10GB的空间被使用,那么只要有10GB的空间就可以了。
只有当磁盘被写入了数据,50GB的空间才可以说被使用了,这是非常合乎逻辑的。但是在存储上回收那些已经被删除的数据的空间是不可能的。一旦精简配置磁盘增长,它就绝不会收缩。这不是因为在储存上或者vSphere级别的限制,而是因为储存和vSphere没有收到这些区块是空的信息。当你删除它时,Windows不会删除文件,它只是更新了主文件表和登记这些区块从X变更为Y,即这些区块现在可以被再次写入,但空间并不是空的。这就是vSphere和存储块都不知道区块是可以被回收的原因。
但是,一些存储厂商,已经使用过特殊的驱动程序,这可以与客户的操作系统相互通信,并告诉存储,当客户删除文件时,它可以收回这些区块。
使用Storage VMotion收回空间
当我第一次听说精简配置是在2009年戛纳的VMworld上,我立即想到,在没有停机时间前提下,我将如何获得我客户现有的基础架构。幸运的是,在vCenter迁移向导中,有一个问题,改变数据存储,为一个VMDK或一个虚拟机(VM)上所有的VMDK,并立即更改磁盘类型从厚到薄的配置。你可以使用Storage VMotion功能在VMDK上并用这样的方式收回未使用的空间,但请记住,只有以前未曾被客户操作系统写入的空闲空间才可以回收。
作为测试,我进行了如下的操作:
增加10GB的精简配置VMDK到一台Windows 2003的虚拟机。
用数据填补了VMDK,稍后删除该数据。
在vCenter里,看到磁盘现在使用的空间是10GB 。正如预期的那样,通过在Windows中删去它,没有在存储级别将数据所占空间释放。
使用Storage VMotion迁移这个VMDK到不同的数据存储上。但是,这个过程没有释放掉存储上的空间。如果在向导中我选择保持磁盘格式或“更改为薄配置磁盘”,结果是没有差别的。
这证明,删除文件并不能收回未使用的区块。这仍然是相当的浪费,这些区块不能再次被回收了,所以我考虑其他方式收回这个空间。
使用sdelete命令收回空间
我下面要使用的工具是来自Sysinternals的sdelete 。虽然Sysinternals现在是微软的一部分,并应该在Microsoft TechNet网站上面,但是我一直无法找到它。这个链接是我可以找到的唯一的Sysinternals版本,但它可能是这个工具的旧版本。如果你找到了这个工具更新版本的下载位置,请让我知道。
要收回在Windows VMDK上的空间,就要下载sdelete到本地硬盘。在我的例子中,我使用sdelete清除虚拟机驱动器中的E盘。运行sdelete将清除所有空闲空间,可以使用以下命令: “ sdelete – c E: ” 。由于这是一个相当频繁的I/O操作,如在生产环境中你应该非常仔细地计划这一行动。还要注意到清除以后,该区块将真正是空的。如果一个文件被意外删除,几乎是不可能在磁盘上使用数据恢复工具来恢复。因此,在用这一工具进行试验以前,具有很好的备份是必要的。
在sdelete清除你的硬盘以后,vCenter仍然会表现出最大的磁盘使用情况,因此回收空间的最后一步是使用Storage VMotion。由于磁盘已经是精简配置的格式,在选择向导,你可以“保留磁盘格式”或“变更为薄配置磁盘”选项。这两种方法都将真正空余出未使用的空间。当Storage VMotion已经完成之后,你可以按下“更新存储使用”以使vCenter重新计算存储空间的使用情况,在此之后,VM将使用远远少于以前的存储空间。
使用VMtools收缩选项
在VMware Tools工具运行着的Windows虚拟机里,你可以右键单击该图标并选择打开VMware VMtools工具。其中一个标签显示的将是“收缩”。通常,这个选项将清除所有未使用的磁盘空间,但是,奇怪的是,这对精简配置磁盘并不起作用。因此,不幸的是,当你想收回未使用的磁盘空间时,这种选择是没有帮助的。