跳过正文
  1. 博客文章/

PVE AutoSnap 自动快照工具使用指南

·370 字·2 分钟·
虚拟化 备份 PVE Proxmox AutoSnap
Zayn
作者
Zayn
专注 Kubernetes、CI/CD、可观测性等云原生技术栈,记录生产环境中的实战经验与踩坑复盘。
目录

工具简介
#

PVE AutoSnap(cv4pve-autosnap)用来给 Proxmox VE 的虚拟机做自动快照:定时创建、按策略保留和清理,支持批量管理。项目地址:cv4pve-autosnap

安装
#

# 下载最新版本
wget https://github.com/Corsinvest/cv4pve-autosnap/releases/download/v1.14.8/cv4pve-autosnap-linux-x64.zip

# 解压文件
unzip cv4pve-autosnap-linux-x64.zip

# 移动到系统路径
mv cv4pve-autosnap /usr/bin/

# 设置执行权限
chmod a+x /usr/bin/cv4pve-autosnap

注意:请根据需要选择合适的版本,最新版本信息可查看 GitHub Releases

基本用法
#

首先设置 PVE 连接参数:

SNAP_LIST="111,101"          # 需要备份的虚拟机 ID 列表
PVE_USER='root@pam'          # PVE 用户名
PVE_PASSWD='your_password'   # PVE 密码
PVE_HOST='192.168.8.19'      # PVE 主机地址

创建虚拟机快照
#

批量为指定虚拟机创建快照:

for vmid in ${SNAP_LIST//,/ }; do
    cv4pve-autosnap --host=${PVE_HOST} \
    --username=${PVE_USER} \
    --password=${PVE_PASSWD} \
    --vmid=${vmid} \
    snap --label=daily --keep=3
done

参数说明

  • --host:PVE 主机地址
  • --username:PVE 用户名
  • --password:PVE 密码
  • --vmid:虚拟机 ID
  • --label:快照标签(如 daily、weekly)
  • --keep:保留快照数量

查看快照状态
#

查看指定虚拟机的快照信息:

cv4pve-autosnap --host=${PVE_HOST} \
    --username=${PVE_USER} \
    --password=${PVE_PASSWD} \
    --vmid=111 status

封装成脚本
#

创建 Script.pve-snap 脚本文件:

#!/bin/bash
#================================================================
# 文件名:    Script.pve-snap
# 版本:      v1.0
# 日期:      2023/9/25
# 作者:      yangzun
# 邮箱:      yangzun@treesir.pub
# 描述:      PVE 虚拟机快照自动化脚本
#================================================================

# 默认配置参数
SNAP_LIST=${SNAP_LIST:-'101'}
PVE_USER=${PVE_USER:-'root@pam'}
PVE_PASSWD=${PVE_PASSWD:-'your_password'}
PVE_HOST=${PVE_HOST:-'192.168.8.19'}

# 安装 AutoSnap 工具
function install_autosnap() {
    echo "正在安装 cv4pve-autosnap 工具..."
    wget https://github.com/Corsinvest/cv4pve-autosnap/releases/download/v1.14.8/cv4pve-autosnap-linux-x64.zip
    unzip cv4pve-autosnap-linux-x64.zip
    mv cv4pve-autosnap /usr/bin/
    chmod a+x /usr/bin/cv4pve-autosnap
    echo "cv4pve-autosnap 工具安装完成"
}

# 执行快照操作
function execute_snapshot() {
    echo "开始执行虚拟机快照操作..."
    for vmid in ${SNAP_LIST//,/ }; do
        echo "正在为虚拟机 ${vmid} 创建快照..."
        cv4pve-autosnap --host=${PVE_HOST} \
        --username=${PVE_USER} \
        --password=${PVE_PASSWD} \
        --vmid=${vmid} \
        snap --label=daily --keep=3
    done
    echo "快照操作执行完成"
}

# 查看快照状态
function check_snapshot_status() {
    echo "正在检查虚拟机快照状态..."
    for vmid in ${SNAP_LIST//,/ }; do
        echo "虚拟机 ${vmid} 的快照状态:"
        cv4pve-autosnap --host=${PVE_HOST} \
        --username=${PVE_USER} \
        --password=${PVE_PASSWD} \
        --vmid=${vmid} \
        status
    done
}

# 主程序逻辑
case "${1}" in
    'exec')
        install_autosnap
        execute_snapshot
        ;;
    'plan')
        install_autosnap
        check_snapshot_status
        ;;
    *)
        echo "用法: $0 {exec|plan}"
        echo "  exec - 执行快照创建"
        echo "  plan - 查看快照状态"
        exit 1
        ;;
esac

GitLab CI/CD 配置文件
#

创建 .gitlab-ci.yml 配置文件:

# 全局变量配置
variables:
  extends: .default_vars

# 计划阶段 - 查看快照状态
.plan:
  stage: plan
  extends:
    - .schedule_trigger_disable

# 执行阶段 - 创建快照
.exec:
  stage: exec
  extends:
    - .master_schedule_manual_trigger

# 公共扩展配置
.extends_group:
  extends:
    - .runner_tag
    - .harbor_auth_vars
    - .load_function_before_jobs
    - .script_exec_vars
    - .nexus_auth_vars

# 计划脚本模板
.plan_script: &plan_script
  extends:
    - .plan
    - .extends_group
  script:
    - set -- $CI_JOB_NAME
    - chmod a+x Script.$1
    - ./Script.$1 plan

# 执行脚本模板
.exec_script: &exec_script
  extends:
    - .exec
    - .extends_group
  script:
    - set -- $CI_JOB_NAME
    - chmod a+x Script.$1
    - ./Script.$1 exec

# 任务定义
pve-snap plan: *plan_script   # 预览快照状态
pve-snap exec: *exec_script   # 执行快照创建

运行效果展示
#

计划阶段执行结果
#

image-20231005164932661

执行阶段运行结果
#

image-20231005165104628

几点提醒
#

示例里的明文密码只是演示,实际用环境变量或 CI 的 secret 传进去。保留数量 --keep 按存储空间定,留 3-5 份滚动比较常见,快照虽然是增量的,但多了也会占空间。

快照创建失败一般就几个原因:连不上 PVE(查网络、8006 端口、认证信息对不对)、用户权限不够、存储满了、虚拟机状态不对。

相关文章

VMware ESXi 虚拟机克隆完整操作指南
·246 字·2 分钟
虚拟化 Esxi 克隆 Vmware
使用 Kubernetes CronJob 自动备份 MySQL 数据到 MinIO
·1656 字·8 分钟
数据库 Mysql 备份 MinIO Kubernetes Cronjob
Istio 服务网格完全指南:从架构原理到生产实践的深度学习笔记
·12593 字·60 分钟
云原生 实践记录 Istio Envoy 微服务 +2