👉点击这里申请火山引擎VIP帐号,立即体验火山引擎产品>>>
操作场景
前提条件
Windows Server 2012
Windows Server 2016
Windows Server 2019
第一步:宿主机环境准备
配置宿主机。
准备一台Linux系统的物理服务器作为镜像制作服务器(即宿主机)。
宿主机操作系统的发行版无硬性要求,本文以CentOS 8.3版为例。
登录宿主机。
执行如下命令,确认宿主机已开启虚拟化能力。
lscpu | grep vmx
执行如下命令,确认宿主机内核高于3.10版本。
uname -r
依次执行以下命令,安装虚拟化软件。
sudo yum install qemu-kvmsudo yum install libvirtsudo yum install virt-installsudo yum install virt-manager
加载虚拟化相关服务。
执行以下命令,开启libvirtd服务。
systemctl restart libvirtd.service
执行以下命令,检查virbr0网卡已经被创建。
ip link show virbr0
执行以下命令,加载kvm。
modprobe kvmmodprobe kvm-intel
第二步:在宿主机上创建虚拟机
上传基础镜像。
上传您所需的基础镜像文件到宿主机/home文件夹中,建议您使用官方镜像。
若您可选的镜像文件包括QCOW2、ISO两种格式,建议选择QCOW2镜像。
创建虚拟机。
基础镜像为QCOW2格式时,执行以下命令,创建虚拟机。
将--os-variant后的参数替换为虚拟机的操作系统类型。您可以执行osinfo-query命令查看可选类型。
将--disk=后的参数替换为虚拟机操作系统的存储位置,即基础镜像的路径。
将--graphics vnc,port=后的端口替换为您使用的VNC端口。
由于部分运营商判断5900为高危端口,默认被屏蔽,不建议使用该接口。
virt-install --name volc-tob-windows-2019-x64 --connect qemu:///system --os-variant windows2019 --virt-type kvm --memory 2048 --vcpus 2 --disk=/home/windows-2019-x64.qcow2 --boot=hd --network default --graphics vnc,port=6000,listen=0.0.0.0 --noautoconsole
基础镜像为ISO格式时,执行以下命令。
执行以下命令,创建一个QCOW2格式,大小为20G的镜像。
qemu-img create -f qcow2 /home/windows-2019-x64.qcow2 20G
执行以下命令,基于基础镜像创建虚拟机。
将--os-variant后的参数替换为虚拟机的操作系统类型。您可以执行osinfo-query命令查看可选类型。
将--disk=后的参数替换为虚拟机操作系统的存储位置,即新创建镜像所在路径。
将--cdrom=后的参数替换为基础镜像的路径。
将--graphics vnc,port=后的端口替换为您使用的VNC端口。
由于部分运营商判断5900为高危端口,默认被屏蔽,不建议使用该接口。
virt-install --name volc-tob-windows-2019-x64 --connect qemu:///system --os-variant windows2019 --virt-type kvm --memory 2048 --vcpus 2 --disk=/home/windows-2019-x64.qcow2,format=qcow2,bus=virtio --cdrom=/home/windows-2019-x64.iso --boot=hd --network default --graphics vnc,port=6000,listen=0.0.0.0 --noautoconsole
执行以下命令,确认虚拟机创建成功,并查看VNC地址。
请将命令中的端口号6000替换为实际端口号。
virsh list volc-tob-windows-2019-x64netstat -lntp | grep 6000
通过VNC Viewer工具,使用“vnc地址:vnc端口”远程登录虚拟机。
检查OS virtio驱动。请确认镜像支持全虚拟化,且安装了virtio-net驱动(网络)和virtio-blk 驱动(磁盘)。
网卡驱动

磁盘驱动

第三步:在虚拟机上安装Cloudbase-init
执行wget命令,下载Cloudbase-init安装程序,下载链接为:
64位:https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi
32位:https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x86.msi
打开安装包执行安装,单击“Next”按钮。
勾选“I accept the terms in the License Agreement”,单击“Next”按钮。
可根据需求选择Cloudbase-Init安装路径进行安装(可选),单击“Next”按钮。
将下图中Username修改为Administrator,Serial port for logging设置为COM1并勾选Run Cloudbase-init service as LocalSystem,单击“Next”按钮。

单击“Install”按钮,安装Cloudbase-Init。
待 Cloudbase-Init 完成安装后,单击“Finish”按钮,关闭安装页面。
修改Cloudbase-init配置文件,请修改以下内容。Cloudbase-init默认路径为:C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf。
如不在默认路径,请在上文第4步中您选择的安装路径查找。
[DEFAULT]username=Administratorgroups=Administratorsinject_user_password=trueconfig_drive_raw_hhd=trueconfig_drive_cdrom=trueconfig_drive_vfat=truemetadata_services=cloudbaseinit.metadata.services.httpservice.HttpServicemetadata_base_url=http://100.96.0.96/verbose=truedebug=truelog_dir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\log_file=cloudbase-init.logdefault_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARNlogging_serial_port_settings=mtu_use_dhcp_config=truentp_use_dhcp_config=truecheck_latest_version=truefirst_logon_behaviour=nolocal_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
如需使用Cloudbase-Init预设的密码登录云服务器实例,请在配置文件中新增如下内容。完成配置后请根据通过向导购买实例 的“自定义配置 > 登录方式 > 登录凭证”指引,开启使用镜像预设的密码登录实例功能。
plugins=cloudbaseinit.plugins.common.mtu.MTUPlugin,cloudbaseinit.plugins.windows.ntpclient.NTPClientPlugin,cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin,cloudbaseinit.plugins.windows.licensing.WindowsLicensingPlugin,cloudbaseinit.plugins.common.sshpublickeys.SetUserSSHPublicKeysPlugin,cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin,cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin,cloudbaseinit.plugins.windows.winrmlistener.ConfigWinRMListenerPlugin,cloudbaseinit.plugins.windows.winrmcertificateauth.ConfigWinRMCertificateAuthPlugin,cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin
修改网卡DHCP。
单击“开始 > 控制面板 > 网络和Internet”按钮。
根据下方示例,单击相应的连接。
单击“属性”按钮,再双击“Internet 协议版本4(TCP /IPv4)”按钮,打开属性配置窗口。
勾选 “自动获得IP地址”和“自动获得DNS服务器地址”,单击“确定”按钮,完成操作。
(可选)如需使用网卡Offload特性,请在虚拟机上安装MLNX驱动,操作详情可查看MLNX_OFED for Windows - WinOF / WinOF-2。
第四步:在虚拟机上安装Virtio驱动
单击“开始 > 控制面板”按钮。
在控制面板页面,单击“程序”按钮。
单击“程序和功能”按钮,进入程序和功能页面。
在右上角搜索框中搜索Virtio,查看虚拟机是否安装Virtio驱动。
若已安装Virtio驱动,可跳过本步骤。

若未安装Virtio驱动,请根据如下步骤指引,完成安装操作。
第五步:安装插件
第六步:获取激活脚本
请在PowerShell中执行如下命令,下载Windows激活脚本,并将其存放至密码插件安装目录。
请将<密码插件安装目录>替换为实际路径。
您也可以点此,通过浏览器下载激活脚本。
Invoke-WebRequest -Uri "https://volc-windows-active.tos-cn-beijing.volces.com/windows-active.ps1" -OutFile "<密码插件安装目录>\windws-activate.ps1"
确认脚本文件具备可执行权限。
右键单击激活脚本文件,并选择“属性”。

在“常规”页签中,确认是否存在“安全”模块。
若不存在,请跳过本步骤。

若存在,请勾选“解除锁定”后单击“应用”按钮,再单击“确定”按钮。

第七步:安装个性化软件(可选)
第八步:执行Sysprep
若您使用火山引擎提供的公共镜像制作自定义镜像,请在CMD中执行如下命令。公共镜像发布版本,可查看镜像发布记录。
reg delete "HKLM\SOFTWARE\Cloudbase Solutions"net stop wuauservC:\Windows\System32\Sysprep\sysprep.exe /shutdown /generalize /quiet /oobe /unattend:C:\Windows\sysprep-unattend.xml
执行该命令后,虚拟机将进入通用化:
删除特定于虚拟机的信息,包括但不限于安全标识符 (SID)、主机名、密码等信息,应用程序以及相关数据仍会保留。
卸载(但不删除)特定于虚拟机的驱动程序。
允许将应答文件 (unattend) 设置添加到现有安装。
完成通用化后,虚拟机将自动关机。
若您使用非火山引擎提供的公共镜像制作自定义镜像,请在CMD中执行如下命令。
%WINDIR%\system32\sysprep\sysprep.exe /generalize /shutdown /oobe
执行该命令后,虚拟机将进入通用化:
删除特定于虚拟机的信息,包括但不限于安全标识符 (SID)、主机名、密码等信息,应用程序以及相关数据仍会保留。
卸载(但不删除)特定于虚拟机的驱动程序。
将虚拟机设置为在开箱即用体验(OOBE) 模式下启动。
允许将应答文件 (unattend) 设置添加到现有安装。
由于Cloudbase-init会在OOBE完成后执行,因此其配置文件中的登录密码将覆盖您在OOBE流程中创建的密码。使用该镜像创建云服务器实例后,请使用创建实例时设置的登录密码,而非OOBE流程创建的密码。
第九步:导出镜像
执行以下命令,关闭虚拟机并获得镜像文件。
virsh shutdown volc-tob-windows-2019-x64
执行以下命令,查看镜像文件。
virt-install --disk