搭建一个虚拟化平台实现资源复用乃至建设私有云,是一个组织 IT 部门今天几乎必须要做的事情之一。老话说的好,罗马不是一天建成的,今天创建的虚机,分配的虚拟磁盘空间,也许明天就会捉襟见肘。是每次增加一个虚拟磁盘,还是想办法增加虚拟磁盘的大小,这是个考虑的问题。
个人角度,强烈不建议增加虚拟磁盘的数量。原因后文说明。那就选择扩展虚拟磁盘容量吧,如何去做虚拟磁盘的扩容,其实在今天的虚拟化产品都能得到很好的支持。例如:
- Hyper-V
早期Hyper-V 2.0 (Windows Server 2008/R2)的扩展方式
Hyper-V 3.0 (Windows Server 2012/R2)的扩展方式
How to Resize Online Virtual Machine Hard Disks in Hyper-V 2012 R2
http://www.altaro.com/hyper-v/how-to-resize-online-virtual-machine-hard-disks-in-hyper-v-2012-r2/
相对于早期版本,基于2012的Hyper-V能够支持在线的虚拟磁盘扩展。这是新的VHDX虚拟磁盘文件提供的支持。并且VHDX的虚拟磁盘应该挂载到虚拟SCSI控制器上。具体细节可以参考这篇文章,有图有文,不复赘述。
- XenServer
XenServer的虚拟磁盘扩展方式有一篇KB介绍:
http://support.citrix.com/article/CTX125405
由于战略合作伙伴的关系,XenServer的VDI(虚拟磁盘镜像)文件VHD,和Hyper-V有着类似的结构。有关XenServer三种不同的VDI实现(基于卷保存VHD,基于文件系统保存VHD和LUN用作VHD)可以参考管理手册。
- VMWare
Adding space to an ESXi/ESX host virtual disk
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=994
Increasing the size of a virtual disk
Increasing the size of a disk partition
部分文章和KB,也介绍了Windows虚机和Linux虚机的操作系统,在虚拟磁盘扩展后,如何将虚拟机的磁盘空间扩展到这部分空间。通常Windows使用磁盘管理控制台或者diskpart命令行,Linux可以使用lvm命令。
综合以上,主流虚拟化厂商目前都能够实现虚拟机使用的虚拟磁盘的扩展。那么。我们再把问题延展开来。
虚拟磁盘文件扩展后,存储卷不够用怎么办?
实际上,卷或者LUN在存储系统上实现是轻而易举的,问题的关键在于虚拟化平台是否能够感知到卷或LUN的扩展,进而使用这部分的扩展空间。是否能够在不影响现有虚机运行的前提下完成这一过程。
XenServer 6.5,Hyper-V 3.0 以上都支持在线磁盘和LUN的扩展,VMWare应该也是支持的吧。
因此,虚拟磁盘扩容不是问题,存放虚拟磁盘的卷或LUN扩容也不是问题。
接下来说说为什么不建议不断增加虚拟磁盘的数量以及个人建议的虚拟磁盘使用方法。
实际上不同操作系统都有磁盘的管理功能,方便用户使用多块磁盘。在物理机环境下,使用多块磁盘能够累加磁盘的IOPS(条带读写分散),或者提高磁盘的可靠性(镜像)。以已经退休的Windows Server 2003为例,即使硬件没有提供RAID控制器,操作系统也可以通过动态卷实现多块磁盘的集中使用:https://support.microsoft.com/zh-cn/kb/816307
在新的Windows Server 2012/R2中,通过磁盘空间这一概念,可以将磁盘更加灵活的组织起来,即使是JBOD存储设备,也可以提供不错的灵活性,从而降低成本。
但是,这些功能建议在物理机而不是虚拟机使用。通过跨盘卷或者磁盘空间绑定多个虚拟磁盘,不仅带来运维的困难,也完全没有必要。虚拟机磁盘大多采用外挂存储例如DAS、NAS、FC SAN/IP SAN,存储本身已经能够对IOPS和可靠性进行管理和优化,其效率比操作系统要高得多。在虚拟化场景中,应该尽可能的提升虚拟机操作系统的效率,将能够分离的处理尽可能分离出来,这也是Windows Server 2012 众多网络和存储off load功能出现的原因。
那么,是不是就建议每个虚拟机一块虚拟磁盘就可以呢。当然不是。对于没有数据扩展需求的虚拟机,一块虚拟磁盘能够简化管理,但如果是数据增长可能会进行磁盘扩展的虚拟机,建议把操作系统和数据使用的虚拟磁盘分开,因为虚拟机Windows的磁盘扩展在系统卷上会受到限制。