通过Hyper-V批量快速复制实验虚拟机的实践思路

简介:
    很久没有更新博客了,当然一部分原因源于休假后带来懒惰的惯性,更主要的原因是由于工作需要,最近一段一直在闭关设计和研究新一期活动的内容和方式并完成了其中一些关键部分的脚本;这其中一个很重要的部分就是架构和设计虚拟实验室的前后台工作。 
  今天,通过这个博客分享一个针对我们的虚拟实验室中必须攻克和解决的一个技术难题及如何设计并解决的,希望对你也有所启发。  
  (具体的项目设计相对比较复杂,其中的技术部分涉及了虚拟网络隔离设计、存储系统、并发远程连接桌面、自动化部署,前后台等诸多部分,这里仅就存储一个子单元中的一个环节展开)  
   我们的实验考虑到需要通过自动化批量部署方式将初始化的实验环境部署到后端若干套Hyper-V的服务器虚拟化平台,这里以一个培训完整的实验环境源VHD加上差异盘快照avhd需要300G计算;单就一套完全自包含的环境进行导入导出是很简单的,通过Powershell的导出和导入CMDLETS就可以轻松的解决,不过试想一下,像我们的实验平台单就一个自包含的实验环境就有300GB之巨,如果在服务器端跑10个左右的这样的环境,其初期部署规模就会上升到接近3TB,显然这种方式空间占用和部署时的导入速度都会变得不太能接受的。  
   有没有什么更好的方法呢? 
   在前期我就考虑到,是不是可以采用差异磁盘减少空间的投入和部署的时间,但是新的问题接踵而来,如果采用差异磁盘的是需要重新创建虚拟机的,这样对于每套独立的环境就需要在后期脚本中恢复其中的配置,这个复杂度就很高了。  
  最终,经过思考和测试,找到了一个解决方案,其大致思路是这样的:  
  我将上述一个实验的环境修改为5个完整的源全量虚拟磁盘vhd分别对应5个快照磁盘avhd或差异磁盘,为什么是这样?在看完了这个实践过程,相信你就清楚了:)
  貌似如果需要制作10套环境按照这种做法不但不会节省什么空间,反而显得画蛇添足而且空间还多了这显然得不偿失,不过这时候就要发挥OS自带的MKlink的作用了,而且速度会非常有优势,怎么做呢?其实说来简单,全量磁盘和差异磁盘时有父级别关联关系的,下面拿个测试环境看看:  
  从界面就可以看出来(对包含快照的环境其实是一样的)   image
  通过Powershell,也可以看到:
  image
   如果导出配置了差异磁盘的虚拟机会是神马情况呢?我们测试一下看看:  
   目测一下都导出哪些东东?Hyper-V虚拟机的导出了3个目录,一个快照目录,一个磁盘目录还有一个是虚拟机配置文件目录的XML用于导入。    
image
    磁盘目录中包含了全量的父磁盘win2008r2-30G.vhd以及差异磁盘cdltmg.vhd,对于我们要做的就是想个办法绕开拷贝10次父磁盘,记住“重角虽多一麟足矣“!”戏份“开始了:) 
  我们要做的就是把这个父磁盘单独放置到一个目录中,例如将父磁盘单独移动到父目录下的Parent目录, 这样在导出目录的虚拟磁盘目录下仅保留了差异磁盘部分; 那么要生成10套同样的实验虚拟机环境?呵呵,拷贝10次Export目录就好了!拷贝时间空间都得到了保障(因为我们仅仅拷贝差异磁盘就可以了);当然还有个2个前提条件是不得不说的:   
   1. 因为差异磁盘系统在启动时都需要读母盘,因此并发读的压力在磁盘系统是很大的,所以即便可以复制的虚拟机越多越节省空间,我们也不能无限制的复制,我的环境因为采用SSD做CacheCade,因此做了10个差异磁盘的环境。 
  2. 在我的环境中用于拷贝的虚拟环境可以是相同的(主机名,IP地址等),因为处于实验目的我只需部署同样环境给做实验的用户就可以了,再导入虚拟机的时候我会在原地导入并且制定每个虚拟机一个自己独立的Private虚拟交换就可以,但实际环境如果做类似操作,好需要设计如何将拷贝出的虚拟机环境导入需要重新配置主机名和IP地址等因素。 
 好了,现在看看我的测试的基础用例,后期的脚本都是基于这个实验作为蓝本开发的。 
  1.首先拷贝父磁盘到Export目录中一个独立的目录    image
   2. 拷贝不包含父磁盘的导出文件一份到新的目录,例如从export中的cdltmg拷贝到cdltmg1    image
    接下来有两种分支实现方式:
    a) 对拷贝后的目录制作父磁盘制作符号链接,这里需要用到一个系统自带的MKlink的工具:
    MKlink是微软系统中自带的符号链接工具,Windows Server 2008/2008R2/2012, Windows Vista/Windows 7/Windows 8系统中都可以提供,请参考http://technet.microsoft.com/en-us/library/cc753194(v=ws.10).aspx
    我们需要在拷贝出来的目录的虚拟机磁盘位置创建源父磁盘的符号链接并指向父目录下的Parent目录中的全量父盘
image
  在GUI界面中,也可以看到该符号链接文件,注意观察一下它的大小你就知道为什么我们要这么搞了:)
image
    b) 利用Hyper-V修复磁盘工具方式或者WMI(WMI的方式是我们后期通过脚本或C#解决的这里暂不讨论) 
  • 在Hyper-V的管理界面中选择检查磁盘 image
  •  指定拷贝的导出目录中的差异虚拟磁盘   
image
  •  系统提示该差异磁盘的父磁盘连接丢失,当然因为我们统一将父磁盘放到了Parent目录,因此我们需要点击重新连接    
   image
  •  指定Parent目录中的父磁盘,并选择重新连接及完成连接后的效果   
image
image
   好了,完成了分支步骤中的任意一个,接下来还有个难题,这些被复制的虚拟机都有一个统一的虚拟机Global ID,因此这将会造成为了导入批量拷贝的虚拟机被Hyper-V认为是同一个虚拟机而拒绝导入的错误! 
image
    因此,又一个小Trick必须登场了,我们都知道这个虚拟机的UUID及虚拟机名称都保存在了导出时产生在Virtual Machine的XML文件中,因此我们需要分析这个文件格式并作出差异化的改变就可以完成导入了,再实际项目中采用了脚本完成了对XML文件的Parse和修改,这里给出一个示例,只需要修改这三个位置就可以啦!分别是: 
Configuration->Properties->global_id (修改虚拟机唯一ID) 
Configuration->Properties->name (修改导入虚拟机的名称)   
Settings->Global->logical_id (修改虚拟机唯一ID)  
  image
 4. OK,都修改完了,最后一公里的工作就是导入虚拟机了。看看是否符合预期?这一步我偷了点懒,没有把整个导入过程截图, 导入方式大致说明一下, 只需要选择在原地导入并注册新的虚拟机ID就可以了,导入简直就是瞬间完成的!(为什么速度这么快,并且不需要选择复制虚拟机并选择注册新的虚拟机ID呢?聪明的你一一定知道答案了) 
  现在看下面的效果图,一个通过快速复制方式产生的虚拟机已经成功部署上了:-)(如果需要批量部署如法炮制上述方式就可以了。其实上述方法还有个变种,那就是根据需要直接产生差异磁盘,除了结合上述修改过的虚拟机环境,还需要修改每个虚拟机环境的每个磁盘重新指定为产生的差异磁盘,然后一并复制后导入即可。这种方式对于没有差异磁盘的基础环境是必不可少的!) 
 
image

写在最后
  其实费劲周折完成的这件事情仅仅是针对我具体搭建的一个具有特殊性的快速部署实验环境用例所做的设计,在真实的项目里面考虑还是通过一个由sysprep的系统VM作为源点,利用很成熟的System Center技术构建服务模板并定制化完成; 但不得不说的现阶段是针对有些特殊的环境需求,有时候变通一些的做法也同样可以起到事半功倍的效果!这里并没有给出我们最后具体实现的脚本, 其实我感觉在其中遇到的问题和解决的思路好像更有意义一些, 呵呵!

HTH, Hope This Help :-)









本文转自 翟老猫 51CTO博客,原文链接:http://blog.51cto.com/3387405/1175886,如需转载请自行联系原作者
目录
相关文章
|
8天前
|
运维 虚拟化 Windows
Hyper-V Win8虚拟机启动错误修复教程
针对Hyper-V Win8虚拟机启动错误,本教程提供详细修复步骤。首先进行硬件兼容性检查,确保CPU支持虚拟化并启用,同时检查内存和存储空间是否充足。接着以管理员身份登录,使用事件查看器排查错误。管理Hyper-V服务,确保相关服务正常运行。检查虚拟机状态,优化资源分配,并修复虚拟硬盘文件。更新系统和重装Hyper-V组件也是有效手段。最后,排查硬件故障、备份数据及处理第三方软件冲突。通过这些步骤,多数启动问题可得到解决。
|
6天前
|
存储 网络协议 网络安全
Hyper-V Win10虚拟机配置常见问题
在配置Hyper-V Win10虚拟机时,用户常面临网络连接、虚拟交换机配置、资源分配及其他问题。例如,虚拟机无法获取IP地址可能源于DHCP服务异常,需检查并启动该服务;外部虚拟交换机配置错误则需确保物理网络适配器正确连接。此外,内存不足或虚拟硬盘性能瓶颈也会影响运行效果。通过合理调整资源配置、优化设置及遵循最佳实践,可有效解决这些问题。
|
10天前
|
监控 网络安全 虚拟化
Hyper-V中Win10,虚拟机运行错误处理的方案
当Hyper-V中的Windows 10虚拟机出现运行错误时,可按以下步骤处理:首先进行基本检查与修复,包括检查虚拟机配置、确保Hyper-V服务正常运行及重启相关服务。其次,使用PowerShell命令或DISM工具修复虚拟机配置和系统组件。接着,查看事件查看器中的错误日志,分析问题原因。调整虚拟机资源分配,优化性能。针对特定错误情况,如启动失败或网络问题,采取相应措施解决。若问题仍未解决,考虑克隆、重置或重新安装虚拟机,必要时联系技术支持。操作前请备份重要数据并以管理员身份运行命令。
|
7天前
|
监控 测试技术 数据库
详解Hyper-V虚拟机CPU分配方法
在Hyper-V环境中,合理分配虚拟机的CPU资源至关重要。vCPU是物理CPU的虚拟化表示,管理员可通过指定处理器数量、核心数、设置兼容性和亲和性、启用动态分配等方法优化性能。使用性能监视工具监控并调整CPU资源,避免过度分配,确保虚拟机稳定运行。定期评估和优化资源分配策略,以适应业务变化,保持最佳性能。
|
12天前
|
安全 网络协议 网络安全
当虚拟机出现网络连接问题时,应该先检查Hyper-V的网卡连接配置
当虚拟机出现网络连接问题时,应首先检查Hyper-V的网卡配置。具体步骤包括:确认虚拟机运行状态、检查虚拟交换机类型和物理网卡连接、确保虚拟机网络适配器正确连接到虚拟交换机,并验证网络配置(IP地址等)。常见问题如虚拟交换机配置错误、网络适配器未连接或防火墙阻止连接,可通过重新配置或调整设置解决。必要时重启虚拟机和宿主机,查看事件日志或联系技术支持以进一步排查问题。
|
13天前
|
虚拟化 网络虚拟化 Windows
导入虚拟机到Hyper-V环境时,理解并配置网络适配器设置是确保网络通信的关键
在Hyper-V环境中,正确配置虚拟机的网络适配器是确保其网络通信的关键。需先启用Hyper-V功能并创建虚拟交换机。接着,在Hyper-V管理器中选择目标虚拟机,添加或配置网络适配器,选择合适的虚拟交换机(外部、内部或私有),并根据需求配置VLAN、MAC地址等选项。最后,启动虚拟机并验证网络连接,确保其能正常访问外部网络、与主机及其他虚拟机通信。常见问题包括无法访问外部网络或获取IP地址,需检查虚拟交换机和适配器设置。
|
14天前
|
编解码 Linux 虚拟化
在Hyper-V虚拟化的图形处理中,怎么调整虚拟机的屏幕分辨率?
在Hyper-V虚拟化中,调整虚拟机屏幕分辨率对提升用户体验和确保应用程序兼容性至关重要。高分辨率可提供清晰图像、提高工作效率,并避免显示异常。调整方法包括通过增强会话模式、虚拟机内部设置或手动编辑配置文件。注意事项包括正确安装显卡驱动、避免过高分辨率及及时保存设置。
|
5月前
|
存储 运维 虚拟化
虚拟化数据恢复——Hyper-V虚拟化故障导致虚拟机文件丢失的数据恢复案例
在Windows Server上部署的Hyper-V虚拟化环境中,因存储中虚拟机数据文件丢失导致服务瘫痪。北亚企安数据恢复工程师通过物理检测、操作系统及文件系统检测,确定为人为格式化造成,并通过镜像硬盘、重组RAID、分析并恢复文件索引项等步骤,成功恢复数据,最终在新Hyper-V环境中验证并迁移所有虚拟机,确保用户业务恢复正常运行。
|
8月前
|
存储 安全 虚拟化
虚拟化数据恢复—虚拟机数据丢失导致Hyper-V服务瘫痪数据恢复
虚拟化数据恢复环境: 一台服务器上部署的Hyper-V虚拟化平台,虚拟机的硬盘文件和配置文件放在一台某品牌MD3200存储中。该存储中有一组由4块硬盘组建的raid5磁盘阵列,还有一块大容量硬盘存放虚拟机数据文件的备份。 虚拟化故障: MD3200存储中虚拟机数据文件丢失,导致Hyper-V服务瘫痪,虚拟机无法使用。
虚拟化数据恢复—虚拟机数据丢失导致Hyper-V服务瘫痪数据恢复
|
7月前
|
网络协议 Linux 网络安全
Hyper-v 如何配置 Centos7 虚拟机网络?
Hyper-v 如何配置 Centos7 虚拟机网络?
214 0

热门文章

最新文章