首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

把物理机变换为虚拟机的简单方法

2012-09-18 
把物理机转换为虚拟机的简单方法把物理机转换为虚拟机简单方法by 沈东良http://blog.csdn.net/shendl要把

把物理机转换为虚拟机的简单方法

                                                                  把物理机转换为虚拟机简单方法

                                                                                                                                                               by 沈东良 http://blog.csdn.net/shendl


           要把业务转换到虚拟化环境的客户,常常需要面对这样的问题:如何把现在运行业务的物理机转换为虚拟机,迁移到Hypervisor上运行。

          这就是把物理机转换为虚拟机技术的用武之地。英文缩写P2V(Physical to Virtual)。


P2V概览

         一台运行业务的物理机,其有价值的东西,不是它的硬件:CPU,内存,显卡,网卡等等。而是它的硬盘,因为软件和数据都在这里。而数据是无价的!

          一台虚拟机,它的最核心的部分也是硬盘—虚拟化中应该称作“虚拟硬盘”了。

          物理机的硬件信息,只需要记录下来,以便构建虚拟机时给它分配对应的虚拟资源即可。这些信息包括:CPU类型,内存大小,网卡数量,IP地址等等。

         还有一些hypervisor为了实现更多对虚拟机的管理功能和提升虚拟机的性能,需要在虚拟机中安装服务软件。这些软件可以在P2V过程完成后再安装。而且即使不安装这类软件也不会影响虚拟机的正常使用。

          因此,P2V转换的过程,核心就是对硬盘数据的转换。



用dd命令把物理磁盘备份为文件

          虚拟机的虚拟硬盘,可以是一个块设备,也可以是一个文件。

          我们这里可以使用dd命令,把物理机的每一个磁盘的内容原封不动地复制到文件中。具体方法见拙作:《在linux上用dd命令实现ghost功能》http://blog.csdn.net/shendl/article/details/7384755。


          这个过程,其实也就是一个ghost的过程。

         物理机的磁盘一般都很大,而dd命令的特点是,只能生成一模一样大小的备份文件,因此这会是一个问题。但你可以使用该文中的压缩方法,在dd备份执行的同时进行压缩,这样就能生成较小的文件。


         得到备份文件后,你就可以使用hypervisor启动虚拟机了。(如果你使用压缩方法生成备份文件,你就必须首先解压这个文件)这个dd生成的备份文件,按照虚拟化的术语,叫做RAW格式的虚拟磁盘文件。

          我们知道,块设备就是一次读写一个扇区512字节的设备。文件是可以一次读写1-N个字节的操作系统对象。因此,完全可以使用任意文件来模拟块设备。

           所有Hypervisor都支持RAW格式的文件作为虚拟磁盘。RAW格式,就是没有格式。Hypervisor根据文件的大小除以512字节,得到该文件一共有多少个“扇区”。虚拟机读写扇区时,就调用read/write系统调用读写“扇区”。



用sparse虚拟磁盘格式压缩虚拟磁盘文件

          物理机的磁盘一般很大,但实际使用的数据可能并不多。我们可以使用sparse稀疏格式的虚拟磁盘来生成更小的虚拟磁盘文件。

qemu-img 命?令?行?工?具?是?Xen和? KVM用?来?格?式?化?各?种?文?件?系?统?的?。

         它支持一个sparse格式的文件:qcow2格式的文件。

         qcow2,使用了Copyon write技术。它在文件的头部建立了一些块表。块表分成几个级别。类似与Linuxkernel的多级页表。

         块表中每一项代表一个块的数据。一个块由多个扇区组成(比如说一个块大小是1MB)。初始时,块表全为0,表示没有分配。当需要向这一个块写入数据时,就把qcow2文件加长1MB。然后把这1MB的文件偏移量设置到块表中该项中。

         这样,下次读写该块时,就能够正确读写数据了。

         如果你需要一个1TB大小的虚拟磁盘,用qcow2格式创建虚拟磁盘文件,一开始只会占用几百KB大小的空间。它只会在VM真正需要写入数据时才会增加文件的大小。



         我们可以使用qemu-imgconvert命令,把我们用dd命令生成的RAW格式的虚拟磁盘转换为qcow2格式的虚拟磁盘。

         当发现RAW格式文件中某一个块的数据全为0时,qcow2文件不会为这个块分配空间。这样就能够大大缩小虚拟磁盘文件的大小。

         如,RAW格式文件名为vm.img,容量为100G,执行如下命令:

qemu-imgconvert -c -f raw -O qcow2 -S 100G ./vm.img ./vm.qcow2

         能够生成一个小得多的qcow2格式的vm.qcow2文件。

         现在,你就能够把100G大小的vm.img文件扔掉了!

         当然,qcow2格式的虚拟磁盘比RAW格式的虚拟磁盘读写速度会略为下降。因为读写qcow2格式文件,多了一个查表的过程。大小和速度之间的权衡,要看用户具体的需求而定了!


         除了KVM/XEN使用sparse虚拟磁盘格式文件:qcow2外,其他主流Hypervisor也有类似的sparse格式的虚拟磁盘文件。具体请看厂商文档。



用dd命令把物理磁盘备份到块设备上

          现代企业中,一般都会使用集中的数据存储SAN。特别是在企业虚拟化环境中更是如此,因为只有用了SAN或者类似的集中网络存储技术,才能实现有效的虚拟机活迁移。

          因此,企业也可以选择在把物理机转换为虚拟机的过程中,把物理机的存储转到SAN等集中存储的块设备中。

          我们可以在SAN上分配一块和物理机的磁盘一样大小的LUN。然后照样使用dd命令,把物理机的本地磁盘整个备份到LUN上。

          这样,Hypervisor只要能够访问这个LUN,就能够启动虚拟机。

          现代很多SAN已经支持存储over-commit技术了。就是说,SAN可以导出一个1TB的LUN,但它在SAN上实际只占用几百KB大小的空间。随着使用的增加,会动态增加实际大小。其背后使用的技术也是COW(CopyOn Write)技术!


         用户也可以使用LVM来切分LUN为LV。也可以使用前文提到的dd命令,把物理机磁盘整个备份到相同大小的LV中。

         现在的LVM也支持存储over-commit技术,用的也是COW(CopyOn Write)技术。

         使用LVM,可以给用户提供独立与SAN厂商的存储分配能力。我推荐使用LVM而不是直接使用SAN来存储虚拟磁盘。这让你不被厂商绑定,不会被厂商敲竹杠!











































热点排行