使用 VDDK 直接提取功能,将数据迁移至 IBM Cloud 虚拟服务器 vCenter

使用 VDDK 直接提取功能配合 virt-v2v,将 VMware 上的虚拟机从 vCenter 迁移至 IBM Cloud VPC 上的虚拟服务器,并自动完成磁盘转换。

架构组件

下表描述了 VDDK 直接提取迁移的架构组件。

VDDK 直接提取迁移方法的架构组件
架构组件 描述
VMware 虚拟磁盘开发工具包(VDDK) VMware 的 API 库,用于访问虚拟磁盘。 您可以从 VMware 开发人员门户网站下载。
支持 VDDK 的 libguestfs 使用 nbdkit VDDK 插件构建的 virt-v2v 工具。 这需要 Red Hat Enterprise Linux (RHEL)( Ubuntu 的构建版本不包含VDDK支持)。
工人虚拟服务器实例 基于 RHEL 的实例,已安装 libguestfs-tools 和 VDDK。
vCenter 访问 从工人虚拟服务器实例到 vCenter 和 vSphere 主机的网络连接,以及允许虚拟机磁盘访问的凭证。

VDDK 直接提取迁移过程概述

以下步骤介绍了使用 VDDK 直接提取进行迁移的过程。

  1. 部署 RHEL( Red Hat Enterprise Linux )工作节点虚拟服务器实例

    1. RHEL 8 或 9 实例
    2. 安装 libguestfs-tools:dnf install libguestfs-tools
    3. 网络连接到 vCenter
  2. 安装 VMware VDDK

    1. 从 VMware 开发人员门户网站下载(需要 VMware 账户)
    2. 解压到工作节点虚拟服务器实例上的某个目录(例如,/opt/vmware-vix-disklib-distrib
  3. 收集 vCenter 信息

    1. vCenter 主机名/IP
    2. vCenter 凭据(domain\user 格式)
    3. 目标虚拟机名称
    4. 虚拟机正在运行的 ESXi 主机(通过 vCenter 发现 )
    5. vCenter 证书缩略图:
    openssl s_client -connect vcenter.example.com:443 </dev/null 2>/dev/null | \
      openssl x509 -fingerprint -noout -in /dev/stdin | \
      cut -d= -f2
    
  4. 创建目标卷

    1. 使用短暂虚拟服务器实例方法(方法 2 步骤 2-4)
    2. 连接到工作节点虚拟服务器实例
  5. 配置 /etc/hosts (经常需要)

    1. 如果 DNS 无法正确解析,请添加 vCenter 和 ESXi 主机
    2. VDDK 在主机名解析方面可能比较棘手
  6. 使用 VDDK 执行 virt-v2v

    1. 创建密码文件
       echo 'YourPasswordHere' > /tmp/vcenter-passwd
       chmod 600 /tmp/vcenter-passwd
    
    1. 运行 virt-v2v
       virt-v2v \
         -ic 'vpx://vsphere.local\%5cAdministrator\@vcenter.example.com/Datacenter/Cluster/esxi-host.example.com?no_verify=1' \
         'VM-Name' \
         -ip /tmp/vcenter-passwd \
         -o disk \
         -os /tmp \
         -it vddk \
         -io vddk-libdir=/opt/vmware-vix-disklib-distrib \
         -io vddk-thumbprint=A2:41:6A:FA:81:CA:4B:06:AE:EB:C4:1B:0F:FE:23:22:D0:E8:89:02 \
         --block-driver virtio-scsi
    

    参数: - -ic:输入连接字符串 (vpx:// 用于 vCenter ) - \%5c 是 URL domain\user 中的反斜杠编码 - ?no_verify=1 跳过 SSL 证书验证 - 'VM-Name':中虚拟机的确切名称 vCenter - -ip:密码文件路径 - -o disk -os /tmp:输出到目录 /tmp - -it vddk:输入传输 VDDK - -io vddk-libdir:VDDK 安装路径 - -io vddk-thumbprint:vCenter 证书缩略图 - --block-driver virtio-scsi:用于 Windows 虚拟机(第一个磁盘需要 SCSI 驱动程序)

  7. 使用 Symlink 技巧直接连接设备

    通常,virt-v2v 会写入目录中的文件。 直接写入块设备:

    # virt-v2v will create file named VM-Name-sda
    ln -fs /dev/vdb /tmp/VM-Name-sda
    # Run virt-v2v, it writes to symlink which points to device
    virt-v2v ... (same command as above)
    
  8. 从卷创建虚拟服务器实例

    • 与方法 2/3 相同:从 Worker 中分离,从现有卷创建虚拟服务器实例

设计优势

下表列出了 VDDK 直接提取迁移的设计优势。

VDDK 直接提取迁移法的设计优势
设计优势 描述
单条命令迁移 只需调用一次 virt-v2v,就能完成所有工作--从 vCenter, 提取、转换格式、注入驱动程序、写入目的地。
无导出步骤 与实时网络传输迁移类似,消除了导出开销。
易于自动化 一旦投入使用,可轻松编写脚本进行大规模迁移。
综合转型 驱动程序注入和操作系统准备都是自动进行的。

设计约束与限制

下表列出了 VDDK 直接提取迁移的约束和限制。

VDDK 直接提取迁移方法的局限性和制约因素
限制或约束 描述
vCenter 仅 无法使用 VCFaaS (无法访问 vCenter API)。
RHEL/ Ubuntu 工具的不足之处

关键挑战

  • libguestfs 的 RHEL 版本包含 VDDK 支持(nbdkit 插件)

  • virt-v2v 的 RHEL 版本不支持 --block-driver virtio-scsi (Windows 需要)

  • virt-v2v 的 Ubuntu 版本支持 --block-driver virtio-scsi

  • Ubuntu 版本不包含 VDDK 支持

您必须选择其中之一:

  • 在 Ubuntu 上使用 VDDK 插件自行构建 libguestfs

  • 使用 RHEL 提取 VDDK、写入文件、传输到 Ubuntu 系统进行 virt-v2v 转换
复杂的先决条件 需要安装 VDDK、vCenter API 访问权限、证书缩略图和精确的连接字符串。 比其他方法设置更多。
网络要求 工人虚拟服务器实例必须直接到达 vCenter 和 ESXi 主机。 可能需要添加额外的防火墙规则。

VDDK Direct Extraction 迁移功能强大,适用于大规模 vCenter 迁移,在许多虚拟机上,对设置和工具构建的前期投资都会得到回报。 不建议用于小型迁移或 VCFaaS 环境。 如果您选择这种方法,请为工具设置和测试做好时间预算。