云镜像导入在做什么
基于 KVM/QEMU 的信创云平台与超融合通常以 qcow2 镜像作为虚拟机模板:镜像格式与虚拟大小要对得上磁盘规划,导入后由 cloud-init 完成主机名、网络、密钥、初始口令的首次规格化。导入失败或开机后网络不通,多半就出在这两步上。
基本信息
| 镜像格式 | qcow2(主流);raw/vmdk 需用 qemu-img convert 转换 |
|---|---|
| 检查工具 | qemu-img info(元信息)、qemu-img check(一致性) |
| 规格化 | cloud-init:user-data 注入主机名、密钥;meta-data 提供实例信息 |
| 辅助工具 | libguestfs:virt-customize 改镜像、virt-sysprep 清理镜像 |
| 权限要求 | root 或 libvirt/qemu 组 |
典型使用场景
- 把发行版官方云镜像(麒麟、UOS 云版 qcow2)导入平台做模板
- 把存量业务系统转成 qcow2 后导入云平台
- 批量创建实例前统一规格化:清 machine-id、SSH 主机密钥、旧网卡配置
- 导入前核对虚拟大小与存储规划,避免实例一上线就写满
- 排查导入后实例起不来、网络不通、cloud-init 不执行的问题
检查与规格化
检查与规格化
qemu-img info kylin-v10-cloud.qcow2 # 看格式、虚拟大小、是否带 backing file
qemu-img check kylin-v10-cloud.qcow2 # 镜像内部一致性检查
qemu-img convert -p -f qcow2 -O qcow2 src.qcow2 dst.qcow2 # 转换格式(-c 可压缩)
virt-sysprep -a img.qcow2 # 清理 machine-id、主机密钥、日志(需 libguestfs)
virt-customize -a img.qcow2 --root-password password:临时口令
virt-customize -a img.qcow2 --install cloud-init # 镜像缺 cloud-init 时补装
qemu-img resize img.qcow2 +20G # 调整虚拟大小,导入前核对磁盘规划
ls -lh img.qcow2 # 实际占用远小于虚拟大小属正常qemu-img info 逐项读法
| 字段 | 含义 | 关注点 |
|---|---|---|
| file format | 镜像实际格式 | 与平台要求不符要 convert,改扩展名没用 |
| virtual size | 虚拟大小 | 决定系统内看到的磁盘容量 |
| disk size | 实际占用 | 与虚拟大小差距大是 qcow2 稀疏特性,正常 |
| backing file | 后端镜像 | 有后端就要一并导入或先合并,否则实例起不来 |
云镜像里通常已装 cloud-init:创建实例时通过平台或 user-data 注入主机名与 SSH 公钥即可,比手工改镜像更安全,也更容易复现和回收。
不要把运行中物理机的磁盘直接复制成镜像导入:会带入原机的 machine-id、SSH 主机密钥、网卡与静态 IP 配置,克隆出的实例会互相冲突(同 IP、同密钥指纹)。