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

虚拟化与 QEMU/KVM

操作 qcow2 镜像

在 TT Lab 中继续学习

目标

创建 qcow2 镜像、读取信息、转换格式,并建立后备链(backing chain),亲手复现黄金镜像模式。

为什么重要

qcow2 真正的威力在于后备文件。读取来自后备文件,写入只进入覆盖层,所以一个黄金镜像就能派生出几十台 VM。这里有两条规则。后备文件绝对不能修改(覆盖层会悄悄损坏),并且后备路径是记录在镜像内部的,所以移动文件后必须用 rebase 修正引用。另外,如果分不清 qemu-img info 中的 virtual size 和 disk size,就会漏掉精简配置的超分(overcommit)。

步骤

  1. 创建 /root/vm 目录,并把 /root/vm/base.qcow2 创建为 2G 大小的 qcow2。
  2. 把该镜像的虚拟大小(字节)和实际占用(字节)各写一行(虚拟大小在前)到 /root/vm/size.txt。实际占用必须远小于虚拟大小。
  3. 把 /root/vm/plain.raw 创建为 raw 格式的 2G,并把 qcow2 和 raw 的实际占用按 qcow2=<바이트> / raw=<바이트> 两行写入 /root/vm/formats.txt(占位符均为字节数)。
  4. 把 plain.raw 转换为 qcow2,生成 /root/vm/converted.qcow2。qemu-img info 中格式必须显示为 qcow2。
  5. 创建以 base.qcow2 为后备文件的覆盖层 /root/vm/vm01.qcow2。必须明确指定后备文件格式。
  6. 创建指定了 1M cluster_size 的 4G /root/vm/big.qcow2,并把 qemu-img info 输出中能看到 cluster_size 的那一行保存到 /root/vm/cluster.txt。
  7. 把 base.qcow2 移动到 /root/vm/golden/base.qcow2,并把 vm01.qcow2 的后备引用改成新路径。改完后 qemu-img info --backing-chain /root/vm/vm01.qcow2 必须无错误地显示两个镜像,并把该输出保存到 /root/vm/chain.txt。
  8. 创建 /root/vm/inventory.csv。第一行是 file,format,virtual_size,backing 表头,并为 vm01.qcow2、converted.qcow2、big.qcow2 三个镜像各写一行。backing 是后备文件路径或 none。

参考

创建 qcow2 镜像

创建 /root/vm 目录,并把 /root/vm/base.qcow2 创建为 2G 大小的 qcow2。

qemu-img create 接收格式、文件名和大小。大小单位使用 G 这样的后缀。

虚拟大小与实际大小

把该镜像的虚拟大小(字节)和实际占用(字节)各写一行(虚拟大小在前)到 /root/vm/size.txt。实际占用必须远小于虚拟大小。

使用 JSON 输出便于解析。找出 virtual-size 和 actual-size 两个值。

与 raw 比较

把 /root/vm/plain.raw 创建为 raw 格式的 2G,并把 qcow2 和 raw 的实际占用按 qcow2=<바이트> / raw=<바이트> 两行写入 /root/vm/formats.txt(占位符均为字节数)。

raw 也会创建为稀疏文件,但没有元数据。比较一下两种格式的实际占用。

格式转换

把 plain.raw 转换为 qcow2,生成 /root/vm/converted.qcow2。qemu-img info 中格式必须显示为 qcow2。

convert 用 -f 指定输入格式,用 -O 指定输出格式。也有压缩选项。

用后备文件创建覆盖层

创建以 base.qcow2 为后备文件的覆盖层 /root/vm/vm01.qcow2。必须明确指定后备文件格式。

用 -b 指定后备文件,用 -F 指定它的格式。漏掉 -F 会出现警告或错误。

指定 cluster_size

创建指定了 1M cluster_size 的 4G /root/vm/big.qcow2,并把 qemu-img info 输出中能看到 cluster_size 的那一行保存到 /root/vm/cluster.txt。

用 -o 传入各格式特有的选项。可以在 info 输出的 Format specific information 中确认。

修改后备路径

把 base.qcow2 移动到 /root/vm/golden/base.qcow2,并把 vm01.qcow2 的后备引用改成新路径。改完后 qemu-img info --backing-chain /root/vm/vm01.qcow2 必须无错误地显示两个镜像,并把该输出保存到 /root/vm/chain.txt。

rebase 的 -u 不会移动数据,只修正引用。请先移动文件,再对上引用。

镜像清单

创建 /root/vm/inventory.csv。第一行是 file,format,virtual_size,backing 表头,并为 vm01.qcow2、converted.qcow2、big.qcow2 三个镜像各写一行。backing 是后备文件路径或 none。

汇总每个镜像的格式和虚拟大小。必须区分有后备文件的和没有的。