操作 qcow2 镜像
目标
创建 qcow2 镜像、读取信息、转换格式,并建立后备链(backing chain),亲手复现黄金镜像模式。
为什么重要
qcow2 真正的威力在于后备文件。读取来自后备文件,写入只进入覆盖层,所以一个黄金镜像就能派生出几十台 VM。这里有两条规则。后备文件绝对不能修改(覆盖层会悄悄损坏),并且后备路径是记录在镜像内部的,所以移动文件后必须用 rebase 修正引用。另外,如果分不清 qemu-img info 中的 virtual size 和 disk size,就会漏掉精简配置的超分(overcommit)。
步骤
- 创建
/root/vm目录,并把/root/vm/base.qcow2创建为 2G 大小的 qcow2。 - 把该镜像的虚拟大小(字节)和实际占用(字节)各写一行(虚拟大小在前)到
/root/vm/size.txt。实际占用必须远小于虚拟大小。 - 把
/root/vm/plain.raw创建为 raw 格式的 2G,并把qcow2和raw的实际占用按qcow2=<바이트>/raw=<바이트>两行写入/root/vm/formats.txt(占位符均为字节数)。 - 把
plain.raw转换为 qcow2,生成/root/vm/converted.qcow2。qemu-img info中格式必须显示为qcow2。 - 创建以
base.qcow2为后备文件的覆盖层/root/vm/vm01.qcow2。必须明确指定后备文件格式。 - 创建指定了 1M
cluster_size的 4G/root/vm/big.qcow2,并把qemu-img info输出中能看到 cluster_size 的那一行保存到/root/vm/cluster.txt。 - 把
base.qcow2移动到/root/vm/golden/base.qcow2,并把vm01.qcow2的后备引用改成新路径。改完后qemu-img info --backing-chain /root/vm/vm01.qcow2必须无错误地显示两个镜像,并把该输出保存到/root/vm/chain.txt。 - 创建
/root/vm/inventory.csv。第一行是file,format,virtual_size,backing表头,并为vm01.qcow2、converted.qcow2、big.qcow2三个镜像各写一行。backing是后备文件路径或none。
参考
- 依次使用
qemu-img create -f qcow2 <파일> 2G、qemu-img info --output=json <파일>、qemu-img convert -f raw -O qcow2 <입력> <출력>(占位符依次为文件、输入文件、输出文件)。 - 覆盖层用
qemu-img create -f qcow2 -b <백킹> -F qcow2 <오버레이>(占位符依次为后备文件、覆盖层)。 - 修改后备路径用
qemu-img rebase -u -F qcow2 -b <새경로> <오버레이>(占位符依次为新路径、覆盖层)。 - 常见错误 1:在第 5 步漏掉
-F。较新的 qemu-img 会给出警告或直接拒绝。 - 常见错误 2:在第 7 步只移动文件而不做 rebase,就会出现
Could not open backing file。
创建 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。
汇总每个镜像的格式和虚拟大小。必须区分有后备文件的和没有的。