一、手动导出
查看虚拟机系统盘信息
qm config 101你会看到类似这样的磁盘配置:
scsi0: local-lvm:vm-101-disk-0,size=32G导出虚拟机系统盘
qemu-img convert -p -f raw /dev/mapper/pve-vm--101--disk--0 -O qcow2 /tmp/winserver2025.qcow2
二、导出脚本
实现输入虚拟机ID后自动导出系统盘为qcow2,并且压缩。
#!/bin/bash
# PVE 导出指定VM为QCow2 - 自动解析LVM磁盘 修复版
if [ $# -ne 1 ]; then
echo "用法:$0 <虚拟机ID>"
exit 1
fi
if [ "$(id -u)" != "0" ]; then
echo "必须 root 运行"
exit 1
fi
VMID=$1
TMP="/tmp"
# 获取虚拟机名称
VM_NAME=$(qm config $VMID | grep ^name: | awk '{print $2}')
echo "虚拟机名称:$VM_NAME"
# 获取磁盘ID(例如 vm-105-disk-1)
DISK_ID=$(qm config $VMID | grep ^virtio0: | awk -F'[:,]' '{print $3}' | xargs)
echo "磁盘ID:$DISK_ID"
# 拼接真实LVM路径
DISK="/dev/mapper/pve-${DISK_ID//-/\-\-}"
echo "磁盘路径:$DISK"
# 导出文件
OUT1="$TMP/${VM_NAME}.qcow2"
OUT2="$TMP/${VM_NAME}-ys.qcow2"
echo -e "\n>>> 第一步:导出磁盘为 qcow2..."
qemu-img convert -p -f raw "$DISK" -O qcow2 "$OUT1"
echo -e "\n>>> 第二步:压缩 qcow2..."
qemu-img convert -p -c -O qcow2 "$OUT1" "$OUT2"
echo -e "\n===== 导出完成 ====="
ls -lh "$OUT1" "$OUT2"