二、虚拟化技术与云计算-9-kvm-virtualization-guide-part5-snapshot-management
·
KVM 虚拟化技术实战指南 - 第五部分:虚拟机快照管理
文档信息
- 系列: KVM 虚拟化技术实战指南
- 部分: 第五部分 - 虚拟机快照管理
- 版本: V1.0
- 创建日期: 2026 年 3 月 9 日
- 对应视频: 10-10 (03:13)
- 预计阅读时间: 1-2 小时
目录
快照基础概念
什么是虚拟机快照?
定义:
虚拟机快照是 VM 在某个时间点的完整状态记录,包括:
- 磁盘数据
- 内存状态 (可选)
- CPU 状态
- 设备状态
- 配置信息
作用:
┌─────────────────────────────────────────────────────────┐
│ 快照的主要用途 │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. 备份与恢复 │
│ - 系统更新前创建快照 │
│ - 配置更改前创建快照 │
│ - 快速恢复到已知状态 │
│ │
│ 2. 开发与测试 │
│ - 测试前保存基准状态 │
│ - 测试失败后快速恢复 │
│ - 多版本对比测试 │
│ │
│ 3. 灾难恢复 │
│ - 系统故障后恢复 │
│ - 数据损坏后恢复 │
│ - 误操作后恢复 │
│ │
│ 4. 培训与演示 │
│ - 保存演示环境状态 │
│ - 快速重置实验环境 │
│ │
└─────────────────────────────────────────────────────────┘
快照工作原理
写时复制 (Copy-on-Write, COW):
创建快照前:
┌─────────────────────────────┐
│ 原始磁盘 (qcow2) │
│ ┌─────────────────────┐ │
│ │ 数据块 A, B, C, D │ │
│ └─────────────────────┘ │
└─────────────────────────────┘
创建快照后:
┌─────────────────────────────┐
│ 原始磁盘 (只读) │
│ ┌─────────────────────┐ │
│ │ 数据块 A, B, C, D │ │ ← 快照点
│ └─────────────────────┘ │
│ ↓ │
│ ┌─────────────────────┐ │
│ │ 增量磁盘 (可写) │ │
│ │ 新数据:E, F │ │
│ └─────────────────────┘ │
└─────────────────────────────┘
读取数据流程:
1. 先读取增量磁盘
2. 如果不存在,读取原始磁盘
3. 合并返回
内存快照原理:
内存状态保存:
┌─────────────────────────────┐
│ VM 运行状态 │
│ ┌─────────────────────┐ │
│ │ CPU 寄存器 │ │
│ │ 内存内容 (4GB) │ │
│ │ 设备状态 │ │
│ └─────────────────────┘ │
│ ↓ │
│ 保存到文件: │
│ vm-name-snapshot.mem │
│ (内存大小 = 文件大小) │
└─────────────────────────────┘
快照类型详解
按状态分类
1. 内存快照 (带状态快照)
特点:
- 保存 VM 运行状态 (内存内容)
- VM 保持运行
- 恢复时回到精确时间点
- 文件较大 (等于内存大小)
使用场景:
✓ 保存应用运行状态
✓ 调试中的程序
✓ 需要精确恢复的场景
✗ 长期保存 (占用空间大)
✗ 频繁创建 (性能影响)
创建命令:
# 创建内存快照
virsh snapshot-create-as vm-name \
snapshot-001 \
"内存快照 - 应用运行状态" \
--live \
--disk-only
# 查看快照
virsh snapshot-list vm-name
# 输出:
# Name Creation Time State
# ------------------------------------------------------------
# snapshot-001 2026-03-09 10:30:00 +0800 running
恢复命令:
# 恢复到内存快照
virsh snapshot-revert vm-name snapshot-001
# VM 将回到创建快照时的精确状态
# 包括内存中的数据和运行的程序
2. 磁盘快照 (无状态快照)
特点:
- 仅保存磁盘数据
- VM 可以运行或关闭
- 不保存内存状态
- 文件较小
使用场景:
✓ 系统备份
✓ 配置更改前
✓ 软件更新前
✓ 长期保存
✓ 频繁创建
创建命令:
# 创建磁盘快照 (VM 运行)
virsh snapshot-create-as vm-name \
disk-snapshot-001 \
"磁盘快照 - 更新前" \
--disk-only
# 创建磁盘快照 (VM 关闭)
virsh shutdown vm-name
virsh snapshot-create-as vm-name \
disk-snapshot-002 \
"磁盘快照 - 关机状态"
按技术分类
1. QCOW2 格式快照
QCOW2 特性:
- 写时复制 (COW)
- 支持快照链
- 压缩存储
- 加密支持
创建方法:
# 方法 1: 使用 virsh
virsh snapshot-create-as vm-name qcow2-snap-001
# 方法 2: 使用 qemu-img
qemu-img create -f qcow2 \
-b /var/lib/libvirt/images/vm-name.qcow2 \
/var/lib/libvirt/images/vm-name-snap1.qcow2
# 查看镜像信息
qemu-img info /var/lib/libvirt/images/vm-name.qcow2
快照链结构:
vm-name.qcow2 (基础镜像,只读)
↓
vm-name-snap1.qcow2 (快照 1)
↓
vm-name-snap2.qcow2 (快照 2)
↓
vm-name-snap3.qcow2 (当前状态)
读取流程:
读取数据 → snap3 → snap2 → snap1 → base
2. LVM 快照
LVM 快照原理:
原始逻辑卷:
/dev/vg0/lv_vm1 (100GB)
创建快照:
lvcreate -L 10G -s -n lv_vm1_snap /dev/vg0/lv_vm1
快照卷:
/dev/vg0/lv_vm1_snap (10GB, 增量)
特点:
- 快照卷大小只需原始卷的一部分
- 实际使用空间取决于数据变化量
- 性能优于 QCOW2
创建 LVM 快照:
# 创建快照
lvcreate -L 20G -s -n vm1_snap \
/dev/vg0/lv_vm1
# 查看快照
lvs -o +lv_snapshot,origin
# 输出:
# LV VG Attr LSize Origin
# lv_vm1 vg0 -wi-ao---- 100.00g
# lv_vm1_snap vg0 swi-a-s--- 20.00g lv_vm1
恢复 LVM 快照:
# 合并快照 (恢复)
lvconvert --merge /dev/vg0/lv_vm1_snap
# 需要重启 VM
virsh destroy vm-name
# 合并完成后
virsh start vm-name
3. 外部快照 vs 内部快照
内部快照:
特点:
- 快照信息存储在镜像文件内部
- QCOW2 格式支持
- 管理方便
- 快照链在单个文件中
命令:
virsh snapshot-create-as vm-name snap1
外部快照:
特点:
- 创建新的镜像文件
- 基于父镜像
- 可以独立管理
- 支持不同格式
命令:
qemu-img create -f qcow2 \
-b parent.qcow2 \
child.qcow2
快照创建与管理
创建快照
方法 1: virsh snapshot-create-as
完整参数示例:
virsh snapshot-create-as vm-name \
snapshot-20260309-120000 \
"系统更新前备份" \
--live \
--disk-only \
--atomic \
--no-metadata
参数说明:
| 参数 | 说明 | 用途 |
|---|---|---|
--live | VM 运行时创建 | 业务不中断 |
--disk-only | 仅磁盘快照 | 不保存内存 |
--atomic | 原子操作 | 确保一致性 |
--no-metadata | 无元数据 | 外部管理 |
--quiesce | 冻结文件系统 | 数据库一致性 |
最佳实践参数组合:
# 生产环境 - 数据库 VM
virsh snapshot-create-as db-vm \
pre-update-snap \
"数据库更新前" \
--live \
--disk-only \
--quiesce \
--atomic
# 开发环境 - Web VM
virsh snapshot-create-as web-vm \
test-snap \
"测试前快照" \
--live \
--disk-only
方法 2: virsh snapshot-create
使用 XML 配置:
<!-- snapshot.xml -->
<domainsnapshot>
<description>测试环境快照</description>
<name>test-snapshot-001</name>
<creationTime>1678348800</creationTime>
<state>running</state>
<memory snapshot='yes' file='/var/lib/libvirt/qemu/snapshot/vm-name/test-snapshot-001.mem'/>
<disks>
<disk name='vda' snapshot='yes'/>
</disks>
</domainsnapshot>
# 从 XML 创建
virsh snapshot-create vm-name snapshot.xml
# 编辑创建
virsh snapshot-edit vm-name
方法 3: 自动化脚本
#!/bin/bash
# create-snapshot.sh
VM_NAME=$1
DESCRIPTION=$2
SNAP_NAME="snap-$(date +%Y%m%d-%H%M%S)"
if [ -z "$VM_NAME" ]; then
echo "Usage: $0 <vm-name> [description]"
exit 1
fi
# 检查 VM 是否存在
if ! virsh domstate $VM_NAME &>/dev/null; then
echo "VM $VM_NAME does not exist"
exit 1
fi
# 创建快照
echo "Creating snapshot $SNAP_NAME for $VM_NAME..."
virsh snapshot-create-as $VM_NAME \
$SNAP_NAME \
"${DESCRIPTION:-Auto snapshot}" \
--live \
--disk-only
if [ $? -eq 0 ]; then
echo "Snapshot created successfully"
# 显示快照信息
virsh snapshot-info $VM_NAME $SNAP_NAME
else
echo "Failed to create snapshot"
exit 1
fi
使用方法:
chmod +x create-snapshot.sh
./create-snapshot.sh web-vm "Web 服务器更新前"
查看快照
查看快照列表
# 列出所有快照
virsh snapshot-list vm-name
# 树形显示快照链
virsh snapshot-list vm-name --tree
# 显示父快照
virsh snapshot-list vm-name --parent
# 显示快照数量
virsh snapshot-list vm-name | wc -l
查看快照详情
# 查看特定快照信息
virsh snapshot-info vm-name snapshot-name
# 输出示例:
# Name: snapshot-001
# Domain: vm-name
# Current: no
# State: running
# Creation Time: 2026-03-09 10:30:00 +0800
# Description: 系统更新前备份
# 查看快照 XML 配置
virsh snapshot-dumpxml vm-name snapshot-name
# 查看磁盘信息
virsh snapshot-disk vm-name snapshot-name
管理快照
删除快照
# 删除单个快照
virsh snapshot-delete vm-name snapshot-name
# 删除快照并合并磁盘 (释放空间)
virsh snapshot-delete vm-name snapshot-name --children
# 删除所有快照
for snap in $(virsh snapshot-list vm-name --name); do
virsh snapshot-delete vm-name $snap
done
恢复快照
# 恢复到指定快照
virsh snapshot-revert vm-name snapshot-name
# 恢复并强制 (即使 VM 运行)
virsh snapshot-revert vm-name snapshot-name --running
# 恢复当前快照
virsh snapshot-revert vm-name --current
设置当前快照
# 设置当前快照指针
virsh snapshot-current vm-name snapshot-name
# 查看当前快照
virsh snapshot-current vm-name
快照链管理
理解快照链
快照链结构:
基础镜像 (Base Image)
↓
快照 1 (Snapshot 1)
↓
快照 2 (Snapshot 2)
↓
快照 3 (Current State)
数据流向:
读取:Current → Snap3 → Snap2 → Snap1 → Base
写入:直接写入 Current
查看快照链:
# 树形显示
virsh snapshot-list vm-name --tree
# 输出示例:
# snapshot-001
# └─ snapshot-002
# └─ snapshot-003
# └─ snapshot-004
# 查看镜像 backing 文件
qemu-img info /var/lib/libvirt/images/vm-name.qcow2
qemu-img info /var/lib/libvirt/images/vm-name-snap1.qcow2
快照链操作
合并快照链
# 提交快照到父镜像
virsh blockcommit vm-name vda --active --pivot
# 完整合并流程
# 1. 关闭 VM
virsh shutdown vm-name
# 2. 合并快照
qemu-img commit /var/lib/libvirt/images/vm-name-snap3.qcow2
# 3. 删除快照文件
rm /var/lib/libvirt/images/vm-name-snap3.qcow2
# 4. 更新 VM 配置
virsh edit vm-name
# 修改磁盘路径指向父镜像
合并整个快照链
#!/bin/bash
# merge-snapshot-chain.sh
VM_NAME=$1
echo "Merging snapshot chain for $VM_NAME..."
# 获取快照列表 (从旧到新)
SNAPS=$(virsh snapshot-list $VM_NAME --name | sort)
# 从最新的快照开始合并
for snap in $(echo "$SNAPS" | tac); do
echo "Committing $snap..."
# 获取快照磁盘文件
DISK=$(virsh snapshot-disk $VM_NAME $snap | grep vda | awk '{print $2}')
# 提交到父镜像
qemu-img commit $DISK
# 删除快照文件
rm -f $DISK
# 删除快照元数据
virsh snapshot-delete $VM_NAME $snap
done
echo "Snapshot chain merged successfully"
快照链优化
减少快照链深度
问题:
快照链过长导致:
- 读取性能下降 (需要遍历多层)
- 管理复杂度增加
- 故障风险增加
建议:
- 快照链深度不超过 10 层
- 定期合并快照
优化步骤:
# 1. 检查快照链深度
DEPTH=$(virsh snapshot-list vm-name --tree | grep -c "└")
echo "Snapshot chain depth: $DEPTH"
# 2. 如果过深,进行合并
if [ $DEPTH -gt 10 ]; then
echo "Snapshot chain too deep, merging..."
# 关闭 VM
virsh shutdown vm-name
# 合并所有快照
./merge-snapshot-chain.sh vm-name
# 创建新的基础镜像
echo "Created new base image"
fi
性能监控
#!/bin/bash
# monitor-snapshot-performance.sh
VM_NAME=$1
# 获取磁盘信息
DISK=$(virsh domblklist $VM_NAME | grep vda | awk '{print $2}')
# 查看镜像信息
echo "=== Disk Information ==="
qemu-img info $DISK
# 查看实际占用空间
echo -e "\n=== Actual Disk Usage ==="
du -h $DISK
# 查看虚拟大小
echo -e "\n=== Virtual Size ==="
qemu-img info $DISK | grep "virtual size"
# 查看快照数量
echo -e "\n=== Snapshot Count ==="
virsh snapshot-list $VM_NAME | wc -l
快照性能优化
存储优化
选择正确的存储格式
QCOW2 vs RAW:
| 特性 | QCOW2 | RAW |
|---|---|---|
| 快照支持 | ✅ 优秀 | ❌ 需要 LVM |
| 空间效率 | ✅ 精简配置 | ❌ 预分配 |
| 性能 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 压缩 | ✅ 支持 | ❌ 不支持 |
| 加密 | ✅ 支持 | ❌ 需要 LUKS |
推荐场景:
QCOW2:
✓ 需要频繁快照
✓ 存储空间有限
✓ 开发测试环境
RAW:
✓ 性能要求极高
✓ 生产数据库
✓ 使用 LVM 管理
预分配 vs 精简配置
预分配 (Preallocation):
# 创建预分配镜像
qemu-img create -f qcow2 \
-o preallocation=full \
/var/lib/libvirt/images/vm-name.qcow2 \
100G
# 优点:
# - 性能最佳
# - 无碎片
# - 空间确定
# 缺点:
# - 创建时间长
# - 占用全部空间
精简配置 (Sparse):
# 创建精简镜像 (默认)
qemu-img create -f qcow2 \
/var/lib/libvirt/images/vm-name.qcow2 \
100G
# 实际占用:
# - 初始:几 MB
# - 随使用增长
# - 最大 100G
# 优点:
# - 创建快速
# - 节省空间
# - 按需分配
# 缺点:
# - 性能稍差
# - 可能碎片化
I/O 优化
缓存模式优化
# 查看当前缓存模式
virsh domblklist vm-name
# 修改缓存模式
virsh attach-disk vm-name \
--source /var/lib/libvirt/images/vm-name.qcow2 \
--target vda \
--cache none \
--io native \
--config
# 缓存模式对比:
# none: 性能最佳,无缓存
# writeback: 写回缓存,性能好
# writethrough: 直写,安全但慢
使用 SSD 存储
# 检测 SSD
cat /sys/block/sda/queue/rotating
# 0 = SSD, 1 = HDD
# 为 SSD 优化
echo "none" > /sys/block/sda/queue/scheduler
# 在 VM 中使用
virsh edit vm-name
# <driver name='qemu' type='qcow2' cache='none' discard='unmap'/>
内存优化
避免内存快照
# 除非必要,否则使用 --disk-only
virsh snapshot-create-as vm-name \
snap-001 \
--disk-only \
--live
# 内存快照占用:
# 4GB 内存 = 4GB 快照文件
# 8GB 内存 = 8GB 快照文件
# 磁盘快照占用:
# 仅增量数据 (通常几 MB 到几 GB)
快照期间暂停 I/O
# 对于数据库 VM,使用 --quiesce
virsh snapshot-create-as vm-name \
db-snapshot \
--live \
--disk-only \
--quiesce
# QEMU guest agent 需要运行
# 在 VM 中安装:
# CentOS: yum install qemu-guest-agent
# Ubuntu: apt install qemu-guest-agent
快照故障排查
常见问题 1: 快照创建失败
症状:
virsh snapshot-create-as vm-name snap1
# error: internal error: unable to execute QEMU command 'transaction'
排查步骤:
# 1. 检查磁盘格式
qemu-img info /var/lib/libvirt/images/vm-name.qcow2
# 必须是 qcow2 或其他支持快照的格式
# 2. 检查磁盘空间
df -h /var/lib/libvirt/images/
# 确保有足够空间
# 3. 检查权限
ls -la /var/lib/libvirt/images/
# 确保 libvirt-qemu 有写权限
# 4. 查看 QEMU 日志
tail -f /var/log/libvirt/qemu/vm-name.log
# 5. 检查 VM 状态
virsh domstate vm-name
# 某些状态不支持快照
解决方案:
# 如果是 RAW 格式,转换为 QCOW2
virsh shutdown vm-name
qemu-img convert -f raw -O qcow2 \
/var/lib/libvirt/images/vm-name.raw \
/var/lib/libvirt/images/vm-name.qcow2
# 更新 VM 配置
virsh edit vm-name
# 修改磁盘路径
# 启动 VM
virsh start vm-name
常见问题 2: 快照恢复失败
症状:
virsh snapshot-revert vm-name snap1
# error: unable to open file '/path/to/snapshot.qcow2'
排查:
# 1. 检查快照文件是否存在
ls -la /var/lib/libvirt/images/*snap*.qcow2
# 2. 检查快照链完整性
qemu-img check /var/lib/libvirt/images/vm-name-snap1.qcow2
# 3. 查看快照 XML
virsh snapshot-dumpxml vm-name snap1
# 4. 修复快照链
qemu-img rebase -f qcow2 \
-b /var/lib/libvirt/images/vm-name.qcow2 \
/var/lib/libvirt/images/vm-name-snap1.qcow2
常见问题 3: 快照占用空间过大
症状:
# 快照文件比预期大很多
du -h vm-name-snap1.qcow2
# 100G (而实际数据变化只有几 GB)
解决:
# 1. 压缩快照
qemu-img convert -f qcow2 -O qcow2 -c \
vm-name-snap1.qcow2 \
vm-name-snap1-compressed.qcow2
# 2. 清理未使用块
# 在 VM 中执行
fstrim -av
# 3. 压缩镜像
virsh domfstrim vm-name
# 4. 重新创建快照
virsh snapshot-delete vm-name snap1
virsh snapshot-create-as vm-name snap1 --disk-only
常见问题 4: 快照链损坏
症状:
qemu-img check vm-name-snap2.qcow2
# error: Could not open backing file
修复:
# 1. 检查所有父镜像
for img in /var/lib/libvirt/images/*snap*.qcow2; do
echo "Checking $img..."
qemu-img info $img | grep "backing file"
done
# 2. 修复 backing 文件路径
qemu-img rebase -f qcow2 \
-u \
-b /correct/path/parent.qcow2 \
child.qcow2
# 3. 如果父镜像丢失,尝试合并
qemu-img commit child.qcow2
快照最佳实践
快照命名规范
# 推荐格式
<用途>-<日期>-<时间>
# 示例:
pre-update-20260309-120000
post-config-20260309-150000
backup-daily-20260309
# 包含描述
virsh snapshot-create-as vm-name \
pre-update-20260309-120000 \
"系统更新前备份 - 包含安全补丁"
快照保留策略
推荐策略:
每日快照:
- 保留最近 7 天
- 自动删除
每周快照:
- 保留最近 4 周
- 自动删除
每月快照:
- 保留最近 12 个月
- 长期归档
事件快照:
- 重大变更前
- 永久保留 (除非确认不需要)
自动化脚本:
#!/bin/bash
# snapshot-retention.sh
VM_NAME=$1
RETENTION_DAYS=7
# 删除超过保留期的快照
CUTOFF=$(date -d "$RETENTION_DAYS days ago" +%Y%m%d-%H%M%S)
for snap in $(virsh snapshot-list $VM_NAME --name); do
SNAP_DATE=$(echo $snap | grep -oE '[0-9]{8}-[0-9]{6}')
if [[ "$SNAP_DATE" < "$CUTOFF" ]]; then
echo "Deleting old snapshot: $snap"
virsh snapshot-delete $VM_NAME $snap
fi
done
快照监控
监控脚本:
#!/bin/bash
# monitor-snapshots.sh
echo "=== Snapshot Monitor ==="
echo
for vm in $(virsh list --name); do
SNAP_COUNT=$(virsh snapshot-list $vm --name | wc -l)
if [ $SNAP_COUNT -gt 0 ]; then
echo "VM: $vm"
echo " Snapshots: $SNAP_COUNT"
# 获取最新快照
LATEST=$(virsh snapshot-list $vm --name | tail -1)
echo " Latest: $LATEST"
# 计算总占用空间
TOTAL_SIZE=0
for snap in $(virsh snapshot-list $vm --name); do
DISK=$(virsh snapshot-disk $vm $snap | grep vda | awk '{print $2}')
if [ -f "$DISK" ]; then
SIZE=$(du -sm $DISK | cut -f1)
TOTAL_SIZE=$((TOTAL_SIZE + SIZE))
fi
done
echo " Total Size: ${TOTAL_SIZE}MB"
echo
fi
done
实战案例
案例 1: 数据库更新备份
场景:
生产数据库需要更新
需要确保可以回滚
停机时间最小化
步骤:
# 1. 创建快照前检查
virsh domstate db-vm
# running
# 2. 创建带 quiesce 的快照
virsh snapshot-create-as db-vm \
pre-update-20260309 \
"数据库更新前 - MySQL 8.0 到 8.1" \
--live \
--disk-only \
--quiesce
# 3. 验证快照
virsh snapshot-list db-vm
# 确认快照创建成功
# 4. 执行更新
# ... 数据库更新操作 ...
# 5. 验证更新成功
# 如果失败,恢复快照
virsh snapshot-revert db-vm pre-update-20260309
# 6. 如果成功,删除快照 (保留 30 天)
# virsh snapshot-delete db-vm pre-update-20260309
案例 2: 开发环境快速重置
场景:
开发团队需要频繁重置环境
每天多次创建/删除快照
需要自动化
自动化脚本:
#!/bin/bash
# dev-environment-reset.sh
DEV_VMS=("dev-vm1" "dev-vm2" "dev-vm3")
SNAP_NAME="daily-snap-$(date +%Y%m%d)"
echo "Starting environment reset..."
for vm in "${DEV_VMS[@]}"; do
echo "Processing $vm..."
# 删除旧快照
for old_snap in $(virsh snapshot-list $vm --name | grep "daily-snap"); do
virsh snapshot-delete $vm $old_snap
done
# 创建新快照
virsh snapshot-create-as $vm \
$SNAP_NAME \
"Daily development snapshot" \
--live \
--disk-only
echo "$vm completed"
done
echo "Environment reset completed"
定时任务:
# 每天凌晨 2 点执行
crontab -e
0 2 * * * /usr/local/bin/dev-environment-reset.sh >> /var/log/snapshot-reset.log 2>&1
案例 3: 培训环境管理
场景:
培训中心需要管理 20 台学员 VM
每次课程前重置到初始状态
课程中允许学员自由操作
课程后自动恢复
管理脚本:
#!/bin/bash
# training-env-manager.sh
ACTION=$1
CLASS_VMS=$(seq -f "train-vm%g" 1 20)
case $ACTION in
"reset")
echo "Resetting all training VMs..."
for vm in $CLASS_VMS; do
virsh shutdown $vm
virsh snapshot-revert $vm initial-state
virsh start $vm
done
echo "Reset completed"
;;
"snapshot")
echo "Creating snapshots..."
for vm in $CLASS_VMS; do
virsh snapshot-create-as $vm \
pre-class-$(date +%Y%m%d-%H%M%S) \
"Pre-class snapshot" \
--disk-only
done
echo "Snapshots created"
;;
"cleanup")
echo "Cleaning up old snapshots..."
for vm in $CLASS_VMS; do
for snap in $(virsh snapshot-list $vm --name | grep "pre-class"); do
virsh snapshot-delete $vm $snap
done
done
echo "Cleanup completed"
;;
esac
总结
快照操作检查清单
创建前:
□ 检查磁盘格式 (QCOW2)
□ 检查存储空间
□ 检查 VM 状态
□ 通知相关人员
创建时:
□ 使用有意义的名称
□ 添加描述信息
□ 选择正确的参数 (--live, --disk-only)
□ 验证创建成功
创建后:
□ 记录快照信息
□ 设置保留策略
□ 定期监控空间使用
□ 测试恢复流程
性能优化要点
✓ 使用 QCOW2 格式
✓ 选择 --disk-only (除非需要内存快照)
✓ 配置正确的缓存模式 (none)
✓ 使用 SSD 存储
✓ 定期合并快照链
✓ 避免过长的快照链
安全建议
✓ 快照文件加密存储
✓ 限制快照访问权限
✓ 定期测试恢复流程
✓ 异地备份快照
✓ 监控快照空间使用
✓ 制定快照保留策略
本文档属于 KVM 虚拟化技术实战系列
对应视频:10-10 (03:13)
最后更新:2026 年 3 月
更多推荐
所有评论(0)