当前位置: 首页 > news >正文

旧版 VMware 虚拟机迁移至 KVM 平台-案例1

在这里插入图片描述

案例背景

将一台旧版 VMware 虚拟机(VMDK 格式)迁移至 KVM 虚拟化平台,完成以下需求:

  1. 格式转换:将 VMDK 转换为 QCOW2 格式。
  2. 磁盘扩容:将原 40GB 磁盘扩展至 60GB。
  3. 密码重置:修改 root 用户密码以增强安全性。
  4. 镜像优化:压缩镜像以节省存储空间。

环境准备

1. 安装必要工具

确保系统中已安装 QEMU 工具集和 Libguestfs 工具:

# Debian/Ubuntu
sudo apt-get install qemu-utils libguestfs-tools# RHEL/CentOS
sudo yum install qemu-img libguestfs-tools
2. 验证原镜像信息

检查 VMDK 镜像的硬盘模式是否为 IDE(若为 SCSI 或 VirtIO,需调整虚拟机配置):

qemu-img info source.vmdk
  • 关键输出disk size(实际占用)、format(格式)、virtual size(虚拟大小)。

镜像格式转换(VMDK → QCOW2)

1. 执行转换命令
qemu-img convert -c -p -f vmdk -O qcow2 source.vmdk target.qcow2
  • 参数解析
    • -c:启用压缩,减少输出文件体积。
    • -p:显示实时进度条。
    • -f vmdk:指定输入格式为 VMDK。
    • -O qcow2:输出格式为 QCOW2。
  • 底层原理:QCOW2 的稀疏存储机制仅记录有效数据,节省空间。
2. 验证转换结果
qemu-img info target.qcow2
  • 预期输出format: qcow2virtual size: 40 GiBdisk size: <原镜像实际大小>

镜像扩容(40GB → 60GB)

1. 调整虚拟磁盘大小
qemu-img resize target.qcow2 +20G
  • 作用:将镜像的虚拟大小扩展至 60GB,但分区和文件系统仍需手动调整。
2. 扩展分区与文件系统

使用 virt-resize 工具自动调整分区:

virt-resize --expand /dev/sda1 target.qcow2 target_resized.qcow2
  • 参数解析
    • --expand /dev/sda1:指定扩展的分区(假设根分区为 /dev/sda1)。
    • 输入和输出文件需不同名,避免覆盖。
  • 底层原理virt-resize 会创建新镜像文件,并将原数据迁移至扩容后的镜像。
3. 替换旧镜像
mv target_resized.qcow2 target.qcow2
  • 验证扩容结果
qemu-img info target.qcow2
  • 输出应显示 virtual size: 60 GiB

修改 root 用户密码

1. 使用 virt-customize 安全修改密码
virt-customize -a target.qcow2 --root-password password:MySecurePass123
  • 优势:避免手动编辑 /etc/shadow 的风险(如哈希格式错误)。
  • 底层原理virt-customize 会在镜像启动时注入配置,直接修改密码文件。
2. 验证密码修改

启动虚拟机并尝试以 root 用户和新密码登录:

qemu-system-x86_64 -hda target.qcow2 -m 2048

镜像深度压缩

1. 使用 virt-sparsify 优化镜像
virt-sparsify --compress target.qcow2 target_compressed.qcow2
  • 作用:移除镜像中未使用的空白块,进一步减少文件体积。
  • 原理:通过扫描磁盘块,仅保留有效数据并压缩元数据。
2. 替换压缩后的镜像
mv target_compressed.qcow2 target.qcow2
  • 验证压缩效果
qemu-img info target.qcow2
  • 比较 disk size 字段,体积应显著减少。

镜像完整性检查

1. 检查文件系统一致性
virt-df -h target.qcow2
  • 输出示例
Filesystem                Size       Used  Available  Use%
target.qcow2:/dev/sda1    59G        15G        44G   26%
2. 验证镜像元数据
qemu-img check target.qcow2
  • 预期输出No errors found

场景总结与知识要点

1. 关键步骤总结
步骤工具/命令核心作用
格式转换qemu-img convert迁移至 QCOW2 格式并压缩
扩容qemu-img resize + virt-resize扩展磁盘空间并调整分区
密码修改virt-customize安全注入新密码
深度压缩virt-sparsify优化存储空间利用率
2. 注意事项
  • 依赖工具:确保 libguestfs-tools 安装完整,否则 virt-resizevirt-customize 不可用。
  • 备份操作:关键步骤前备份镜像(如 cp target.qcow2 target.bak.qcow2)。
  • 兼容性:若需兼容旧版 QEMU,转换时指定 -o compat=1.1
3. 扩展知识
  • 快照管理
    # 创建快照
    qemu-img create -f qcow2 -b target.qcow2 snapshot.qcow2
    # 合并快照
    qemu-img commit snapshot.qcow2
    
  • 加密镜像
    qemu-img convert -O qcow2 --object secret,id=sec0,data=密码 -o encryption=on,key-secret=sec0 source.img encrypted.qcow2
    

故障排除指南

问题现象可能原因解决方案
转换后镜像无法启动原镜像硬盘模式非 IDE调整虚拟机配置为 IDE 控制器
virt-resize 报错分区不存在分区号或设备名错误使用 virt-filesystems 查看正确分区
密码修改后仍无法登录密码哈希格式错误使用 virt-customize 重新设置密码
压缩后镜像体积未减小镜像中已无空白块可优化检查原镜像是否已稀疏存储

通过上述工作流,可高效完成虚拟机镜像的迁移、优化与安全管理,适用于生产环境中的镜像全生命周期管理。

相关文章:

  • ThreeJs实现裸眼3D地球仪
  • 源代码加密之零日攻击
  • 算力云平台部署—SadTalker的AI数字人视频
  • java 递归遍历JSON字符串获取某个字段的值
  • Docker构建go-web应用
  • 视频孪生技术赋能矿山数字化升级转化
  • 【ROS2】行为树 BehaviorTree(四):组合使用子树
  • Flink DataStream API深度解析(Scala版):窗口计算、水位线与状态编程
  • 利用DevEco Profiler定位性能瓶颈,优化资源占用
  • C++性能优化实战:从瓶颈定位到高并发架构重构(第一章)
  • AI大模型赋能工业制造:智能工厂的全新跃迁路径
  • 静态代码深度扫描详解
  • 【UE5 C++】“ProceduralMeshComponent”的使用记录
  • Jmeter创建使用变量——能够递增递减的计数器
  • 《extern:如何在编译时“暗通款曲“》
  • 解析大尺寸液晶屏视觉检测,装配错位如何避免?
  • vue文件预览docx-preview
  • TypeScript 快速入门
  • ebpf: CO-RE, BTF, and Libbpf(二)
  • 西瓜书机器学习——第八章EM算法
  • 耿军强任陕西延安市领导,此前任陕西省公安厅机场公安局局长
  • 气象干旱黄色预警继续:陕西西南部、河南西南部等地特旱
  • 七大交响乐团“神仙斗法”,时代交响在上海奏出时代新声
  • 【社论】以法治力量促进民企长远健康发展
  • 北上广深均宣布下调个人住房公积金贷款利率
  • 上海优化营商环境再攻坚,企业和机构有哪些切实感受?