V2V 指南
使用 virt-v2v 导入虚拟机
摘要
第 1 章 V2V 介绍
virt-v2v
命令提供了进行 V2V 操作的功能。
1.1. 什么是 virt-v2v?
virt-v2v
命令,可以把在其它虚拟机监控程序(hypervisor)上运行的虚拟机进行转换,从而可以在 Red Hat Enterprise Virtualization 或由 libvirt 管理的 KVM 上运行。当前,virt-v2v
可以转换在 Xen、KVM 和 VMware ESX / ESX(i) 上运行的 Red Hat Enterprise Linux 虚拟机和 Windows 虚拟机。在可能的情况下,virt-v2v
会在被转换的虚拟机上启用准虚拟化(virtio
)驱动。
virt-v2v
支持使用以下操作系统的虚拟机:
支持的虚拟机操作系统:
- Red Hat Enterprise Linux 3.9
- Red Hat Enterprise Linux 4
- Red Hat Enterprise Linux 5
- Red Hat Enterprise Linux 6
- Windows XP
- Windows Vista
- Windows 7
- Windows Server 2003
- Windows Server 2008
virt-v2v
支持以上列出的操作系统的所有子版本。
virt-v2v
支持以下虚拟机监控程序作为源系统:
支持的虚拟机监控程序源系统:
virt-v2v
支持以下虚拟机监控程序的子版本作为源系统:
- Xen — 红帽发行的所有版本
- KVM — 红帽发行的所有版本
- VMware ESX / ESX(i) — 版本 3.5、4.0、4.1、5.0、5.1
1.2. 关于本指南
1.2.1. 本指南针对的读者
1.2.2. Red Hat Enterprise Virtualization
1.3. 更多信息
- Red Hat Enterprise Linux — Virtualization Getting Started Guide:这个文档包括了对虚拟化概念、优点和工具的介绍,并包括了对 Red Hat virtualization 文档和产品的介绍信息。
- Red Hat Enterprise Linux — Virtualization Host Configuration and Guest Installation Guide:这个文档包括了在虚拟主机上安装虚拟化软件以及配置虚拟机的信息。
- Red Hat Enterprise Linux — Virtualization Administration Guide:这个文档包括了使用 virt-manager 和 virsh 作为主配置工具来管理主机、网络、存储和客户端系统(虚拟机)的信息。它还包括了与 libvirt 和 QEMU 相关的参考信息,以及进行故障排除的信息。
- Red Hat Enterprise Linux — Virtualization Security Guide:这个文档包括了红帽所提供的虚拟化安全技术的信息。另外,它还包括了在虚拟化环境中推荐使用的主机、虚拟机、共享基础架构和资源的安全解决方案。
- Red Hat Enterprise Linux — Virtualization Tuning and Optimization Guide:这个文档包括了与优化虚拟环境性能相关的信息。
- Red Hat Enterprise Linux — V2V Guide:这个文档(您现在阅读的文档)介绍了如何把 KVM、Xen 和 VMware ESX/ESX(i) 上运行的虚拟机导入到 Red Hat Enterprise Virtualization 和 libvirt 管理的 KVM 上的信息。
- Red Hat Enterprise Virtualization — 安装指南:这个文档包括了如何准备并设置 Red Hat Enterprise Virtualization 环境,以及如何把 Red Hat Enterprise Virtualization 环境升级到最新版本的信息。它还包括了如何设置虚拟机监测程序以及对 Red Hat Enterprise Virtualization 环境进行初始配置的信息。
- Red Hat Enterprise Virtualization — 管理指南:这个文档包括了在初始配置后,如果配置和管理一个 Red Hat Enterprise Virtualization 环境的信息。它介绍了如何在虚拟环境中添加虚拟主机、存储域和外部供应商,以及如何管理资源(如虚拟机、虚拟磁盘、模板)、对系统进行备份和恢复的信息。
- Red Hat Enterprise Virtualization — 用户指南:这个文档包括了如何使用 Red Hat Enterprise Virtualization 环境中的用户门户的信息。它介绍了用户门户中的“基本”和“扩展”标签页的信息,并介绍了如何创建并使用虚拟机和模板、如何对资源进行监控的信息。
- Red Hat Enterprise Virtualization — 技术指南:这个文档介绍了如何使用Red Hat Enterprise Virtualization 的 REST API、Python 和 Java 软件开发套件、命令行工具的信息。它同时还包括了对 Red Hat Enterprise Virtualization 所基于的虚拟技术概念的信息。
- Red Hat Enterprise Virtualization — Manager 发行注记:这个文档包括了与 Red Hat Enterprise Virtualization Manager 最新发行版本相关的信息。
- Red Hat Enterprise Virtualization — Technical Notes:这个文档列出了 Red Hat Enterprise Virtualization 最新发行版本和以前的发现版本中的不同。
注意
第 2 章 安装 virt-v2v
virt-v2v
需要从一个 Red Hat Enterprise Linux 64 位主机上运行,并需要在主机上安装 virt-v2v
。
过程 2.1. 安装 virt-v2v
在红帽客户门户网站(Red Hat Customer Portal)上订阅 virt-v2v 频道
virt-v2v
由红帽客户门户网站中的 Red Hat Enterprise Linux Server (v.6 for 64-bit x86_64) 或 Red Hat Enterprise Linux Workstation (v.6 for x86_64) 频道提供。请在安装virt-v2v
前把您的系统订阅到相应的频道。注意
Red Hat Network Classic(RHN)现在已经不再使用,用户需要使用红帽 Subscription Manager 进行注册。如需了解更多信息,请参阅 https://access.redhat.com/rhn-to-rhsm。安装所需的先决条件软件
- 在转换 Windows 虚拟机前,需要先安装 libguestfs-winsupport 软件包和 virtio-win 软件包。这些软件包提供了对 NTFS 的支持,以及 Windows 准虚拟化(para-virtualized)块设备和网络的驱动。
- 如果您试图转换使用 NTFS 却没有安装 libguestfs-winsupport 软件包的虚拟机,转换操作将会失败。
- 如果您试图转换没有安装 virtio-win 软件包的 Windows 虚拟机,转换操作将会失败。
Red Hat Enterprise Linux Server 6 的 libguestfs-winsupport 软件包可以通过 Red Hat Enterprise Linux Server V2V Tools for Windows (v. 6) 频道获得;virtio-win 软件包可以通过 Red Hat Enterprise Linux Server Supplementary (v. 6) 频道获得。要安装这些软件包,请确认您的系统有订阅这两个频道的权限,并以 root 的身份运行以下命令:# subscription-manager repos --enable rhel-6-server-v2vwin-1-rpms --enable rhel-6-server-supplementary-rpms
安装 virt-v2v 软件包
以 root 身份运行以下命令:yum install virt-v2v
virt-v2v 现在已经被安装,并可以在您的系统上使用。
第 3 章 为在由 libvirt 管理的 KVM 上运行转换虚拟机
virt-v2v
可以转换虚拟机来在 Red Hat Enterprise Linux(使用 libvirt 管理的 KVM)上运行。运行在 Xen、KVM、VMware ESX / ESX(i) 和 Hyper-V 环境中的虚拟机都可以被转换。Red Hat Enterprise Linux Virtualization 管理指南 中包括了对 libvirt
和 virsh
命令的介绍,您也可以使用 man virsh
命令来获得相关的信息。
3.1. 介绍
virt-v2v
命令可以对运行在其它虚拟机管理程序上的虚拟机进行转换来在由 libvirt 管理的 KVM 上运行。virt-v2v
支持转换运行以下操作系统的虚拟机:
- Red Hat Enterprise Linux 3.9
- Red Hat Enterprise Linux 4
- Red Hat Enterprise Linux 5
- Red Hat Enterprise Linux 6
- Windows XP
- Windows Vista
- Windows 7
- Windows Server 2003
- Windows Server 2008
- KVM
- libvirt 管理的 Xen
- VMware ESX / ESX(i) - 版本 3.5、4.0、4.1、5.0、5.1
virt-v2v
命令会在被转换的虚拟机上启用准虚拟化(virtio
)驱动。
virt-v2v
由红帽客户门户网站中的 Red Hat Enterprise Linux Server (v.6 for 64-bit x86_64) 或 Red Hat Enterprise Linux Workstation (v.6 for x86_64) 频道提供。
virt-v2v
工具程序需要有主机的 root 访问权限。
virt-v2v
新功能包括:
- 虽然
-op
和-osd
命令行选项仍然被支持,但是现在我们倾向使用-os
来替代它们。在使用这两个选项时,不会出现警告信息。 -of
命令行选项可以指定目标存储所使用的文件格式:raw 或 qcow2。使用这个功能可以把虚拟机存储格式从 raw 转换为 qcow2,或把 qcow2 转换为 raw。-oa
命令行选项可以指定目标存储所使用的分配策略:sparse 或 preallocated。使用这个功能可以在 sparse 和 preallocated 间进行转换,因此,现在可以支持 sparse 卷。- 现在的配置文件可以包括目标配置集,它指定了模板的存储位置、输出格式和分配策略。因此,用户可以通过使用
--profile<foo>
来替代-os<a> -op<b> -oa<oc>
。 - 支持转换 Windows 虚拟机。
virt-v2v
man 页来获得与功能相关的详细信息。
virt-v2v
,请确认系统已经订阅了所需的频道,然后运行:
# yum install virt-v2v
3.2. 为转换虚拟机做准备
virt-v2v
命令对运行在其它虚拟机管理程序上的虚拟机进行转换来在由 libvirt 管理的 KVM 上运行。它会为转换的虚拟机自动创建一个 libvirt 域。
图 3.1. 转换一个虚拟机
过程 3.1. 为转换虚拟机做准备
- 创建一个本地存储域来处理数据存储。
virt-v2v
会在虚拟机导入的过程中把虚拟机的存储复制到一个本地定义的 libvirt 存储池中。这个存储池可以使用任何 libvirt 工具创建,并可以是任何类型。最简单的方法是使用virt-manager
创建一个新存储池。请参阅 Red Hat Enterprise Linux Virtualization 管理指南来获得更多使用virt-manager
或virsh
创建存储池的信息。 - 创建本地网络接口本地机器需要有适当的网络设备(通常是一个网桥)来为被转换的虚拟机进行网络连接。 这个网桥可以使用主机上的标准工具进行创建。从 libvirt 版本 0.8.3 开始,
virt-manager
也可以创建和管理网桥。如需了解更多相关信息,请参阅 Red Hat Enterprise Linux Virtualization Host Configuration and Guest Installation Guide 或 Red Hat Enterprise Linux Virtualization 管理指南。 - 在
virt-v2v.conf
中指定网络映射。这一步是可选的,多数情况下都不需要它。如果您的虚拟机有多个网络接口,则需要编辑/etc/virt-v2v.conf
来指定所有网络接口的映射信息。您可以使用-f
参数来指定另外一个virt-v2v.conf
文件。如果您的虚拟机只有一个网络接口,则只需要使用--network
或--bridge
参数,而不需要修改virt-v2v.conf
。 - 在
virt-v2v.conf
中为转换创建一个配置集。这一步是可选的。配置集指定了转换的方法、存储配置、输出格式和分配策略。当定义了一个配置集后,就可以使用--profile
调用配置集,而不需要再单独提供-o
、-os
、-of
和-oa
参数。请参阅 virt-v2v.conf(5) 来获得更详细的信息。
3.2.1. 为转换一个运行 Linux 的虚拟机做准备
过程 3.2. 为转换一个运行 Linux 的虚拟机做准备
- 获得相关的软件。作为转换过程的一般分,
virt-v2v
可能需要在虚拟机上安装一个新内核和驱动。如果被转换的虚拟机已经注册到了 Red Hat Subscription Management(RHSM),所需的软件包会被自动下载。当无法使用 Red Hat Subscription Management(RHSM)时,virt-v2v.conf
文件包括了为了完成这个操作所需的 RPM 列表。您需要手动从红帽客户门户网站中下载这些 RPM。并保存在path-root
配置项所指定的目录中(默认目录是/var/lib/virt-v2v/software/
)。如果没有转换所需的软件,virt-v2v
将会显示一个与 例 3.1 “缺少所需软件错误” 相似的错误信息。例 3.1. 缺少所需软件错误
virt-v2v: Installation failed because the following files referenced in the configuration file are required, but missing: rhel/6/kernel-2.6.32-128.el6.x86_64.rpm rhel/6/ecryptfs-utils-82-6.el6.x86_64.rpm rhel/6/ecryptfs-utils-82-6.el6.i686.rpm
- 对每个缺少的软件包重复以下操作来获得它们:
- 登录到红帽客户门户网站:https://access.redhat.com/。
- 在红帽客户门户网站中,选下载 > 产品下载 > Red Hat Enterprise Linux。
- 选择所需的 Product Variant、Version,选择 Packages 标签页。在 Filter 项中输入错误信息中显示的软件包名。以 例 3.1 “缺少所需软件错误” 为例,第一个软件包是 kernel-2.6.32-128.el6.x86_64
- 一组软件包会被显示,选择和错误信息中显示的软件包名完全相同的软件包。这会打开它的详情页,其中包括了对这个软件包的详细信息。或者点所需软件包旁的 Download Latest 来下载最新的软件包。
- 把下载的软件包保存在
/var/lib/virt-v2v/software
中的相应目录中。对于 Red Hat Enterprise Linux 6,这个目录是/var/lib/virt-v2v/software/rhel/6
。
3.2.2. 为转换一个本地 Xen 虚拟机做准备
过程 3.3. 为转换一个本地 Xen 虚拟机做准备
- 获得虚拟机的 XML。
virt-v2v
使用一个 libvirt 域表述(XML 文件)来决定虚拟机的当前配置(包括它的存储位置)。在开始进行转换前,使用以下命令从运行虚拟机的主机上获得 XML:virsh dumpxml guest_name > guest_name.xml
libvirt 需要连接到运行 Xen 的虚拟机监控程序后才能获得它的元数据,因此获得 XML 的过程会需要一个 Xen 内核。转换虚拟机的过程已经针对 KVM 进行了优化,所以用户可以在运行 Xen 内核时获得域数据(XML),然后再使用一个 KVM 内核进行转换。这比在运行 Xen 内核的系统上直接进行转换更高效。
3.2.3. 为转换一个运行 Windows 的虚拟机做准备
重要
virt-v2v
不支持对 Windows 恢复控制台(Recovery Console) 的转换。如果一个虚拟机安装了恢复控制台,并且 VirtIO 在转换过程中被启用,引导到恢复控制台将会导致一个错误。
- 在运行
virt-v2v
的主机上安装 libguestfs-winsupport 软件包。这个软件包提供了对 NTFS(许多 Windows 系统都需要使用它)的支持。libguestfs-winsupport 软件包由 RHEL V2VWIN (v. 6 for 64-bit x86_64) 频道提供。请确认您的系统订阅到这个频道后以 root 身份运行以下命令:yum install libguestfs-winsupport
如果您在没有安装 libguestfs-winsupport 软件包的情况下转换使用 NTFS 的虚拟机,这个转换过程将失败。与 例 3.2 “在没有安装 libguestfs-winsupport 的情况下转换 Windows 虚拟机出现的错误信息” 相似的错误信息将会被显示。例 3.2. 在没有安装 libguestfs-winsupport 的情况下转换 Windows 虚拟机出现的错误信息
No operating system could be detected inside this disk image. This may be because the file is not a disk image, or is not a virtual machine image, or because the OS type is not understood by virt-inspector. If you feel this is an error, please file a bug report including as much information about the disk image as possible.
- 在运行
virt-v2v
的主机上安装 virtio-win 软件包。这个软件包为 Windows 虚拟机提供了准虚拟化的块设备和网络驱动。virtio-win 软件包由 RHEL V2VWIN (v. 6 for 64-bit x86_64) 频道提供。请确认您的系统订阅到这个频道后以 root 身份运行以下命令:yum install virtio-win
如果您在没有安装 virtio-win 软件包的情况下转换 Windows 虚拟机,这个转换过程将失败。与 例 3.3 “在没有安装 virtio-win 的情况下转换 Windows 虚拟机出现的错误信息” 相似的错误信息会被显示。例 3.3. 在没有安装 virtio-win 的情况下转换 Windows 虚拟机出现的错误信息
virt-v2v: Installation failed because the following files referenced in the configuration file are required, but missing: /usr/share/virtio-win/drivers/i386/Win2008
注意
3.3. 转换一个虚拟机
virt-v2v
命令来执行实际的转换过程。本节提供了实际转换虚拟机的步骤,以及 virt-v2v
的命令语法。
例 3.4. 典型的 virt-v2v 转换时间
win2k3r2-pv-32.img: 100% [===========================================]D 0h02m57s virt-v2v: win2k3r2-pv-32 configured with virtio drivers.
3.3.1. 使用 virt-v2v 转换一个本地虚拟机
virt-v2v
命令可以对运行在其它虚拟机管理程序上的虚拟机进行转换来在由 libvirt 管理的 KVM 上运行。它的命令语法是:
virt-v2v -i libvirtxml -op pool --bridge bridge_name guest_name.xml virt-v2v -op pool --network netname guest_name virt-v2v -ic esx://esx.example.com/?no_verify=1 -op pool --bridge bridge_name guest_name
virt-v2v
的参数列表,请参阅 第 7 章 参考信息。
3.3.2. 转换一个远程 KVM 虚拟机
virt-v2v -ic qemu+ssh://root@vmhost.example.com/system -op pool --bridge bridge_name guest_name
vmhost.example.com
是运行虚拟机的主机;pool
是用来保存映像的本地存储池;bridge_name 是连接到被转换虚拟机的网络的本地逻辑网桥;guest_name 是 Xen 虚拟机的名称。
--network
参数连接到一个本地管理的网络上。如果您的虚拟机有多个网络接口,编辑 /etc/virt-v2v.conf
来指定所有网络接口的映射信息。
注意
virt-v2v
需要源虚拟机的映像存在于一个存储池中。如果虚拟机没有存在于一个存储池中,您需要创建一个。
3.3.3. 转换一个本地 Xen 虚拟机
virt-v2v -i libvirtxml -op pool --bridge bridge_name guest_name.xml
pool
是保存映像的本地存储池;bridge_name
是连接到被转换虚拟机的网络的本地逻辑网桥;guest_name.xml
是到虚拟机导出的 XML 的路径。
--network
参数连接到一个本地管理的网络上。如果您的虚拟机有多个网络接口,编辑 /etc/virt-v2v.conf
来指定所有网络接口的映射信息。
kernel-xen
或 kernel-xenU
),virt-v2v
将会在转换的过程中试图安装一个新内核。为了避免这一步,您可以在进行转换前除了安装 Xen 内核外还安装一个普通内核(它的名字中没有到 hypervisor 的引用)。您不能把这个新安装的内核作为默认内核,否则 Xen 将无法被引导。virt-v2v
将会在转换过程中把它作为默认内核。
注意
virt-v2v
需要源虚拟机的映像存在于一个存储池中。如果虚拟机没有存在于一个存储池中,您需要创建一个。请联系红帽技术支持来协助您创建适当的存储池。
注意
3.3.4. 转换一个远程 Xen 虚拟机
virt-v2v -ic qemu+ssh://root@vmhost.example.com/system -op pool --bridge bridge_name guest_name
vmhost.example.com
是运行虚拟机的主机;pool
是用来保存映像的本地存储池;bridge_name 是连接到被转换虚拟机的网络的本地逻辑网桥;guest_name 是 Xen 虚拟机的名称。
--network
参数连接到一个本地管理的网络上。如果您的虚拟机有多个网络接口,编辑 /etc/virt-v2v.conf
来指定所有网络接口的映射信息。
kernel-xen
或 kernel-xenU
),virt-v2v
将会在转换的过程中试图安装一个新内核。为了避免这一步,您可以在进行转换前除了安装 Xen 内核外还安装一个普通内核(它的名字中没有到 hypervisor 的引用)。您不能把这个新安装的内核作为默认内核,否则 Xen 将无法被引导。virt-v2v
将会在转换过程中把它作为默认内核。
注意
virt-v2v
需要源虚拟机的映像存在于一个存储池中。如果虚拟机没有存在于一个存储池中,您需要创建一个。请联系红帽技术支持来协助您创建适当的存储池。
3.3.5. 转换一个 VMware ESX / ESX(i) 虚拟机
重要
virt-v2v -ic esx://esx.example.com/ -op pool --bridge bridge_name guest_name
esx.example.com
是 VMware ESX / ESX(i) 服务器;pool
是用来保存映像的本地存储池;bridge_name
是连接到被转换虚拟机的网络的本地逻辑网桥;guest_name
是虚拟机的名称。
--network
参数连接到一个本地管理的网络上。如果您的虚拟机有多个网络接口,编辑 /etc/virt-v2v.conf
来指定所有网络接口的映射信息。
3.3.5.1. 到 ESX / ESX(i) 服务器的用户身份验证
virt-v2v
支持使用密码进行验证。它会从 $HOME/.netrc
中读出密码,这个文件的格式在 netrc(5)
man 页中有所介绍。例如:
machine esx.example.com login root password s3cr3t
注意
.netrc
文件的权限设置需要是 0600,这样才可以被 virt-v2v
读取。
3.3.5.2. 使用无效的证书连接 ESX / ESX(i) 服务器
'?no_verify=1'
)。例如:
... -ic esx://esx.example.com/?no_verify=1 ...
3.3.6. 转换一个运行 Windows 的虚拟机
virt-v2v -i libvirtxml -o rhev -osd storage.example.com:/exportdomain --network rhevm guest_name.xml
storage.example.com:/exportdomain
是导出存储域。
--network
参数连接到一个本地管理的网络上。如果您的虚拟机有多个网络接口,编辑 /etc/virt-v2v.conf
来指定所有网络接口的映射信息。
kernel-xen
或 kernel-xenU
),virt-v2v
将会在转换的过程中试图安装一个新内核。为了避免这一步,您可以在进行转换前除了安装 Xen 内核外还安装一个普通内核(它的名字中没有到 hypervisor 的引用)。您不能把这个新安装的内核作为默认内核,否则 Xen 将无法被引导。virt-v2v
将会在转换过程中把它作为默认内核。
3.4. 运行转换的虚拟机
virt-v2v
会为转换的虚拟机创建一个新的 libvirt 域(与被转换虚拟机的原始名同名)。它可以使用 libvirt 工具(如 virt-manager
)启动。
注意
virt-v2v
还不能重新配置虚拟机的网络配置。如果被转换的虚拟机没有连接到它们原来的相同子网中,这个虚拟机的网络配置就可能需要被手工更新。
第 4 章 为在 Red Hat Enterprise Virtualization 上运行转换虚拟机
virt-v2v
可以转换 Xen, KVM and VMware ESX / ESX(i) 环境中的虚拟机来在 Red Hat Enterprise Virtualization 上运行。在对虚拟机转换前,您需要把一个导出存储域附加到正在使用的 Red Hat Enterprise Virtualization 数据中心上。第 4.2 节 “附加一个导出存储域” 介绍了附加导出存储域的过程。如需了解更多关于导出存储域的信息,请参阅 Red Hat Enterprise Virtualization 管理指南。
4.1. 支持的转换存储输出格式
virt-v2v
命令会把数据写到一个导出存储域,它需要是 NFS。
注意
virt-v2v
无法检测数据中心的类型,用户需要进行手工检查。
数据域类型 | 存储格式 | 是否支持 |
---|---|---|
NFS | raw | 支持 |
qcow2 | 不支持 | |
FC/iSCSI | raw | 支持 |
qcow2 | 不支持 |
数据域类型 | 存储格式 | 是否支持 |
---|---|---|
NFS | raw | 支持 |
qcow2 | 支持 | |
FC/iSCSI | raw | 不支持 |
qcow2 | 支持 |
-of
和 -oa
参数指定了不同的数据格式和分配策略,被 virt-v2v
所转换的虚拟机的数据格式和分配策略会和转换前的相同。如果需要把使用稀疏分配的虚拟机进行转换来在 FC 或 iSCSI 数据中心运行时,它的存储格式需要被转换为 qcow2(在运行 virt-v2v
命令时使用 -of qcow2 -oa sparse
参数)。请注意,在 raw 和 qcow2 格式间进行转换需要消耗大量资源,整个虚拟机转换过程所需的时间可能需要加倍。
重要
virt-v2v
可以向预分配 qcow2 存储中写数据,但是 Red Hat Enterprise Virtualization 并不支持这种格式。把它导入到 Red Hat Enterprise Virtualization 的过程将失败。
4.2. 附加一个导出存储域
注意
过程 4.1. 附加一个导出存储域
- 登录到 Red Hat Enterprise Virtualization 管理门户(Administration Portal)。点数据中心标签页。选择导出存储域需要被附加到的数据中心。
- 在详情框中选择存储标签页。
- 点添加保存映像文件的存储位置。
图 4.1. 附加一个导出域
- 附加导出域对话框会被显示。从列表中选择所需的导出域。
- 点存储标签页中显示,它的状态是 Locked,然后变为 Inactive。按钮。新的导出存储会在详情框中的
- 在详情框中的存储标签页中选择新添加的导出存储域,点激活按钮。
- 经过一段时间后,所选的导出域会被激活,它的状态变为 Active。
4.3. 转换一个虚拟机
virt-v2v
命令可以把在其它虚拟机监控程序(hypervisor)上运行的虚拟机进行转换来在 Red Hat Enterprise Virtualization 上运行。它会自动打包虚拟机的映像和元数据,然后把它们上传到 Red Hat Enterprise Virtualization 的导出存储域中。如需了解更多关于导出存储域的信息,请参阅 第 4.2 节 “附加一个导出存储域”。virt-v2v
会在转换前对存储进行备份。
图 4.2. 转换一个虚拟机
图 4.3. 导入一个虚拟机
4.3.1. 为转换虚拟机做准备
过程 4.2. 为转换虚拟机做准备
- 创建一个 NFS 导出域。
virt-v2v
可以把被转换的虚拟机直接传输到一个 NFS 导出存储域中,导出存储域中的虚拟机可以被导入到 Red Hat Enterprise Virtualization 的一个数据中心中。这个存储域必须可以被运行virt-v2v
的机器挂载,在把虚拟机导出到 Red Hat Enterprise Virtualization 的导出域时,virt-v2v
命令需要以 root 用户身份运行。注意
导出存储域作为一个 NFS 共享被访问。在默认的情况下,Red Hat Enterprise Linux 6 使用 NFSv4,这不需要进行其它配置。但是,对于使用 NFSv2 和 NFSv3 的客户端,用来运行virt-v2v
的系统需要运行rpcbind
和nfslock
服务,网络也需要被配置为运行 NFS 访问存储服务器。如需了解更多相关信息,请参阅 Red Hat Enterprise Linux Storage Administration Guide。 - 在
virt-v2v.conf
中指定网络映射。这一步是可选的,多数情况下都不需要它。如果您的虚拟机有多个网络接口,则需要编辑/etc/virt-v2v.conf
来指定所有网络接口的映射信息。您可以使用-f
参数来指定另外一个virt-v2v.conf
文件。如果您转换一个虚拟机来在 libvirt 和 Red Hat Enterprise Virtualization 上运行时,您需要为每个转换分别使用一个独立的virt-v2v.conf
文件。这是因为,转换的网桥在 libvirt 和 Red Hat Enterprise Virtualization 中需要不同的配置。如果您的虚拟机只有一个网络接口,则只需要使用--network
或--bridge
参数,而不需要修改virt-v2v.conf
。 - 在
virt-v2v.conf
中为转换操作创建一个配置集。这一步是可选的。配置集指定了转换的方法、存储配置、输出格式和分配策略。当定义了一个配置集后,就可以使用--profile
调用配置集,而不需要再单独提供-o
、-os
、-of
和-oa
参数。请参阅 virt-v2v.conf(5) 来获得更详细的信息。
4.3.1.1. 为转换一个运行 Linux 的虚拟机做准备
过程 4.3. 为转换一个运行 Linux 的虚拟机做准备
- 获得相关的软件。作为转换过程的一般分,
virt-v2v
可能需要在虚拟机上安装一个新内核和驱动。如果被转换的虚拟机已经注册到了 Red Hat Subscription Management(RHSM),所需的软件包会被自动下载。当无法使用 Red Hat Subscription Management(RHSM)时,virt-v2v.conf
文件包括了为了完成这个操作所需的 RPM 列表。您需要手动从红帽客户门户网站中下载这些 RPM。并保存在path-root
配置项所指定的目录中(默认目录是/var/lib/virt-v2v/software/
)。如果没有转换所需的软件,virt-v2v
将会显示一个与 例 3.1 “缺少所需软件错误” 相似的错误信息。 - 对每个缺少的软件包重复以下操作来获得它们:
- 登录到红帽客户门户网站:https://access.redhat.com/。
- 在红帽客户门户网站中,选下载 > 产品下载 > Red Hat Enterprise Linux。
- 选择所需的 Product Variant、Version,选择 Packages 标签页。在 Filter 项中输入错误信息中显示的软件包名。以 例 3.1 “缺少所需软件错误” 为例,第一个软件包是 kernel-2.6.32-128.el6.x86_64
- 一组软件包会被显示,选择和错误信息中显示的软件包名完全相同的软件包。这会打开它的详情页,其中包括了对这个软件包的详细信息。或者点所需软件包旁的 Download Latest 来下载最新的软件包。
- 把下载的软件包保存在
/var/lib/virt-v2v/software
中的相应目录中。对于 Red Hat Enterprise Linux 6,这个目录是/var/lib/virt-v2v/software/rhel/6
。
4.3.1.2. 为转换一个运行 Windows 的虚拟机做准备
重要
virt-v2v
不支持对 Windows 恢复控制台(Recovery Console) 的转换。如果一个虚拟机安装了恢复控制台,并且 VirtIO 在转换过程中被启用,引导到恢复控制台将会导致一个错误。
重要
过程 4.4. 为转换一个运行 Windows 的虚拟机做准备
- 在运行
virt-v2v
的主机上安装 libguestfs-winsupport 软件包。这个软件包提供了对许多 Windows 系统都使用的 NTFS 的支持。libguestfs-winsupport 软件包由 RHEL V2VWIN (v. 6 for 64-bit x86_64) 频道提供。请确认您的系统已经订阅了这个频道,并以 root 的身份运行以下命令:yum install libguestfs-winsupport
如果您在没有安装 libguestfs-winsupport 软件包的情况下转换使用 NTFS 的虚拟机,这个转换过程将失败。与 例 4.1 “在没有安装 libguestfs-winsupport 的情况下转换 Windows 虚拟机出现的错误信息” 相似的错误信息会被显示:例 4.1. 在没有安装 libguestfs-winsupport 的情况下转换 Windows 虚拟机出现的错误信息
No operating system could be detected inside this disk image. This may be because the file is not a disk image, or is not a virtual machine image, or because the OS type is not understood by virt-inspector. If you feel this is an error, please file a bug report including as much information about the disk image as possible.
- 在运行
virt-v2v
的主机上安装 virtio-win 软件包。这个软件包为 Windows 虚拟机提供了准虚拟化块设备和网络的驱动。virtio-win 软件包由 RHEL V2VWIN (v. 6 for 64-bit x86_64) 频道提供。请确认您的系统订阅到这个频道后以 root 身份运行以下命令:yum install virtio-win
如果您在没有安装 virtio-win 软件包的情况下转换 Windows 虚拟机,这个转换过程将失败。与 例 3.3 “在没有安装 virtio-win 的情况下转换 Windows 虚拟机出现的错误信息” 相似的错误信息会被显示。 - 把 guest 工具程序 ISO 上传到 ISO 存储域。请注意,转换的过程并不需要 guest 工具程序 ISO。但是,我们推荐所有运行在 Red Hat Enterprise Virtualization 中的 Windows 虚拟机都使用它。Red Hat Enterprise Virtualization Manager 会在转换过程完成后在使用 guest 工具程序的虚拟机上安装红帽的 Windows 启动程序。请参阅 第 7.2.2 节 “Windows 虚拟机的配置改变” 来获得更详细的相关信息。按照以下方法找到并上传 guest 工具程序 ISO:
- 找到 guest 工具程序 ISO。guest 工具程序 IOS 以 rhev-guest-tools-iso.rpm 的形式在红帽客户门户网站中提供,这个 RPM 文件会在 Red Hat Enterprise Virtualization Manager 中被安装。当 Red Hat Enterprise Virtualization Manager 安装完成后,guest 工具程序 ISO 将位于
/usr/share/rhev-guest-tools-iso/rhev-tools-setup.iso
。 - 上传 guest 工具程序 ISO。使用 ISO uploader 把 guest 工具程序 ISO 上传到 ISO 存储域。请参阅 Red Hat Enterprise Virtualization 管理指南中的相关章节来获得更多信息。
4.3.1.3. 为转换一个本地 Xen 虚拟机做准备
过程 4.5. 为转换一个本地 Xen 虚拟机做准备
- 获得虚拟机的 XML。
virt-v2v
使用一个 libvirt 域表述(XML 文件)来决定虚拟机的当前配置(包括它的存储位置)。在开始进行转换前,使用以下命令从运行虚拟机的主机上获得 XML:virsh dumpxml guest_name > guest_name.xml
libvirt 需要连接到运行 Xen 的虚拟机监控程序后才能获得它的元数据,因此获得 XML 的过程会需要一个 Xen 内核。转换虚拟机的过程已经针对 KVM 进行了优化,所以用户可以在运行 Xen 内核时获得域数据(XML),然后再使用一个 KVM 内核进行转换。这比在运行 Xen 内核的系统上直接进行转换更高效。
4.3.2. 转换一个虚拟机
virt-v2v
命令来实际执行转换过程。本节提供了实际转换虚拟机的步骤,以及 virt-v2v
的命令语法。
例 4.2. 典型的 virt-v2v 转换时间
win2k3r2-pv-32.img: 100% [===========================================]D 0h02m57s virt-v2v: win2k3r2-pv-32 configured with virtio drivers.
4.3.2.1. virt-v2v
virt-v2v
命令可以对运行在其它虚拟机管理程序上的虚拟机进行转换来在 Red Hat Enterprise Virtualization 上运行。它的命令语法是:
virt-v2v -i libvirtxml -o rhev -os storage.example.com:/exportdomain --network rhevm guest_name.xml virt-v2v -o rhev -os storage.example.com:/exportdomain --network rhevm guest_name virt-v2v -ic esx://esx.example.com/?no_verify=1 -o rhev -os storage.example.com:/exportdomain --network rhevm guest_name
virt-v2v
可以使用的完整参数介绍。
重要
virt-v2v
还不支持对带有多于 4 个 IDE 磁盘的虚拟机进行转换来在 Red Hat Enterprise Virtualization 中运行。转换带有 5 个或更多磁盘的虚拟机的操作将会失败。
4.3.2.2. 转换一个本地 Xen 虚拟机
virt-v2v -i libvirtxml -o rhev -os storage.example.com:/exportdomain --network rhevm guest_name.xml
storage.example.com:/exportdomain
是输出存储域;rhevm
是被转换的虚拟机网络连接到的本地管理网络;guest_name.xml
是到虚拟机输出的 xml 的路径。
--bridge
参数连接到一个本地管理的网络上。如果您的虚拟机有多个网络接口,编辑 /etc/virt-v2v.conf
来指定所有网络接口的映射信息。
virt-v2v -ic xen:/// -o rhev -os storage.example.com:/exportdomain --network rhevm guest_name
storage.example.com:/exportdomain
是输出存储域;rhevm
是被转换的虚拟机网络连接到的本地管理网络;guest_name 是 Xen 虚拟机的名称。
--bridge
参数连接到一个本地管理的网络上。如果您的虚拟机有多个网络接口,编辑 /etc/virt-v2v.conf
来指定所有网络接口的映射信息。
kernel-xen
或 kernel-xenU
),virt-v2v
将会在转换的过程中试图安装一个新内核。为了避免这一步,您可以在进行转换前除了安装 Xen 内核外还安装一个普通内核(它的名字中没有到 hypervisor 的引用)。您不能把这个新安装的内核作为默认内核,否则 Xen 将无法被引导。virt-v2v
将会在转换过程中把它作为默认内核。
4.3.2.3. 转换一个远程 Xen 虚拟机
重要
virt-v2v
运行失败。这一点对于带有大磁盘的虚拟机尤其重要,因为传输大磁盘所需的时间通常都会很长。
virt-v2v -o rhev -ic xen+ssh://root@vmhost.example.com -os storage.example.com:/exportdomain --network rhevm guest_name
vmhost.example.com
是运行虚拟机的主机;storage.example.com:/exportdomain
是输出存储域;rhevm
是被转换的虚拟机网络连接到的本地管理网络;guest_name 是 Xen 虚拟机的名称。
--bridge
参数连接到一个本地管理的网络上。如果您的虚拟机有多个网络接口,编辑 /etc/virt-v2v.conf
来指定所有网络接口的映射信息。
kernel-xen
或 kernel-xenU
),virt-v2v
将会在转换的过程中试图安装一个新内核。为了避免这一步,您可以在进行转换前除了安装 Xen 内核外还安装一个普通内核(它的名字中没有到 hypervisor 的引用)。您不能把这个新安装的内核作为默认内核,否则 Xen 将无法被引导。virt-v2v
将会在转换过程中把它作为默认内核。
4.3.2.4. 转换一个本地 KVM 虚拟机
过程 4.6. 转换一个本地 KVM 虚拟机
停止虚拟机。
- 确认在运行 v2v 前已经停止了虚拟机。如果虚拟机运行于一个集群的 Red Hat Enterprise Linux HA 虚拟机环境中,请使用以下命令在集群节点上停止并禁用虚拟机资源:
clusvcadm -d vm:<guest>
- 在停止虚拟机后,运行
virsh define <path-to-guest.xml>
把所停止的虚拟机的控制权交给 libvirt。这个命令使virt-v2v
可以识别虚拟机,并启用它来进行转换。
转换虚拟机。
运行以下命令转换虚拟机:virt-v2v -o rhev -os storage.example.com:/exportdomain --network rhevm guest_name
其中,storage.example.com:/exportdomain
是输出存储域;rhevm
是被转换的虚拟机网络连接到的本地管理网络;guest_name 是 KVM 虚拟机的名称。如果您的虚拟机只有一个网络接口,您也可以使用--bridge
参数连接到一个本地管理的网络上。如果您的虚拟机有多个网络接口,编辑/etc/virt-v2v.conf
来指定所有网络接口的映射信息。
4.3.2.5. 转换一个远程 KVM 虚拟机
重要
virt-v2v
运行失败。这一点对于带有大磁盘的虚拟机尤其重要,因为传输大磁盘所需的时间通常都会很长。
virt-v2v -ic qemu+ssh://root@kvmhost.example.com/system -o rhev -os storage.example.com:/exportdomain --network rhevm guest_name
kvmhost.example.com
是运行虚拟机的主机;storage.example.com:/exportdomain
是输出存储域;rhevm
是被转换的虚拟机网络连接到的本地管理网络;guest_name 是 KVM 虚拟机的名称。
--bridge
参数连接到一个本地管理的网络上。如果您的虚拟机有多个网络接口,编辑 /etc/virt-v2v.conf
来指定所有网络接口的映射信息。
4.3.2.6. 转换一个 VMware ESX / ESX(i) 虚拟机
重要
virt-v2v -ic esx://esx.example.com/ -o rhev -os storage.example.com:/exportdomain --network rhevm guest_name
storage.example.com:/exportdomain
是输出存储域;rhevm
是被转换的虚拟机网络连接到的本地管理网络;guest_name 是虚拟机的名称。
--bridge
参数连接到一个本地管理的网络上。如果您的虚拟机有多个网络接口,编辑 /etc/virt-v2v.conf
来指定所有网络接口的映射信息。
到 ESX / ESX(i) 服务器的连接需要进行用户身份验证。virt-v2v
支持使用密码进行验证。它会从 $HOME/.netrc
中读出密码,这个文件的格式在 netrc(5)
中有所介绍。例如:
machine esx.example.com login root password s3cr3t
注意
.netrc
文件的权限设置需要是 0600,这样才可以被 virt-v2v
读取。
在非生产环境中,ESX / ESX(i) 服务器可能会使用一个无效的证书(如一个自签发的证书)。在这种情况下,证书检查的功能可以被禁用(在连接 URI 中使用 ?no_verify=1
)。例如:
... -ic esx://esx.example.com/?no_verify=1 ...
4.3.3. 导入并运行转换的虚拟机
virt-v2v
会把导入的虚拟机上传到指定的导出域中。执行以下步骤来导入并运行转换的虚拟机:
过程 4.7. 导入并运行转换的虚拟机
- 在 Red Hat Enterprise Virtualization 管理门户的存储标签页中选择导入存储域。所选的导入存储域的状态必须是 Active。
- 在详情框中选择 VM 导入标签页来列出可以被导入的虚拟机列表。
- 选择一个或多个虚拟机后点导入虚拟机窗口将被打开。。
- 在下拉菜单中,选择数据中心的默认存储域、集群和集群配额。
- 选择 Collapse 快照来删除快照的恢复点,并包括虚拟机所基于的模板。点 导入虚拟机。
目前,virt-v2v
还不能重新配置虚拟机的网络配置。如果被转换的虚拟机没有连接到它们原来的相同子网中,这个虚拟机的网络配置就可能需要被手工更新。
4.3.4. v2v 操作的自动化脚本
过程 4.8. v2v 操作的自动化脚本
- 使用
virt-v2v
转换虚拟机,并把它们复制到导出存储域中。这一步需要在一个 Linux 主机上运行。第 4.3.2 节 “转换一个虚拟机” 介绍了这一步的详细信息。 - 在转换完成后,使用 Red Hat Enterprise Virtualization 管理门户从导出存储域中导入虚拟机。这一步需要在 Red Hat Enterprise Virtualization Manager 服务器上运行。如需了解更多关于使用 Red Hat Enterprise Virtualization 管理门户导入虚拟机的信息,请参阅 Red Hat Enterprise Virtualization 管理指南。
图 4.4. 使用 Red Hat Enterprise Virtualization 管理门户导入虚拟机
另外,还可以使用 Python SDK 或命令行来从导出存储域中导入虚拟机:使用 SDK 导入虚拟机:例 4.3. 使用 SDK 从导出存储域中导入虚拟机
api = API(url="http(s)://...:.../api", username="...", password="...", filter=False, debug=True) sd = api.storagedomains.get(id="from-sd-id") import_candidate = sd.vms.get(id="vm-to-import") import_candidate.import_vm(action=params.Action( cluster=api.clusters.get(id="to-cluster-id"), storage_domain=api.storagedomains.get(id="to-sd-id")))
注意
在使用 SDK 方法时,可以使用name=
来获取或传递项。要通过命令行导入虚拟机,请连接到 Red Hat Enterprise Virtualization Manager 的 shell,并使用以下命令:例 4.4. 使用命令行从导出存储域中导入虚拟机
action vm "vm-to-import" import_vm --storagedomain-identifier "from-sd-id" --cluster-id "to-cluster-id" --storage_domain-id "to-sd-id"
注意
在使用命令行方法时,可以使用name=
来获取或传递项。
4.3.5. 对大量 v2v 操作进行脚本自动化
图 4.5. 对大量 v2v 操作进行脚本自动化
- 从源虚拟机监控系统上获得虚拟机的映像。
- 对虚拟机映像进行打包,并复制到导出存储域。
- 使用一个到 Red Hat Enterprise Virtualization Manager 的远程调用来通知它导入虚拟机。
- Manager 从导出存储域中导入虚拟机。
过程 4.9. 配置并运行大量 v2v 操作的自动化脚本
- 确认 Red Hat Enterprise Virtualization Manager 启用了 REST API,并可以被运行 v2v 脚本的 Linux 访问。如需了解更多关于 REST API 的信息,请参阅 Red Hat Enterprise Virtualization Developer Guide。
- 在 Linux 主机上,创建包括以下内容的
v2v.sh
文件。请确认您根据您的具体环境对脚本中的相应内容进行了修改。例 4.5. 单独主机的 v2v 脚本
#!/bin/sh # Declare all VMs to import XENDOMAINS=("rhelxen" "rhel5") KVMDOMAINS=("rhelkvm") VMWAREVMS=("rhel54vmware") # Iterate through each Xen domain, performing the conversion for domain in ${XENDOMAINS[@]} do virt-v2v -ic xen:///localhost -o rhev -os storage.example.com:/exportdomain --network rhevm $domain done # Iterate through each KVM domain, performing the conversion for domain in ${KVMDOMAINS[@]} do virt-v2v -o rhev -os storage.example.com:/exportdomain --network rhevm $domain done # Iterate through each VMware VM, performing the conversion for vm in ${VMWAREVMS[@]} do virt-v2v -ic esx://esx.example.com/?no_verify=1 -o rhev -os storage.example.com:/exportdomain --network rhevm $vm done # Call the import VM procedure remotely on the RHEV Manager export BASE_URL='https://[rhevm-host]' export HTTP_USER='user@internal' export HTTP_PASSWORD='password' curl -o rhevm.cer http://[rhevm-host]/ca.crt # Get the export storage domains curl -X GET -H "Accept: application/xml" -u "${HTTP_USER}:${HTTP_PASSWORD}" --cacert rhevm.cer ${BASE_URL}/api/storagedomains?search=nfs_export -o exportdomain EXPORT_DOMAIN=`xpath exportdomain '/storage_domains/storage_domain/@id' | sed -e 's/ id=//' | sed -e 's/"//g'` # Get the datacenter curl -X GET -H "Accept: application/xml" -u "${HTTP_USER}:${HTTP_PASSWORD}" --cacert rhevm.cer ${BASE_URL}/api/datacenters?search=NFS -o dc DC=`xpath dc '/data_centers/data_center/@id' | sed -e 's/ id=//' | sed -e 's/"//g'` # Get the cluster curl -X GET -H "Accept: application/xml" -u "${HTTP_USER}:${HTTP_PASSWORD}" --cacert rhevm.cer ${BASE_URL}/api/clusters?search=NFS -o cluster CLUSTER_ELEMENT=`xpath cluster '/clusters/cluster/@id' | sed -e 's/ id=//' | sed -e 's/"//g'` # List contents of export storage domain curl -X GET -H "Accept: application/xml" -u "${HTTP_USER}:${HTTP_PASSWORD}" --cacert rhevm.cer ${BASE_URL}/api/storagedomains/${EXPORT_DOMAIN}/vms -o vms # For each vm, export VMS=`xpath vms '/vms/vm/actions/link[@rel="import"]/@href' | sed -e 's/ href="//g' | sed -e 's/"/ /g'` for vms in $VMS do curl -v -u "${HTTP_USER}:${HTTP_PASSWORD}" -H "Content-type: application/xml" -d '<action><cluster><name>cluster_name</name></cluster><storage_domain><name>data_domain</name></storage_domain><overwrite>true</overwrite><discard_snapshots>true</discard_snapshots></action>' --cacert rhevm.cer ${BASE_URL}$vms done
注意
使用POST
方法来通过 REST API 导出虚拟机。如需了解更多关于 REST API 的信息,请参阅 Red Hat Enterprise Virtualization Developer Guide。 - 运行
v2v.sh
脚本。这可能需要几个小时才能完成转换并导入大量虚拟机的操作。
第 5 章 把物理机转换为虚拟机
rhel-6.x-p2v.iso
)组成。rhel-6.x-p2v.iso
是一个基于定制 Red Hat Enterprise Linux 6 映像的可引导磁盘映像。为了把一个物理机转换为一个可以在 Red Hat Enterprise Virtualization 或由 libvirt 管理的 KVM 上运行的虚拟机,使用 rhel-6.x-p2v.iso
引导一个机器,并把它连接到一个安装了 virt-v2v 的 V2V 转换服务器来进行转换。
重要
- Physical to Virtual(P2V)需要一个带有 virt-v2v-0.8.7 或更高版本的 Red Hat Enterprise Linux 6 虚拟主机。您可以使用
$ rpm -q virt-v2v
来检查 virt-v2v 的版本。 - 请注意,您不能使用 Red Hat Enterprise Linux 5 作为转换服务器。另外,转换服务器所带的 virt-v2v 软件包的版本也不能低于 0.8.7-6.el6。
- 对于某些版本的操作系统,把使用软件 RAID 的物理机转换为虚拟机会有一些问题。把一个在软件 RAID md 设备上引导文件系统的 Red Hat Enterprise Linux 6 物理机转换为虚拟机没有问题,但是,一个在软件 RAID md 设备上引导文件系统的 Red Hat Enterprise Linux 4 或 Red Hat Enterprise Linux 5 物理机无法被转换为虚拟机。当前,我们还没有解决这个问题的方法。
5.1. 先决条件
- 必须可以通过 PXE、光驱设备(CD、DVD)或 USB 引导。
- 最少有 512MB 内存。
- 一个以太网连接。
- 访问终端设备(键盘、显示器、鼠标)。
virt-v2v
支持的操作系统:- Red Hat Enterprise Linux 3.9
- Red Hat Enterprise Linux 4
- Red Hat Enterprise Linux 5
- Red Hat Enterprise Linux 6
- Windows XP
- Windows Vista
- Windows 7
- Windows Server 2003
- Windows Server 2008
5.2. 为转换物理机做准备
5.2.1. 在转换服务器上安装 virt-v2v
5.2.2. 允许 root 通过 SSH 登录
- 以 root 的身份编辑 sshd_config 文件(
/etc/ssh/sshd_config
):nano /etc/ssh/sshd_config
- 在这个文件的 Authentication 数据段中添加一行
PermitRootLogin yes
。这行内容可能已经存在,如果它被注释掉(使用"#"),您只需要删除 "#"。# Authentication: #LoginGraceTime 2m PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10
- 保存修改过的
/etc/ssh/sshd_config
文件。 - 重启 SSH 服务器:
service sshd restart
5.2.3. 在 virt-v2v.conf
中定义一个目标配置集
/etc/virt-v2v.conf
文件中的目标配置集中。
virt-v2v.conf
中定义目标配置集:
- 以 root 身份编辑
/etc/virt-v2v.conf
:nano /etc/virt-v2v.conf
- 找到文件尾部,在最后一个
</virt-v2v>
前添加以下内容:<profile name="myrhev"> <method>rhev</method> <storage format="raw" allocation="preallocated"> nfs.share.com:/export1 </storage> <network type="default"> <network type="network" name="rhevm"/> </network> </profile>
其中:Profile Name
是目标配置集的名称。Method
是最终虚拟机控制程序系统的类型(rhev 或 libvirt)。Storage Format
是输出的存储格式(raw 或 qcow2)。Allocation
是输出的分配格式(preallocated 或 sparse)。Network type
指定了当导入到 Red Hat Enterprise Virtualization 后网络接口所连接到的网络。第一个 network type 项包括了转换前的网络配置;第二个 network type 项映射到转换后的网络配置。在以上实例中,所有检测到的网卡都被映射到名为 rhevm 的管理网络上。
重要
<storage format>
标签的值(在这个实例中是 "nfs.share.com:/export1")必须和<method>
标签的值相匹配。在以上实例中,输出是 "rhev",因此与存储相关的值必须是一个已经初始化的 NFS 共享。如果输出是 libvirt,与存储格式相关的值必须是一个存在于转换服务器本地的、一个已经初始化的存储域,例如 "default"。
5.2.4. 创建一个可引导介质
/usr/share/virt-p2v/
。
rhel-6.x-p2v.iso 文件可以通过 3 种方式使用:作为一个可引导磁盘;作为一个 PXE 引导映像;作为一个可引导的 USB 设备。
- 把 ISO 刻录到一个空白的 CD-ROM 或 DVD-ROM 中,然后把它插入到要被转换的物理机的光驱中。您可能需要修改您的 BIOS 设置来使光驱作为机器的第一个引导设备。
- 使用 ISO 创建一个可引导 USB 介质。您可能需要修改您的 BIOS 设置来使 USB 设备作为机器的第一个引导设备。另外,一些 BIOS 并不支持从 USB 引导。P2V client 磁盘映像大约有 100MB,您所使用的 USB 设备需要有足够的空间来容纳它。
- 在您的 PXE 服务器上准备一个 PXE 引导映像。您可能需要修改您的 BIOS 设置来使 PXE 作为机器的第一个引导设备。
5.3. 把物理机转换为虚拟机
过程 5.1. 把一个物理机转换为虚拟机
在转换服务器上引导 P2V client 引导介质。
在您所创建的转换服务器上引导 P2V client 引导介质。因为 P2V client 是在 Red Hat Enterprise Linux 6 映像上构建的,所以 Red Hat Enterprise Linux 6 splash 会在引导时被显示。如果需要,对网络进行配置。
通常情况下,P2V client 使用 DHCP 自动配置网络。如果不能自动配置网络,您需要手工配置它。您需要配置 IP Address、Gateway 和 Prefix 项。根据您的具体情况输入相应的值,点 Use these network settings。请注意,P2V client 不支持 NIC 组合(NIC teaming)配置。图 5.1. P2V client 上的网络配置
注意
如果您需要手动配置您的网络,请在引导前把物理机从网络中断开。连接到转换服务器。
当配置完网络后,您会被提示输入连接到转换服务器的连接信息。它们包括 Hostname(主机名或 IP 地址)、Username(必须是 root)和 Password。输入相关信息后点 Connect。图 5.2. 连接到转换服务器
配置目标虚拟机并选择要转换的硬件。
在连接到转换服务器后,配置要被附加到被转换物理机上的虚拟硬件,选择要被转换的物理硬件。图 5.3. 配置虚拟机
- 在 Target Properties 中配置以下内容:
- 从下拉菜单中选择一个 Destination Profile。这个菜单中的选项反应了转换服务器上的
/etc/virt-v2v.conf
文件中的目标配置集。 - 在 Target Properties 的 Name 项中输入转换所生成的虚拟机的名称。
- Target Properties 中的 Number of CPUs 和 Memory(MB) 的值会被自动生成。如果您需要在输出的虚拟机上使用更多的 CPU 和(或)内存,您可以修改这两个项的值。
- 在 Fixed Storage 中选择一个或多个需要被转换的设备。最少一个包括了所需操作系统的固定磁盘需要被转换。
- 在 Removable Media 中选择一个或多个需要转换的设备。
- 在 Network Interfaces 中选择一个或多个需要转换的网络接口。
- 可选项:如果您希望把调试信息输出到一个文件中,请选择 Enable server-side debugging 选项。这会使服务器在转换过程中写
LIBGUESTFS_TRACE
和LIBGUESTFS_DEBUG
输出。请注意,Enable server-side debugging 选项只在 Red Hat Enterprise Linux 6.5 或更高版本中有效。请参阅 第 6.2 节 “调试 P2V 转换” 来获得更多与调试 P2V 转换相关的内容。 - 点 Convert。
图 5.4. Conversion in process
图 5.5. Conversion successfully completed
5.4. 把虚拟机导入到虚拟机监控程序系统中来运行
第 6 章 调试及故障排除
6.1. 调试 V2V 转换
virt-v2v
将在运行时显示更多信息。这些信息会在运行 virt-v2v
的终端中显示。
virt-v2v
的调试信息输出到一个文件中。一般的转换会以以下形式运行:
virt-v2v -i libvirtxml -os pool --bridge bridge_name guest_name.xml
virt-v2v.log
文件中。您只需要在以上命令前面加上一个环境变量 LIBGUESTFS_TRACE=1 LIBGUESTFS_DEBUG=1
,并在命令后面加上 ... 2>&1 | tee virt-v2v.log
,就可以把调试信息输出到指定的文件中。
LIBGUESTFS_TRACE=1 LIBGUESTFS_DEBUG=1 virt-v2v -i libvirtxml -os pool --bridge bridge_name guest_name.xml ... 2>&1 | tee virt-v2v.log
6.2. 调试 P2V 转换
virt-p2v
时启用调试信息(debugging message)可以帮助技术人员更好地了解在 P2V 转换过程中出现的问题。
virt-p2v
client 的转换屏幕中选 Enable server-side debugging 选项后再点 按钮。
virt-p2v
转换的过程中写 LIBGUESTFS_TRACE
和 LIBGUESTFS_DEBUG
输出。
virt-p2v
的信息。
6.3. 与 iscsi/mpath/scsi 存储卷相关的已知问题
virt-v2v
无法转换带有存在于以下类型存储池中的存储卷的系统:
- iscsi
- mpath
- scsi
第 7 章 参考信息
virt-v2v
的参考信息。
7.1. virt-v2v 参数
virt-v2v
可以使用以下参数:
-i input
|
指定获得要被转换虚拟机的输入方法。它的默认值是 libvirt,所支持的选项包括:
|
-ic URI
|
指定使用 libvirt 输入方法的连接。如果没有使用这个参数,默认值
qemu:///system 将会被使用。请注意,这只在 virt-v2v 以 root 身份运行时有效。
virt-v2v 当前可以自动通过本地 libvirt 连接、ESX / ESX(i) 连接和使用 SSH 的连接来获得虚拟机的存储。其它类型的连接不被支持。
|
-o method
|
指定输出的方法。如果没有指定输出方法,默认值 libvirt 会被使用。它所支持的输出方法包括:
|
-oc URI
|
指定使用 libvirt 连接来创建被转换的虚拟机。如果没有使用这个参数,默认值
qemu:///system 会被使用(virt-v2v 需要以 root 身份运行)。请注意,virt-v2v 必须可以直接对 libvirt 连接所描述的存储进行写操作。对远程连接进行写操作当前还不可行。
|
-os storage
|
指定为所转换的虚拟机创建的新存储的位置。这将取决于由
-o 参数指定的输出方法。
对于
libvirt 输出方法,这个参数的值是一个存储池的名称;对于 rhev 输出方法,这个参数的值是到一个 Red Hat Enterprise Virtualization 导出存储域的 NFS 路径。请注意,存储域需要已经被 Red Hat Enterprise Virtualization Manager 初始化;域的格式需要是 <host>:<path>(如 rhev-storage.example.com:/rhev/export )。
NFS 导出需要可以被运行 virt-v2v 的主机挂载并可以被这个主机进行写操作。
|
-op pool (已弃用)
|
虽然这个参数仍然被支持,但是已被
-os 替代。
|
-osd domain (已弃用)
|
虽然这个参数仍然被支持,但是已被
-os 替代。
|
-of format
|
指定被转换虚拟机要使用的磁盘格式。当前支持的选项是
raw 和 qcow2 。这里指定的输出格式可以和源格式不同 - virt-v2v 可以把 raw 转换为 qcow2 或进行相反的转换。如果没有指定这个参数,被转换后的虚拟机将会使用和源虚拟机相同的格式。
|
-oa allocation
|
指定转换后的虚拟机使用
sparse 存储还是 preallocated 存储。这里指定的存储分配策略可以和源存储分配策略不同,virt-v2v 可以把 sparse 转换为 preallocated,或进行相反的转换。如果没有指定这个参数,被转换后的虚拟机就会使用和源虚拟机相同的存储分配策略。
|
-on outputname
|
重新命令虚拟机。如果没有指定这个参数,转换后的虚拟机和转换前的虚拟机同名。
|
-f file | --config file
|
使用文件中的 virt-v2v 配置。这里可以使用多个配置文件,而搜索的顺序和文件指定的顺序相同。如果没有指定文件,默认的
/etc/virt-v2v.conf 和 /var/lib/virt-v2v/virt-v2v.db 会被使用。
重要
如果需要覆盖默认的配置信息,我们推荐同时指定 /var/lib/virt-v2v/virt-v2v.db ,因为它包括了转换所需的默认配置数据。
|
-n network | --network network
|
把配置文件中没有相应映射信息的虚拟机网桥或网络映射到指定网络。
这个选项无法和
--bridge 一起使用。
|
-b bridge | --bridge bridge
|
把配置文件中没有相应映射信息的虚拟机网桥或网络映射到指定网桥。
这个选项无法和
--network 一起使用。
|
-p profile | --profile profile
|
输出方法为默认的值;输出存储和网络映射信息由配置文件中的 profile 项获得。
|
--root=filesystem
|
为带有多引导系统的虚拟机选择要被转换的 root 文件系统。这个选项的默认值是
--root=ask 。当这个选项被使用时,virt-v2v 会列出所有可能的 root 文件系统,并要求用户选择需要使用的文件系统。
警告
在比 Red Hat Enterprise Linux 6.3 更早的版本中,这个参数的默认值是 --root=single 。如果虚拟机被检测到有多个引导系统,virt-v2v 将会失败。
其它可用选项包括:
|
--list-profiles
|
显示配置文件中的目标配置集名列表。
|
--help
| 显示帮助信息。 |
--version
| 显示版本号后退出。 |
7.2. 配置改变
virt-v2v
还会对虚拟机做特定的改变来使它在 KVM 虚拟机监控程序上运行(使用或不使用 virtIO 驱动)。这些改变取决于虚拟机的操作系统,这里的信息适用于支持的 Red Hat Enterprise Linux 版本和 Windows.
7.2.1. Linux 虚拟机的配置改变
改变 | 描述 |
---|---|
内核 | 不能引导的内核(如 Xen 准虚拟化内核)将会被卸载。如果剩下的内核支持 VirtIO,则不会安装新内核。如果剩下的内核不支持 VirtIO,配置文件指定了一个新内核,这个新内核会被安装并被配置为默认内核。 |
X 重新配置 | 如果虚拟机配置了 X,它的显示驱动将会被更新。如需了解哪些驱动要被使用,请参阅 表 7.2 “在 Linux 虚拟机上配置驱动”。 |
重新命名块设备 | 如果重新配置会导致块设备改变它的名字,这些改变会反应在 /etc/fstab 中。 |
配置设备驱动 | 无论使用 VirtIO 还是非 VirtIO 驱动,virt-v2v 都会保证正确的网络和块设备驱动出现在 modprobe 配置中。 |
initrd | 无论使用还是不使用 VirtIO,virt-v2v 都将会保证默认内核的 initrd 支持引导 root 设备。 |
SELinux | virt-v2v 将会在虚拟机下一次引导时进行重新标识(relabel),这可以保证所做的任何改变都可以根据虚拟机的本地策略被正确标识。 |
virt-v2v
将会在 Linux 虚拟机上配置以下驱动:
准虚拟化驱动类型 | 驱动模块 |
---|---|
显示 | cirrus |
存储 | virtio_blk |
网络 | virtio_net |
另外,initrd 会预先加载 virtio_pci 驱动 |
其它驱动 | |
---|---|
显示 | cirrus |
块设备 | 虚拟化的 IDE |
网络 | 虚拟化的 e1000 |
7.2.2. Windows 虚拟机的配置改变
警告
virt-v2v
的主机上已经安装了 libguestfs-winsupport 和 virtio-win 软件包。这些软件包提供了对 NTFS 和 Windows 准虚拟化块设备和网络的驱动。如果您在没有安装 libguestfs-winsupport 软件包的情况下转换使用 NTFS 的虚拟机,转换过程将会失败。如果您在没有安装 virtio-win 软件包的情况下转换 Windows 虚拟机,转换过程同样会失败。请参阅 第 4.3.1.2 节 “为转换一个运行 Windows 的虚拟机做准备” 来获得更多相关信息。
- virt-v2v 安装 VirtIO 块驱动。
- virt-v2v 安装 CDUpgrader 应用程序。
- virt-v2v 把 VirtIO 块设备和网络驱动复制到
%SystemRoot%\Drivers\VirtIO
。virtio-win 软件包不包括 Windows 7 和 Windows XP 的网络驱动。对于这些操作系统,使用 rtl8139 网络驱动。虚拟机需要已经具备了对 rtl8139 支持的能力。 - virt-v2v 把
%SystemRoot%\Drivers\VirtIO
添加到DevicePath
中,这意味着当检测到新设备时,这个目录会被自动作为搜索目录来在其中寻找设备的驱动。 - virt-v2v 对注册表进行修改,把 VirtIO 块设备驱动包括在注册表的
CriticalDeviceDatabase
项中,并保证在下一次引导时启动 CDUpgrader 服务。
- 虚拟机被导入并运行在 Manager 上。请参阅 Red Hat Enterprise Virtualization 管理指南 来获得更详细的信息。
重要
第一次引导过程会需要几分钟来完成,在这个过程中系统不能被中断。在启动虚拟机后,这个引导过程将不需要管理员的操作。为了保证这个过程不被中断,用户在这个过程完成前不要登录到虚拟机。您可以通过 Manager GUI 来查看这个过程的进度。 - 如果 guest 工具程序 ISO 已经被上传到 Manager(如 第 4.3.1.2 节 “为转换一个运行 Windows 的虚拟机做准备” 所述),Manager 会把 guest 工具程序 CD 附加到虚拟机。
- CDUpgrader 会检测到 guest 工具程序 ISO 并从其中安装所有的 VirtIO 驱动(包括 virtio-win 中没有的工具程序)。如果 guest 工具程序 ISO 所包括的 VirtIO 驱动比以前从 virtio-win 中安装的驱动版本更高,这个驱动会被重新安装。这可以保证工具程序都是最新的。
附录 A. 额外步骤
A.1. 创建可引导介质
A.1.1. 创建一个 P2V client 引导 CD
- 把一张可写的空白 CD 插入到计算机的 CD 或 DVD 刻录机中。
- 打开 Applications 菜单,选择 子菜单,点 。
- 点按钮。
- 点按钮。
- 找到并选择 rhel-6.x-p2v.iso。
- 点。
A.1.2. 创建一个可引导的 P2V USB 介质
- 以 root 的身份挂载 rhel-6.x-p2v.iso:
mkdir /mnt/p2vmount
mount -o loop rhel-6.x-p2v.iso /mnt/p2vmount
- 把 USB 设备插入到您的计算机。为了使 livecd-iso-to-disk 脚本可以正常工作,USB 的文件系统必须格式化为 vfat、ext[234] 或 btrfs。
- 在一个终端中以 root 身份运行 livecd-iso-to-disk 脚本:
bash /mnt/p2vmount/LiveOS/livecd-iso-to-disk /PATH/TO/rhel-6.x-p2v.iso /dev/YOURUSBDEVICE
- 当脚本成功运行完成后,弹出 USB 设备。
A.1.3. 创建一个 PXE 引导映像
- 以 root 身份挂载 rhel-6.x-p2v.iso
mkdir /mnt/p2vmount
mount -o loop rhel-6.x-p2v.iso /mnt/p2vmount
- 在一个终端中以 root 身份运行 livecd-iso-to-pxeboot 脚本:
bash /mnt/p2vboot/LiveOS/livecd-iso-to-pxeboot /PATH/TO/rhel-6.x-p2v.iso
当命令完成后,运行命令的目录中会出现一个 tftpboot 目录。 - 对新创建的 tftpboot 目录重新命名:
mv tftpboot/ p2vboot/
- 把 p2vboot/ 子目录复制到 /tftpboot 目录:
cp -R p2vboot/ /tftpboot/
设置您的 DHCP、TFTP 和 PXE 服务器来使用/tftpboot/p2vboot/pxeboot.0
。注意
initrd 映像会包括整个 CD ISO。在 PXE 引导时,您会注意到 initrd 可能需要很长时间来下载,这是一个正常的现象。
附录 B. 修订历史
修订历史 | ||||||
---|---|---|---|---|---|---|
修订 11-73.1 | Thu Mar 12 2015 | |||||
| ||||||
修订 11-73 | Thurs Dec 18 2014 | |||||
| ||||||
修订 11-71 | Fri Oct 10 2014 | |||||
| ||||||
修订 11-69 | Thurs Oct 9 2014 | |||||
| ||||||
修订 11-68 | Mon Oct 6 2014 | |||||
| ||||||
修订 11-67 | Fri Sept 5 2014 | |||||
| ||||||
修订 11-66 | Fri Aug 29 2014 | |||||
| ||||||
修订 11-64 | Fri Aug 8 2014 | |||||
| ||||||
修订 11-62 | Tue July 29 2014 | |||||
| ||||||
修订 11-61 | Tue July 15 2014 | |||||
| ||||||
修订 11-60 | Mon Nov 18 2013 | |||||
| ||||||
修订 11-59 | Fri Nov 15 2013 | |||||
| ||||||
修订 11-57 | Thurs Nov 7 2013 | |||||
| ||||||
修订 11-56 | Fri Sept 27 2013 | |||||
| ||||||
修订 11-54 | Thurs Sept 26 2013 | |||||
| ||||||
修订 11-53 | Mon Sept 16 2013 | |||||
| ||||||
修订 11-51 | Fri Sept 13 2013 | |||||
| ||||||
修订 11-50 | Mon Sept 9 2013 | |||||
| ||||||
修订 11-49 | Thurs Sept 5 2013 | |||||
| ||||||
修订 11-48 | Fri Aug 16 2013 | |||||
| ||||||
修订 11-47 | Fri Aug 9 2013 | |||||
| ||||||
修订 11-46 | Fri Apr 26 2013 | |||||
| ||||||
修订 11-45 | Mon March 4 2013 | |||||
| ||||||
修订 11-44 | Tue Feb 19 2013 | |||||
| ||||||
修订 11-41 | Wed Jan 30 2013 | |||||
| ||||||
修订 11-39 | Thurs Jan 24 2013 | |||||
| ||||||
修订 11-38 | Wed Jan 16 2013 | |||||
| ||||||
修订 11-36 | Thurs Dec 13 2012 | |||||
| ||||||
修订 11-35 | Wed Nov 28 2012 | |||||
| ||||||
修订 11-34 | Tue Nov 27 2012 | |||||
| ||||||
修订 11-33 | Thu Nov 22 2012 | |||||
| ||||||
修订 11-31 | Wed Nov 21 2012 | |||||
| ||||||
修订 11-30 | Fri Nov 16 2012 | |||||
| ||||||
修订 11-29 | Mon Nov 12 2012 | |||||
| ||||||
修订 11-28 | Thurs Nov 8 2012 | |||||
| ||||||
修订 11-27 | Wed Nov 7 2012 | |||||
| ||||||
修订 11-26 | Wed Nov 7 2012 | |||||
| ||||||
修订 11-24 | Mon Nov 5 2012 | |||||
| ||||||
修订 11-23 | Fri Nov 2 2012 | |||||
| ||||||
修订 11-22 | Thu Nov 1 2012 | |||||
| ||||||
修订 11-21 | Thurs Nov 1 2012 | |||||
| ||||||
修订 11-20 | Thurs Nov 1 2012 | |||||
| ||||||
修订 11-19 | Wed Oct 31 2012 | |||||
| ||||||
修订 11-18 | Wed Oct 31 2012 | |||||
| ||||||
修订 11-17 | Wed Oct 31 2012 | |||||
| ||||||
修订 11-14 | Mon Oct 29 2012 | |||||
| ||||||
修订 11-13 | Thu Oct 25 2012 | |||||
| ||||||
修订 11-11 | Wed Oct 24 2012 | |||||
| ||||||
修订 11-9 | Mon Oct 15 2012 | |||||
| ||||||
修订 11-6 | Monday June 18 2012 | |||||
| ||||||
修订 11-5 | Monday June 04 2012 | |||||
| ||||||
修订 11-4 | Monday May 14 2012 | |||||
| ||||||
修订 11-3 | Monday March 26 2012 | |||||
| ||||||
修订 11-2 | Monday March 5 2012 | |||||
| ||||||
修订 11-1 | Friday February 24 2012 | |||||
| ||||||
修订 10-0 | Monday January 23 2012 | |||||
| ||||||
修订 9-0 | Thursday December 08 2011 | |||||
| ||||||
修订 7-0 | Friday December 02 2011 | |||||
| ||||||
修订 6-0 | Friday July 22 2011 | |||||
| ||||||
修订 5-0 | Friday June 17 2011 | |||||
| ||||||
修订 4-0 | Monday April 11 2011 | |||||
| ||||||
修订 3-0 | Friday April 8 2011 | |||||
| ||||||
修订 2-0 | Monday November 29 2010 | |||||
| ||||||
修订 1-0 | Monday October 25 2010 | |||||
|