旧版 VMware 虚拟机迁移至 KVM 平台-案例1
案例背景
将一台旧版 VMware 虚拟机(VMDK 格式)迁移至 KVM 虚拟化平台,完成以下需求:
- 格式转换:将 VMDK 转换为 QCOW2 格式。
- 磁盘扩容:将原 40GB 磁盘扩展至 60GB。
- 密码重置:修改 root 用户密码以增强安全性。
- 镜像优化:压缩镜像以节省存储空间。
环境准备
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: qcow2
,virtual size: 40 GiB
,disk 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-resize
和virt-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 重新设置密码 |
压缩后镜像体积未减小 | 镜像中已无空白块可优化 | 检查原镜像是否已稀疏存储 |
通过上述工作流,可高效完成虚拟机镜像的迁移、优化与安全管理,适用于生产环境中的镜像全生命周期管理。