本教程适合希望将现有物理机(无论是 Linux 还是 Windows)制作成虚拟机镜像的用户。
我们将使用 Ubuntu 安装盘的「Try Ubuntu without installing」模式,通过 qemu-img 安全地导出整块硬盘为 .qcow2 文件。
一、准备工作
1. 下载 Ubuntu 安装盘
前往 Ubuntu 官网,下载 Ubuntu 22.04 LTS ISO。
2. 制作启动盘
使用 Rufus 或 balenaEtcher 制作启动 U 盘。
3. 准备目标硬盘
准备一个足够大的外接硬盘或移动 SSD,用于保存 .qcow2 镜像。
建议使用 ext4 或 NTFS 格式,不要用 exFAT(速度慢且不稳定)。
二、启动「Try Ubuntu」环境
- 插入启动盘,开机进入 BIOS,选择从 USB 启动。
- 在安装界面选择:
「Try Ubuntu without installing」(试用 Ubuntu,不安装)。 - 进入桌面后按
Ctrl + Alt + T打开终端。
此时,你已经在一个不会修改任何硬盘内容的安全环境中。
三、确认设备
在终端输入:
lsblk -f
你会看到类似:
NAME FSTYPE LABEL UUID SIZE MOUNTPOINTS
sda ext4 1234-5678 1.9T
├─sda1 vfat AB-CD 512M
└─sda2 ext4 5678-ABCD 1.9T
sdb3 ext4 9abc-def0 476G
/dev/sda→ 系统所在的源盘/dev/sdb3→ 目标外置硬盘(用于保存镜像)
四、(可选但强烈推荐)清理空闲空间:zerofree
清零空闲块能让 .qcow2 压缩得更小(通常能减半),否则磁盘上被标记为删除但还占用存储块的内容依旧会占用虚拟磁盘的空间。
sudo apt update
sudo apt install -y zerofree
sudo mount -o ro /dev/sda2 /mnt/sda2
sudo zerofree -v /dev/sda2
sudo umount /mnt/sda2
五、挂载目标硬盘
sudo mkdir -p /mnt/backup
sudo mount -o rw,async,noatime /dev/sdb3 /mnt/backup
检查挂载结果:
df -h /mnt/backup
六、正式转换:qemu-img convert
安装工具:
sudo apt install -y qemu-utils
开始转换整盘:
sudo qemu-img convert -p -O qcow2 /dev/sda /mnt/backup/mycomputer-$(date +%F).qcow2
参数解释:
| 参数 | 含义 |
|---|---|
-p | 显示进度条 |
-c(可选) | 启用压缩(zlib 单线程压缩) |
-O qcow2 | 指定输出格式 |
/dev/sda | 源盘 |
/mnt/backup/...qcow2 | 输出路径,文件名可以自己定义 |
📈 提示:
- -c 压缩模式较慢,但体积更小。
- 若追求速度,可去掉
-c。
七、验证结果
转换完成后:
sudo qemu-img info /mnt/backup/XXX.qcow2
输出示例:
image: XXX.qcow2
file format: qcow2
virtual size: 1.9T
disk size: 138G
cluster_size: 65536
compression type: zlib
说明镜像制作成功 ✅
最后同步缓存并卸载:
sudo sync
sudo umount /mnt/backup
八、在 Proxmox 中导入镜像或临时测试
直接测试
将文件传到 Proxmox 主机后执行:
qm importdisk 102 /path/to/syna3090-2025-11-07.qcow2 local
或导入到 LVM-Thin 存储:
qm importdisk 102 /path/to/syna3090-2025-11-07.qcow2 local-lvm
再在虚拟机设置中:
- 添加该磁盘到 SATA0 或 SCSI0;
- 设置启动顺序;
- 开机启动系统。
临时导入另一台机器测试(挂载外部存储并测试 .qcow2 镜像)
有时我们只想快速验证一个 .qcow2 镜像能否启动,不想先导入到 local-lvm。
这种情况下,可以在 Proxmox 中临时注册外部移动硬盘,直接挂载并运行测试虚拟机,
测试完成后再干净删除配置。
1️⃣ 注册外部存储
假设移动硬盘已挂载到 /mnt/sdb3:
pvesm add dir extern-hdd --path /mnt/sdb3 --content images --is_mountpoint yes
这一步只是在
/etc/pve/storage.cfg写入一条记录,不会改动磁盘数据。
注册成功后:
pvesm status
会出现一行:
extern-hdd dir active ...
2️⃣ 将镜像放入正确目录结构
Proxmox 要求目录型存储中的虚拟磁盘路径格式如下:
/mnt/sdb3/images/<VMID>/vm-<VMID>-disk-0.qcow2
所以:
mkdir -p /mnt/sdb3/images/102
mv /mnt/sdb3/3090-ubuntu22-251031.qcow2 /mnt/sdb3/images/102/vm-102-disk-0.qcow2
3️⃣ 创建并挂载测试虚拟机
qm create 102 --name qcow2-test --memory 4096 --cores 4 --net0 virtio,bridge=vmbr0 --bios ovmf --machine q35
qm set 102 --sata0 extern-hdd:102/vm-102-disk-0.qcow2
qm set 102 --boot order=sata0
qm start 102
此时即可在 Proxmox Web Console 中直接启动并测试该 .qcow2 系统。
4️⃣ 测试完毕后清理环境
先销毁测试虚拟机:
qm destroy 102
然后移除临时存储定义(不会删除硬盘上的镜像):
pvesm remove extern-hdd
umount /mnt/sdb3
✅ 总结
| 操作 | 命令 | 说明 |
|---|---|---|
| 注册外部存储 | pvesm add dir extern-hdd --path /mnt/sdb3 --content images | 可在 Proxmox 中识别移动硬盘 |
| 创建/挂载 VM | qm create + qm set + qm start | 直接运行外部 qcow2 镜像 |
| 测试完删除 VM | qm destroy 102 | 移除测试虚拟机 |
| 清理存储定义 | pvesm remove extern-hdd | 完全回退配置,不改动数据 |
💡 这种方法非常适合「验证镜像是否可启动」「快速迁移验证」「外部调试系统」等场景。
Proxmox 只需几条命令即可在不导入镜像的情况下直接运行外部系统盘,非常高效。
九、FAQ
| 问题 | 说明 |
|---|---|
| 为什么进度一直 0.00%? | 前期在扫描映射表,属于正常现象,耐心等待。 |
| 压缩模式太慢? | 去掉 -c,速度会提升多倍。 |
| 文件比实际使用空间大? | 运行 zerofree 再转换,可大幅减小体积。 |
| 能备份 Windows 吗? | 可以,效果同理(系统盘完整封装)。 |
结语
通过 Ubuntu 安装盘的 Live 模式 + qemu-img convert,
你可以在不破坏源系统的前提下,安全地将整块物理磁盘打包成 .qcow2 虚拟机镜像。
这一方法简单、安全、跨平台,非常适合:
- 系统迁移(P2V)
- 数据备份
- 云环境或 Proxmox 虚拟化部署