KVM qcow2镜像格式转换raw
KVM 虚拟机最常用的两种磁盘镜像格式是 qcow2 和 raw。
不少新手在创建虚拟机时选了 qcow2,后来因为性能或兼容性问题想转成 raw,却不知道从哪下手。
其实用 KVM 自带的 qemu-img 工具就能完成格式转换,整个过程并不复杂,但不同格式之间的性能差异和转换后的引导问题需要提前搞清楚。
转换前应该准备什么
正式操作之前,建议先完成三件事,避免转换后虚拟机起不来。
- 备份原镜像:把 qcow2 文件复制一份,例如
cp vm01.qcow2 vm01.qcow2.bak。转换过程会生成新文件,原文件不会动,但备份能应对意外断电或误操作。 - 关闭虚拟机:推荐先执行
virsh shutdown vm01,确保虚拟机完全关机后再转换。热转换可能造成数据不一致。 - 确认磁盘空间:raw 是完整占用空间的格式,转换后文件大小等于虚拟磁盘定义的大小。比如 qcow2 镜像实际只有 5GB,但虚拟磁盘为 20GB,转换成 raw 后就会占用 20GB。先用
df -h检查目标目录剩余空间。
使用 qemu-img 完成 qcow2 转 raw
转换命令的核心是 qemu-img convert,格式为:
qemu-img convert -f qcow2 -O raw vm01.qcow2 vm01.raw
参数说明:
-f qcow2:指定源镜像格式,也可以不加,qemu-img 会自动识别。-O raw:指定输出格式,注意是大写字母 O。vm01.qcow2:原镜像路径。vm01.raw:转换后生成的新文件。
如果源镜像本身是其他格式,比如 vmdk,也可以先转换成 qcow2 再转 raw,或者直接用 -f vmdk -O raw 一步到位。
转换过程没有进度条,等待时间取决于磁盘大小和 I/O 性能。
转换完成后用 ls -lh vm01.raw 查看文件大小,确认生成成功。
转换后如何让虚拟机使用 raw 镜像
得到 raw 镜像后,还需要让 KVM 指向新文件。
可以用 virsh edit vm01 编辑虚拟机的磁盘配置,把原来的 改成 。
也可以把 raw 镜像放回原路径并复用原文件指针:
# 将原 qcow2 改名备份
mv vm01.qcow2 vm01.qcow2.bak
# 让 raw 文件使用原 qcow2 的文件名
mv vm01.raw vm01.qcow2
这种做法不用改 XML 配置,但容易混淆真实格式。
更推荐直接改 XML 指向,然后在启动前用 qemu-img info vm01.raw 检查格式是否为 raw。
启动虚拟机后执行 virsh start vm01,能正常进入系统说明转换成功。
qcow2 和 raw 的性能差异与选型建议
很多人关心 raw 是不是一定比 qcow2 快。
严格来说,raw 格式没有元数据开销,I/O 路径更短,在裸设备直通和高并发随机读写场景下性能通常略高于 qcow2,但差距并没有老一辈传说中那么大。
现代 KVM 对 qcow2 做了大量优化,开启 cache=none 或 io=threads 后,大多数业务场景下两者几乎无感。
选择时主要看两点:
- 需要快照、压缩、加密:选 qcow2,它原生支持这些特性,raw 没有。
- 追求极致磁盘性能或做裸设备映射:选 raw,它能直接作为块设备使用,方便直通。
另外,raw 格式对损坏的容忍度较低,一旦写入中断容易导致整块文件部分数据不可读;
qcow2 通过写时复制机制,在某些异常情况下更容易恢复。
如果你的宿主机内存充足,建议在创建虚拟机时优先考虑 qcow2,日常运维更灵活。
转换和对比中常见的坑
- 转换后虚拟机无法启动:多数是因为镜像内设置的引导分区没有正确指向新磁盘。进入救援模式检查
/boot和引导配置,必要时重建 grub。 - 忘记开启 virtio 驱动:如果之前用的 IDE 或 SATA 磁盘,转换成 raw 后想改用 virtio,需要先进系统安装 virtio 驱动,再切换磁盘类型。
- 盲目追求 raw 性能:在机械硬盘或普通 SATA 上,raw 和 qcow2 的速度差距可以忽略,反而 qcow2 的压缩和快照特性更适合日常备份。
- 转换后忘记修改磁盘格式:如果 XML 中仍标记为 qcow2,
virsh start会报错。用qemu-img info对比实际格式和 XML 配置即可定位。
如何验证转换结果是否正常
完成转换后,建议按以下顺序检查:
# 1. 查看镜像格式
qemu-img info vm01.raw
# 2. 检查文件完整性
qemu-img check vm01.raw
# 3. 启动虚拟机
virsh start vm01
# 4. 进入系统后查看磁盘分区和文件系统
fdisk -l
df -h
qemu-img info 输出中 file format: raw 就说明转换成功。qemu-img check 如果没有报错,镜像文件基本可靠。
进入系统后 df -h 看到的分区大小应与原系统一致。
新手常问的一个问题是:转换后原来的 qcow2 文件能不能删?
建议先保留原文件,等新镜像稳定运行一周后再删除。
另有人问能不能反过来把 raw 转成 qcow2,命令完全对称:qemu-img convert -f raw -O qcow2 vm01.raw vm01.qcow2,不过转换出来的 qcow2 文件默认是稀疏分配,实际占用空间取决于写过的数据量,这一点和 raw 不同。
如果你正在处理 KVM qcow2 镜像格式转换 raw 和不同镜像格式性能对比的需求,建议先按本文步骤完整执行一遍,再根据自己的硬件和业务场景做取舍。
遇到启动异常时,优先回看避坑部分,重点检查 XML 配置里的磁盘类型和实际格式是否一致。