使用直接卷复制将多磁盘 VMware 虚拟机迁移到 IBM Cloud
使用 qemu-img 或 virt-v2v 进行直接卷复制,将多磁盘的 VMware 虚拟机 (VM) 迁移到 IBM Cloud VPC 虚拟服务器,从而实现完整的磁盘级控制。
架构组件
下表列出了直接卷复制迁移的架构组件。
| 架构组件 | 描述 |
|---|---|
| 工人虚拟服务器实例 |
作为迁移工作区的临时虚拟服务器实例。 此虚拟服务器实例需要满足以下先决条件:
|
| 短暂虚拟服务器实例 | 仅为生成具有正确配置的启动卷和数据卷而创建的短期虚拟服务器实例。 立即删除此虚拟服务器实例,但保留其卷。 |
| 目标容量 | 成为迁移后 VM 磁盘的实际卷。 |
复制直接卷迁移过程概述
以下步骤介绍了使用直接卷复制进行迁移的过程。
-
提供工人虚拟服务器实例
- Ubuntu 或具有足够工作空间的 RHEL 实例
- 如果需要 VMDK 的工作空间,可附加大型辅助卷
- 安装所需工具
qemu-imglibguestfs-tools(for virt-v2v )
-
创建临时虚拟服务器实例
- 配置它以匹配目标 VM (操作系统、启动盘大小、辅助磁盘数量/大小)
- 危急禁用所有卷上的自动删除功能
- 关键:为启动卷使用
general-purpose存储配置文件 - 网络配置可随意丢弃
- 注意容量大小和顺序
-
删除短暂虚拟服务器实例,保留卷
- 通过用户界面或 CLI 删除虚拟服务器实例
- 确认卷宗仍然存在并可供附加
-
将卷附加到工人虚拟服务器实例
- 按照创建的相同顺序添加它们
- 注意设备名称(如 /dev/vdb, /dev/vdc, 等)
- 核实尺寸:
blockdev --getsize64 /dev/vdb
-
传输和转换 VM 磁盘
- 如果已导出:将 VMDK 复制到工作虚拟服务器实例
- 转换和书写一步到位:
qemu-img convert -f vmdk -O raw source-vm-boot.vmdk /dev/vdb qemu-img convert -f vmdk -O raw source-vm-data.vmdk /dev/vdc- 可选择使用 virt-v2v 进行 Windows 驱动程序注入(请参阅下面的 Windows 部分)
-
验证和冲洗
- 抽查分区表:
fdisk -l /dev/vdb - 刷新缓冲区:
blockdev --flushbufs /dev/vdb
- 抽查分区表:
-
将卷从工作者中分离
- 分离所有目标卷
- 现在就可以将它们连接到最终的虚拟服务器实例了
-
从现有启动卷创建最终虚拟服务器实例
- 选择“现有启动卷”,而不是选择映像
- 选择已填充的启动卷
- 配置网络、安全组、SSH 密钥(如果是现有的 VM,即使不使用也需要)
- 对于辅助卷:使用 CLI/API 或在创建和重启后附加
-
迁移后配置
- 启动虚拟服务器实例,如果需要调整网络配置,可通过 VNC 控制台访问
- 验证所有磁盘是否存在并已安装
- 如果向上调整了引导卷分区的大小,则扩展引导卷分区
直接批量复制设计的优势
下表列出了直接卷复制迁移的设计优势。
| 设计优势 | 描述 |
|---|---|
| 多磁盘支持 | 多磁盘支持可处理具有任意数量磁盘的虚拟机,最多可达 VPC 的 12 个磁盘限制。 |
| 不扩散图像 | 您不会为每台虚拟机创建自定义映像。 您的自定义图片列表保持清洁。 |
| 灵活转型 | 可与 virt-v2v 轻松集成,用于驱动程序注入、操作系统调整等。 |
| 存储效率选项 | 如果将基础模板作为自定义映像导入,并将其用作短暂虚拟服务器实例的启动卷源(步骤 2),则最终启动卷将继承链接克隆空间效率。 |
直接批量复制设计的约束和限制
下表列出了直接卷复制迁移的约束和限制。
| 限制或约束 | 描述 |
|---|---|
| 编排复杂度 | 有更多的步骤和活动部件。 您需要可靠的运行手册,最好是自动化(Terraform、Ansible、脚本)。 |
| 卷的挂载限制 |
IBM Cloud 的用户界面 (UI) 不支持在创建虚拟服务器实例时挂载辅助卷。 您必须执行以下操作之一:
|
| 出口间接费用 | 如果从 VMware 导出 VMDK,仍会产生这种开销(尽管比导出 OVA 少)。 |
使用网络传输跳过导出
可以将方法 2 与网络传输技术(详见方法 3)相结合,以完全避免导出 VMDK。 从 ISO 启动源 VM,建立与工作虚拟服务器实例的网络连接,并直接串流磁盘内容:
-
在工作者虚拟服务器实例(目标)上,发出以下命令:
nc -l 192.168.100.5 8080 | gunzip | dd of=/dev/vdb bs=16M status=progress -
在源虚拟机(从 ISO 启动)上,发出以下命令:
dd if=/dev/sda bs=16M | gzip | nc -N -v 192.168.100.5 8080
这一过程消除了出口时间和出口存储要求。
对于多磁盘虚拟机、需要精确控制的场景或需要避免自定义镜像扩散的场景,可以使用此流程。 您还可以通过网络传输提高效率。