项目背景
需将一台旧版 VMware 虚拟机(VMDK 格式)迁移至 KVM 虚拟化平台,具体要求如下:
- 格式转换:将 VMDK 转换为 QCOW2 格式。
- 磁盘扩容:将原 40GB 磁盘扩展至 60GB。
- 密码重置:修改
aiden
用户密码以增强安全性。 - 新建用户:创建
test01
用户并设置密码。 - 镜像优化:压缩镜像以节省存储空间。
- 镜像快照:创建快照用于测试环境。
环境准备
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. 关键步骤总结
- 格式转换:使用
qemu-img convert
实现兼容性迁移。 - 磁盘扩容:分两步操作(虚拟磁盘调整 + 分区扩展)。
- 用户管理:通过
virt-customize
实现自动化配置。 - 镜像优化:
virt-sparsify
移除未使用空间。 - 快照管理:支持安全测试与快速回滚。
2. 核心知识
- QCOW2 特性:动态分配、快照支持、压缩。
- 工具依赖:
qemu-img
、virt-resize
、virt-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
通过本案例,可系统化完成虚拟机迁移与优化,满足安全性、性能和测试需求。