通常我们期望虚拟机的迁移能够全部自动化或者部分自动化完成,但实际上 Linux 系统在 P2V 和 V2V 的迁移中可能遇到一些困难。本节列举了 Linux 迁移中需要注意的地方。
- 磁盘分区名被硬编码。当我们做磁盘虚拟化时,可能会使用不同类型的虚拟磁盘设备,这将会导致磁盘名字的变化。比如 Xen 虚拟机中的半虚拟化设备使用 /dev/xvda 而标准的 Linux 半虚拟化设备使用 /dev/vda。准备迁移的 Linux 系统中存在对 /dev/hd* 和 /dev/sd* 磁盘分区名分散的关联,比如在 /etc/fstab 文件,启动初始化文件系统 ramfs 和一些解析磁盘设备的开机启动脚本文件中。V2V 迁移工具需要在整个磁盘上查找并修改这些关联。有一个简单的方法来避免这种情况: Linux 系统上主流的文件系统和交换分区类型可以使用 Lables 或 UUID 作为分区名。迁移时这些信息是被重点保护的,系统应该小心使用这些信息,一定不要使用设备作为分区名。另外,LVM 分区名和设备无关,在迁移中也不受影响。
- 网络硬件设备的改变。当系统迁移时,网络设备很可能产生变化。比如虚拟网络设备和物理网络设备的转化或者不同类型的网络设备之间的转变。但是是他们的 MAC 地址没有变化。MAC 地址是 IEEE 分配给物理设备制造商的,两个物理设备不会有相同的 MAC 地址;然而虚拟网络设备可能出现这种情况。所以在做虚拟机迁移时,你必须记录每一个网络设备的 MAC 地址,保证 MAC 地址和网络设备的对应关系。
- 内核不支持某些虚拟设备。某些 Linux 发行版没有 virtio 虚拟设备的驱动,可能是因为 Linux 发行版早于虚拟设备发布了;或者虚拟设备的驱动是闭源的;或者是在系统编译时去掉了。因此,有时我们另外需要一个完全不同的内核(比如 Xen 早期的版本就是这样的)。无论如何,在客户机上安装一个新的内核并且使之可以启动是一个很大的冒险,最好避免这样做。
- Xwindow 需要重新配置。与磁盘、网络设备一样,系统迁移后显示设备也会变化。理想的情况是 Xwindow 会自动处理这个的变化,探测所有的显示设备并且使用它发现的第一个设备。但是这不意味着所有的 Linux 发行版都会以这种方式工作。
- 网络环境的变化。静态 IP 地址和静态 DNS 解析在虚拟机迁移中
是
一个麻烦的事情。尽管不是必须的,但是最好配置系统从 DHCP 服务器自动获得所有的网络配置信息。 - CPU 的扩展指令集发生变化。迁移后的系统中,新的虚拟 CPU 或主板和旧的会有一些不同。CPU 的扩展指令集如 SSE,Vectors, NX 可能被加入或去掉。CPU 的型号和制造商信息可能被改变。因此,如果你想要优化虚拟系统上的软件,这可能是浪费时间并且导致系统崩溃。最好是使用通用的软件,让程序在每次启动的时 候检查运行环境和是否需要优化。实际上,实时迁移的状况比这个还要复杂,因为处理器可能在程序的运行的过程中被改变。目前为止还没有一个方案能很好的解决 这个问题。
如你所见,P2V 和 V2V 最大的问题在于硬件的改变。Linux 发行版本身应该可以处理所有的硬件变化:在系统启动的时候去检查所有的硬件,操作系统内核识别新的设备并寻找新的驱动处理它们 ,所有应用软件都不要和硬件绑定,设计一个很好的模式来应对突然的环境变化。
虚拟机所呈现出来的虚拟硬件通常与原始服务器上的物理硬件不同。P2V 迁移工具是这样解决这个问题的:
- VMware vCenter Converter:支持从诸如物理机、VMware 和 Microsoft 虚拟机格式以及某些第三方磁盘映像格式的源进行转换。他替代了旧的迁移工具 VMware Workstation Importer 和 VMware P2V Assistant。VMware vCenter Converter 可以支持和识别大多数服务器硬件类型。VMware vCenter Converter 提供以下两种克隆机制:热克隆(实时迁移)和冷克隆(使用 BootCD 的克隆)。使用热克隆时,VMware vCenter Converter 直接与源物理机上运行的操作系统通信,因此没有直接的硬件级别依赖性;使用冷克隆时,VMware vCenter Converter BootCD 提供一个可支持最新硬件的 Windows PE 引导环境,因此可以识别大多数物理服务器系统硬件。目前只支持基于 Microsoft Windows 的物理机迁移。
- XenConvert:是 XenServer 物理机到虚拟机的迁移工具。不仅可以迁移 Window 物理机到 XenServer 管理的虚拟机,而且可以导入 VMware 虚拟机 VMDK 格式和 OVF 包。
- Virtual Machine Manager 2008: 提供基于任务的向导,将自动执行大部分转换过程,以此来简化 P2V 转换。由于可通过编写脚本来完成 P2V 转换过程,因此可以通过 Windows PowerShell 命令行进行大规模的 P2V 转换。VMM2008 同时支持联机转换和脱机转换。
- Symantec Ghost:制作镜像文件和把镜像文件恢复到虚拟机。用来把需要迁移的服务器的硬盘通过网络做成镜像文件,然后通过网络把镜像文件恢复到虚拟机。
- Virt-p2v:RedHat 的开源迁移工具。
支持 V2V 迁移是虚拟机的管理工具的重要功能,所以各种虚拟化软件都提供了实现 V2V 迁移的模块或工具。V2V 在线迁移大大的减少了虚拟机的迁移的停机时间。这使动态迁移成了用户在需要不间断工作时迁移虚拟机的首选。通常的在线迁移方案,是虚拟机使用共享存储,迁 移时只拷贝虚拟机的内存。原理参见前面的小节“V2V 内存迁移技术”。
VMware VMotion
VMware 的在线迁移是由 VMotion 这个组件实现的 。Vmotion 的实时解决方案的特点是有其自己的 Cluster File System: VMFS,此外也支持 NFS。Vmotion 把整个虚拟机包括其完整状态封装在几个文件中,存放在 SAN/NAS 等共享存储中。迁移的过程是把内存和运行状态通过高速网从源复制到目标。
Citrix XenMotion
XenMotion 是 XenServer 的一项功能,能够将正在运行的虚拟机从一台 XenServer 主机上迁移到另外一台,而不带有停机的危险。这就意味着在整个迁移过程中,被移动的虚拟机在任意时刻都可以访问。XenMotion 的主要目的是在某台服务器进行计划维修时,使终端用户觉察不到应用程序出现过极短暂的中断,令整个服务过程正常顺畅。
Microsoft Hyper-V
微软的 Hyper-V 从 2.0 开始支持了动态迁移技术。利用 Hyper-V 动态迁移,在不中断任何服务或者不允许停机的前提下,将一个运行中的虚拟机从一个 Hyper-V 物理主机移动到另外一个上面,通过预复制迁移的虚拟机中的内存到目的主机。管理员或者脚本在启动动态迁移的时候控制选择此次迁移的目标计算机,客户使用被 迁移系统时是不会感觉到迁移在进行的。
QEMU-KVM/Libvirt
内核虚拟机 KVM 技术的原创公司 Qumranet 在 2008 年被 RedHat 收购以后,得到了全面快速的发展。在 2009 年发布的 Redhat Enterprise Linux 5.4 全面支持了 KVM 虚拟机,其中已经包含了离线迁移和在线迁移的技术。2010 年发布的 Redhat Enterprise Linux 5.5 和 Suse Linux Enterprise Server 11 Service Pack 1 中集成了图形化的 KVM 虚拟机管理工具 virt-manager,使虚拟机的迁移更加直观和方面。在本系列文章的下一篇中将详细介绍如何迁移 KVM 虚拟机。