virt-sysprep 是什么
virt-sysprep 属于 libguestfs 工具集,离线清理镜像里的主机特定信息:machine-id、SSH 主机密钥、日志与历史记录、网络配置等,让镜像可以直接作为模板批量分发。操作对象既可以是域(-d),也可以是磁盘文件(-a),前提是镜像没有被运行中的虚机占用。
基本信息
| 用法 | virt-sysprep -d vm1(域)或 -a disk.qcow2(文件) |
|---|---|
| 查看步骤 | virt-sysprep --list-operations |
| 选择步骤 | --operations machine-id,ssh-hostkeys,logfiles |
| 前提条件 | 目标域已关机,磁盘未被占用 |
| 默认行为 | 不指定 --operations 时执行默认清理集合 |
| 配套工具 | virt-customize 负责注入,virt-sysprep 负责清理 |
典型使用场景
- 制作可批量分发的 Linux 模板
- 清理旧主机名与 SSH 主机密钥,避免克隆后互相冲突
- 对外交付镜像前移除日志与临时文件
- 把手工配置过的镜像还原成可重复使用的基线
- 与 virt-customize 配合:先清理旧身份,再注入新配置
查看并执行标准清理
查看并执行标准清理
virt-sysprep --list-operations | head -20 # 看有哪些清理步骤
sudo virt-sysprep -a /data/images/base.qcow2 # 对镜像文件执行默认清理
sudo virt-sysprep -d vm-template --operations machine-id,ssh-hostkeys,logfiles
sudo virt-sysprep -a base.qcow2 --operations net-hostname,net-hwaddr # 清理网络标识
# 之后用 virt-customize 注入新主机名与公钥,完成模板制作流程常用清理项
| 操作 | 清理内容 | 注意 |
|---|---|---|
| machine-id | 系统唯一标识 | 克隆后必须重置,否则服务标识冲突 |
| ssh-hostkeys | SSH 主机密钥 | 重置后客户端首次连接会提示指纹变化 |
| logfiles | 日志与历史记录 | 交付前清理,减少信息泄露 |
| net-hostname / net-hwaddr | 网络相关标识 | 避免克隆后网络配置冲突 |
不要对需要保留既有标识的镜像执行清理:machine-id 与主机密钥被重置后,依赖这些标识的注册、授权与集群成员关系会一并失效,恢复起来很麻烦。
清理与定制建议分成两步:先 sysprep 清掉旧身份,再用 customize 注入新主机名、公钥与代理配置。顺序反了,注入的内容会被清理步骤一起带走。