PVE导出虚拟机系统盘为qcow2

作者:waMoYu 发布时间: 2026-05-26 阅读量:0 评论数:0

一、手动导出

  1. 查看虚拟机系统盘信息

    qm config 101

    你会看到类似这样的磁盘配置:

    scsi0: local-lvm:vm-101-disk-0,size=32G
  2. 导出虚拟机系统盘

    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"

评论