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

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

在这里插入图片描述


项目背景

需将一台旧版 VMware 虚拟机(VMDK 格式)迁移至 KVM 虚拟化平台,具体要求如下:

  1. 格式转换:将 VMDK 转换为 QCOW2 格式。
  2. 磁盘扩容:将原 40GB 磁盘扩展至 60GB。
  3. 密码重置:修改 aiden 用户密码以增强安全性。
  4. 新建用户:创建 test01 用户并设置密码。
  5. 镜像优化:压缩镜像以节省存储空间。
  6. 镜像快照:创建快照用于测试环境。

环境准备

1. 工具安装

# Debian/Ubuntu
sudo apt install qemu-utils libguestfs-tools virt-manager

# RHEL/CentOS
sudo yum install qemu-img libguestfs-tools virt-install

2. 镜像备份

cp source.vmdk source.vmdk.bak  # 备份原始 VMDK 镜像

格式转换

1. 转换命令

将 VMDK 转换为 QCOW2 格式并启用轻量压缩:

qemu-img convert -c -p -f vmdk -O qcow2 source.vmdk target.qcow2
  • 参数说明
    • -c:启用压缩。
    • -p:显示实时进度。
    • -f vmdk:输入格式为 VMDK。
    • -O qcow2:输出格式为 QCOW2。

2. 验证结果

qemu-img info target.qcow2  
# 输出示例:  
# format: qcow2  
# virtual size: 40 GiB  
# disk size: 28 GiB  

磁盘扩容

1. 调整虚拟磁盘大小

qemu-img resize target.qcow2 60G  

2. 扩展分区与文件系统

virt-resize --expand /dev/sda1 target.qcow2 target_resized.qcow2  
mv target_resized.qcow2 target.qcow2  

3. 验证扩容

virt-ls -l target.qcow2 / | grep "disk size"  # 查看根分区是否扩展  

密码重置

1. 使用 virt-customize 修改密码

virt-customize -a target.qcow2 --password aiden:password:NewSecurePass123!  
  • 说明
    • aiden:password:NewSecurePass123!:用户 aiden 的新密码。

2. 备用方案(手动编辑)

guestfish --rw -a target.qcow2  
><fs> run  
><fs> mount /dev/sda1 /  
><fs> vi /etc/shadow  # 替换 `aiden` 的密码哈希  
><fs> exit  

新建用户

1. 创建用户 test01 并设置密码

virt-customize -a target.qcow2 \  
  --run-command "useradd -m -s /bin/bash test01" \  
  --password test01:password:TestPass456!  
  • 参数说明
    • -m:创建家目录。
    • -s /bin/bash:指定 Shell 类型。

2. 验证用户

virt-cat -a target.qcow2 /etc/passwd | grep "test01"  

镜像优化

1. 深度压缩

移除未使用的磁盘空间:

virt-sparsify --compress target.qcow2 target_compressed.qcow2  
mv target_compressed.qcow2 target.qcow2  

2. 验证压缩效果

qemu-img info target.qcow2  
# disk size 应显著减少(例如从 28GB 降至 20GB)  

镜像快照

1. 创建快照

qemu-img create -f qcow2 -b target.qcow2 target_snapshot.qcow2  
  • 参数说明
    • -b:指定基础镜像。

2. 使用快照测试

qemu-system-x86_64 \  
  -drive file=target_snapshot.qcow2,format=qcow2 \  
  -m 2048 -smp 2 -nographic  
  • 特点:所有写入操作仅影响快照文件。

案例总结与知识要点

1. 关键步骤总结

  1. 格式转换:使用 qemu-img convert 实现兼容性迁移。
  2. 磁盘扩容:分两步操作(虚拟磁盘调整 + 分区扩展)。
  3. 用户管理:通过 virt-customize 实现自动化配置。
  4. 镜像优化virt-sparsify 移除未使用空间。
  5. 快照管理:支持安全测试与快速回滚。

2. 核心知识

  • QCOW2 特性:动态分配、快照支持、压缩。
  • 工具依赖qemu-imgvirt-resizevirt-customize
  • 安全实践:避免明文密码、定期清理敏感信息。

故障排查指南

1. 虚拟机无法启动

  • 可能原因:原 VMDK 硬盘模式非 IDE。
  • 解决:在 KVM 配置文件中指定 IDE 总线:
    <disk type='file' device='disk'>  
      <target dev='hda' bus='ide'/>  
    </disk>
    

2. 分区未正确扩展

  • 可能原因virt-resize 未识别分区。
  • 解决:手动扩展分区:
    # 进入虚拟机后操作:
    sudo parted /dev/sda resizepart 1 100%  
    sudo resize2fs /dev/sda1  
    

3. 密码修改无效

  • 可能原因:密码哈希格式错误。
  • 解决:使用 openssl passwd -6 生成正确哈希后重试。

4. 镜像压缩失败

  • 可能原因:镜像存在未清理的临时文件。
  • 解决:执行 virt-sysprep 清理镜像:
    virt-sysprep -a target.qcow2  
    

通过本案例,可系统化完成虚拟机迁移与优化,满足安全性、性能和测试需求。

相关文章:

  • 动手强化学习之马尔可夫决策(机器人篇)
  • keil如何创建一个工程
  • STM32单片机入门学习——第36节: [11-1] SPI通信协议
  • C++中extern关键字
  • 【微信开发者工具】解决微信开发工具的调试器加载错误,从任务栏打开工具可能导致该问题,请不要从任务栏启动工具
  • Redis 常问知识
  • MCP的另一面
  • Spark-SQL
  • 贪心算法(18)(java)距离相等的条形码
  • Docker实战:从零构建高可用的MySQL主从集群与Redis集群
  • 破产计划:openmv烧写UVC.bin直接让openmv作为电脑免驱动摄像头
  • 考研单词笔记 2025.04.14
  • Linux vagrant 导入ubuntu到virtualbox
  • 《小王子》E04:这是一个箱子还是羊?
  • RK3506+net9+VS2022跨平台调试C#程序
  • 30天学Java第十天——反射机制
  • 游戏引擎学习第225天
  • visual studio 常用的快捷键(已经熟悉的就不记录了)
  • 《轨道力学讲义》——第八讲:行星际轨道设计
  • 项目执行中的目标管理:从战略到落地的闭环实践
  • TCL科技一季度净利增超三倍,去年半导体显示业务营收创新高
  • 辽宁省委书记郝鹏、省长王新伟赶到辽阳火灾事故现场指导善后处置工作
  • 发挥全国劳模示范引领作用,加速汽车产业电智化转型
  • 北汽蓝谷一季度净亏损9.5亿元,拟定增募资不超60亿元
  • 深圳宝安区一宗涉宅用地中止出让,起始总价86.27亿元
  • 榆林市委常委王华胜已任榆林市政协党组书记