win10安装cloudinit和qemu-guest-agent

1.安装win10的系统

2.下载virtio-win版本

下载连接:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/?C=M;O=D

局部截取_20261013_160214

 

红框中的两个下载任一一个就可以,这两个实际上是一个文件

局部截取_20261013_160254

 

3.加载virtio-win-302.iso到win10虚拟机上

局部截取_20261013_135702

 直接运行virtio-win-guest-tools,按照默认操作下一步即可

局部截取_20261013_135725

 安装完毕后,会有2个服务,其中vss那个服务没有开启自启动,可以设置为开机自启动。

或者在powershell中执行如下命令,启动并设置两个服务开机自启动

Start-Service -Name 'QEMU Guest Agent VSS Provider'
Start-Service -Name 'QEMU-GA'
Set-Service -Name 'QEMU Guest Agent VSS Provider' -StartupType Automatic
Set-Service -Name 'QEMU-GA' -StartupType Automatic

  

局部截取_20261013_141035

 

局部截取_20261013_135808

 宿主机验证

局部截取_20261013_140515

 QGA 命令是 JSON 格式,宿主机下发给虚拟机内部 qemu-ga 执行

guest-ping 是 QGA 的连通性探测命令,用来测试宿主机能不能通过 virtio-serial 通道和虚拟机内的 qemu-ga 通信QEMU。

  • 指令 JSON:{"execute":"guest-ping"}
  • ✅ 成功返回:{"return":{}}
  • ❌ 报错:通道不通、QGA 没启动、virtio-serial 串口异常

注意:Windows 里 QEMU-GA 服务 Running ≠ 通道通;guest-ping 返回 {},才代表 QGA 真正可用。

 

局部截取_20261013_140620

 安装cloudinit-win即cloudbase

官方地址:https://cloudbase.it/cloudbase-init/

下载最新稳定版cloudbase-init

https://cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi

局部截取_20261013_140911

 

局部截取_20261013_141602

 

局部截取_20261013_141539

 

局部截取_20261013_141934

 勾选Run Cloudbase-Init service as LocalSystem:Cloudbase-Init 服务以本地最高权限 LocalSystem 系统账号运行,账号创建、密码注入、修改系统配置能力最强,私有 KVM/PVE 镜像推荐勾选; 不勾选:会自动新建cloudbase-init专用管理员账号运行服务,权限略低,部分系统操作(重置内置管理员密码)容易失败,多用于公有云加固场景。

如果不是必须特定账号登录的话,推荐勾选

下面一直点击下一步即可

局部截取_20261013_142154

 都不勾选,直接点击finish

局部截取_20261013_142637

 

局部截取_20261013_145036

 

 cloduinit的默认配置文件如下

 C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf

编辑这个文件进行修改,或者直接使用powershell执行下面脚本,执行完毕后查看配置文件是否修改成功

$content = @'
[DEFAULT]
# 初始化要创建/重置的Windows本地账号
username=Administrator
# 将账号加入管理员组
groups=Administrators
# 启用从元数据注入账号密码
inject_user_password=true

# NoCloud ConfigDrive 介质支持:原始硬盘、光盘、vfat格式镜像
config_drive_raw_hhd=true
config_drive_cdrom=true
config_drive_vfat=true

# 解压工具bsdtar路径,用于读取configdrive内部文件
bsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe
# mtools工具目录,用于读写vfat格式configdrive
mtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\

# 存储策略:新磁盘默认全部联机,避免新增磁盘脱机只读
san_policy=OnlineAll

# 元数据服务:仅启用ConfigDrive(nocloud光盘注入),不使用http元数据
metadata_services=cloudbaseinit.metadata.services.configdrive.ConfigDriveService

# 读取configdrive失败时重试次数、重试间隔(秒),提升稳定性
retry_count=2
retry_count_interval=5

# 插件白名单,按需求启用对应功能
# SetHostNamePlugin:设置主机名
# NetworkConfigPlugin:读取nocloud的network-config配置IP/网关/DNS
# ExtendVolumesPlugin:C盘自动扩容到磁盘最大容量
# SetUserPasswordPlugin:重置Administrator账号密码
# LocalScriptsPlugin:执行LocalScripts目录下本地脚本(弹出configdrive光盘脚本靠这个)
# UserDataPlugin:执行平台下发的user-data自定义脚本
plugins=cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin,cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin,cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin

# 详细日志输出开关
verbose=true
# 开启debug日志,调试阶段用,模板稳定后可改为false减少日志量
debug=true
# 日志存放目录
logdir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\
# 日志文件名
logfile=cloudbase-init.log
# 各模块日志级别控制
default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN

# 串口日志输出(COM1,PVE虚拟机xml需要预先配置串口设备,不需要可注释)
logging_serial_port_settings=COM1,115200,N,8

# 从DHCP获取MTU参数
mtu_use_dhcp_config=true
# 从DHCP获取NTP服务器地址
ntp_use_dhcp_config=true

# 首次登录行为:no 不弹出欢迎/服务器管理器窗口
first_logon_behaviour=no
# 关闭NetBIOS 15字符主机名长度限制,支持长主机名
netbios_host_name_compatibility=false
# 初始化过程禁止自动重启,防止实例意外反复重启
allow_reboot=false
# 关闭Windows自动激活(私有虚拟化无KMS,不需要,有内部KMS再改为true)
activate_windows=false

# 本地脚本目录,eject_configdrive.ps1放在这个目录,由LocalScriptsPlugin执行
local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
'@
$content | Out-File -Encoding ASCII -FilePath 'C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf'

  进行win系统的sysprep系统封装

管理员权限执行C:\Windows\System32\Sysprep\sysprep.exe

局部截取_20261013_152355

 

或者直接使用命令行执行(推荐,方便脚本化),管理员 PowerShell 执行:

C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown
- /oobe:下次开机进入 OOBE
- /generalize:通用化系统,清除本机唯一信息
- /shutdown:封装完成自动关机

执行 sysprep 之后,虚拟机会自动关机,不要开机!一旦开机这个模板就被破坏,需要重新 sysprep  

 

如果上面执行失败,查看C:\Windows\System32\Sysprep\Panther\setupact.log和setuperr.log文件

联网的话,系统更新占用C盘保留存储导致失败,等更新完了重启,然后重新执行即可

清理 sysprep 旧失败标记注册表

reg add "HKLM\SYSTEM\Setup\Status\SysprepStatus" /v CleanupState /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\Setup\Status\SysprepStatus" /v GeneralizationState /t REG_DWORD /d 0 /f

  

然后重新使用sysprep进行封装

局部截取_20261013_163222

 

系统精简 & 垃圾清理(更新全部部署完毕后执行)

管理员 PowerShell 逐条执行

# 1. 清理WinSxS旧组件(模板必跑)
DISM /Online /Cleanup-Image /StartComponentCleanup /ResetBase

# 2. 停止更新服务,清理下载缓存
net stop wuauserv
Remove-Item C:\Windows\SoftwareDistribution\Download\* -Recurse -Force
net start wuauserv

#3. 清理临时文件
Remove-Item $env:TEMP\* -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item C:\Windows\Temp\* -Recurse -Force -ErrorAction SilentlyContinue

  

局部截取_20261013_162212

 

posted @ 2026-10-15 17:42  mofy  阅读(20)  评论(0)    收藏  举报