首页/云/云平台与虚拟化速查/virt-customize 离线定制镜像
虚拟化操作94 条

virt-customize 离线定制镜像

virt-customize 无需启动虚机即可修改镜像内容:设置主机名、安装软件包、注入脚本与文件;适合批量制作基线镜像与迁移前预装 virtio 驱动。

云平台与虚拟化速查云更新于 2026-10-13

virt-customize 是什么

virt-customize 属于 libguestfs 工具集,不启动虚机即可修改镜像内容:设置主机名与密码、安装软件包、执行命令、上传文件。它适合批量制作基线镜像,也常用于迁移前给镜像预装 virtio 驱动,避免换平台后找不到磁盘。

基本信息

主机名与密码--hostname web01 --root-password password:xxx
安装软件--install nginx(Debian / RHEL 系均支持)
执行命令--run-command 'systemctl enable nginx'
上传文件--upload 本地路径:镜像内路径
前置条件宿主已安装 libguestfs 与对应工具,镜像未被运行中的虚机占用
批量做法脚本里循环对多份镜像执行同一组参数

典型使用场景

  • 制作公司基线镜像:时区、软件源、监控 agent 一次写进去
  • 迁移前预装 virtio 驱动与 cloud-init,避免换平台后起不来
  • 清理镜像里遗留的旧主机名、SSH 主机密钥与日志
  • 批量写入合规要求的审计与代理配置
  • 交付镜像前统一移除临时文件与测试账号

定制一台应用基线镜像

定制一台应用基线镜像
virt-inspector /data/images/base.qcow2 | head -20    # 先看清镜像里的系统与版本
sudo virt-customize -a /data/images/base.qcow2 \
  --hostname web01 --root-password password:'ChangeMe_2026' \
  --install nginx --run-command 'systemctl enable nginx' \
  --upload /etc/app/app.conf:/etc/app/app.conf
sudo virt-customize -a base.qcow2 --run-command 'cloud-init clean --logs'  # 清理 cloud-init 状态
sudo virt-customize -a base.qcow2 --firstboot-command 'hostnamectl reset'   # 首次开机再执行的动作

常用参数

参数作用注意点
--hostname设置镜像内主机名与 cloud-init 的 hostname 可能互相覆盖
--install安装软件包离线镜像没有可用仓库时会失败
--run-command在镜像内执行命令命令返回非零会中断整个定制过程
--upload上传文件到镜像目标目录必须已存在
--root-password设置 root 密码明文出现在命令行历史里
不要对正在运行的域所使用的磁盘做定制:文件系统层会互相写冲突,镜像可能直接损坏。必须先关机,或改为对一份只读副本操作。
定制会改变镜像内容:完成后应重新生成校验值并更新镜像清单,否则分发时无法验证完整性,也说不清哪一版被部署到了哪里。定制前最好留一份未改动的原始镜像作为母本。

易错点

  • 命令里的明文密码进入 shell 历史:交付后用密钥替换并轮换密码
  • 对正在运行的域磁盘做定制:文件系统写冲突,镜像损坏
  • 在镜像内 install 依赖在线仓库,离线环境下定制中途失败留下半成品
  • 忽略 cloud-init 状态残留,克隆出的虚机仍带着旧实例信息
  • 直接覆盖原始镜像不留母本,定制参数写错后无法回退重做

数据来源与参考

  • virt-customize 手册(libguestfs)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌