TT Lab
开始
学习 学习路径 课程

虚拟化与 QEMU/KVM

快照的两种方式

在 TT Lab 中继续学习

目标

分别创建 qcow2 的内部快照和外部快照,并通过实际的文件结构确认两种方式的差别。

为什么重要

内部快照只用一个文件管理,很方便,但不易备份——因为原始镜像一直在变化。外部快照会创建一个以当前镜像为后备文件的新覆盖层,让原始镜像冻结在那个时间点。所以备份工具可以安全地复制原始镜像,这也是实际备份工作流的标准做法。回滚也只需丢弃覆盖层即可,很简单。代价是文件会增多,需要管理链。

注意:VM 运行期间不能用 qemu-img 触碰镜像。 本实验只在停止状态下进行。

步骤

  1. 创建 /root/snap 目录,并把 /root/snap/disk.qcow2 创建为 1G 的 qcow2。
  2. 创建名为 before-upgrade 的内部快照。
  3. 把快照列表保存到 /root/snap/list1.txt。必须能看到 before-upgrade。
  4. 再创建 after-patch 和 rollback-point 两个,并把列表保存到 /root/snap/list3.txt。快照必须恰好是 3 个。
  5. 应用(回滚到)before-upgrade 快照,并把该命令的退出码以 rc=0 的格式写入 /root/snap/applied.txt。
  6. 删除 after-patch 快照,并把剩余列表保存到 /root/snap/list2.txt。快照必须恰好是 2 个。
  7. 创建外部快照。创建以 disk.qcow2 为后备文件的 /root/snap/disk.ext1.qcow2,并把后备链输出保存到 /root/snap/chain.txt。
  8. 把 /root/snap/compare.txt 写成以下 4 行。 INTERNAL_COUNT=<6번 이후 남은 내부 스냅샷 개수> / EXTERNAL_FILES=2 / BACKUP_FRIENDLY=external / ROLLBACK_INTERNAL=-a(占位符为第 6 步之后剩余的内部快照个数)

参考

准备实验镜像

创建 /root/snap 目录,并把 /root/snap/disk.qcow2 创建为 1G 的 qcow2。

使用与前一个实验无关的新镜像。大小小一点也可以。

创建内部快照

创建名为 before-upgrade 的内部快照。

qemu-img snapshot 的 -c 是创建。把名称作为参数给出。

快照列表

把快照列表保存到 /root/snap/list1.txt。必须能看到 before-upgrade。

-l 会以表格显示 ID、TAG、大小和时间。有表头行,计数时要注意。

创建多个时间点

再创建 after-patch 和 rollback-point 两个,并把列表保存到 /root/snap/list3.txt。快照必须恰好是 3 个。

只换名称,重复同一条命令即可。列表中必须能看到三个。

回滚快照

应用(回滚到)before-upgrade 快照,并把该命令的退出码以 rc=0 的格式写入 /root/snap/applied.txt。

-a 会把镜像内容回滚到指定快照的时间点。列表本身会保留。

删除快照

删除 after-patch 快照,并把剩余列表保存到 /root/snap/list2.txt。快照必须恰好是 2 个。

用 -d 删除一个,它就会从列表中消失。请确认剩余个数。

创建外部快照

创建外部快照。创建以 disk.qcow2 为后备文件的 /root/snap/disk.ext1.qcow2,并把后备链输出保存到 /root/snap/chain.txt。

创建一个以当前镜像为后备文件的新覆盖层,就是外部快照。

两种方式的对比表

把 /root/snap/compare.txt 写成以下 4 行。 INTERNAL_COUNT=<6번 이후 남은 내부 스냅샷 개수> / EXTERNAL_FILES=2 / BACKUP_FRIENDLY=external / ROLLBACK_INTERNAL=-a(占位符为第 6 步之后剩余的内部快照个数)

这些值必须是在前面步骤中实际确认过的。备份友好度要看原始镜像是否被固定。