如果您拥有已经预装所需应用的镜像,您可以参考本文使用virt-install制作QCOW2镜像并导入您的私有镜像到火山引擎平台。
此方式具有更高的定制化性,适用于需要复杂初始化系统镜像的场景,导入平台后,您可以使用该镜像重新部署复杂初始化系统或多次部署同样配置的云服务器。
下文制作方法支持的基础镜像操作系统及相关版本如下,支持32位/64位。
配置宿主机。
准备一台Linux系统的物理服务器作为镜像制作服务器(即宿主机)。
宿主机操作系统的发行版无硬性要求,本文以CentOS 8.3版为例。
登录宿主机。
确认宿主机已开启虚拟化能力,请执行以下命令验证。lscpu | grep vmx
确认宿主机内核高于3.10版本,请执行以下命令验证。uname -r
依次执行以下命令,安装虚拟化软件。
sudo yum install qemu-kvm sudo yum install libvirt sudo yum install virt-install sudo yum install virt-manager
加载虚拟化相关服务。
执行以下命令,开启 libvirtd 服务。systemctl restart libvirtd.service
执行以下命令,检查 virbr0 网卡已经被创建。ip link show virbr0
执行以下命令,加载 kvm。
modprobe kvm modprobe kvm-intel
上传基础镜像。
上传您所需的基础镜像文件到宿主机/home
文件夹中,建议您使用官方镜像。
若您可选的镜像文件包括QCOW2、ISO两种格式,建议选择QCOW2镜像。
创建虚拟机。
假设已上传的基础镜像文件名称为:windows-2019-x64.qcow2、windows-2019-x64.iso。
基础镜像为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-x64 netstat -lntp | grep 6000
通过VNC Viewer工具,使用“vnc地址:vnc端口”远程登录虚拟机。
检查OS virtio驱动。请确认镜像支持全虚拟化,且安装了virtio-net驱动(网络)和virtio-blk 驱动(磁盘)。
打开CMD命令提示符工具,执行命令driverquery
,在列表中查找网卡驱动(netkvm)和磁盘驱动(viostor),不同版本的驱动时间可能存在差异。
网卡驱动
磁盘驱动
执行wget
命令,下载Cloudbase-init安装程序,下载链接为:
打开安装包执行安装,单击“Next”按钮。
勾选“I accept the terms in the License Agreement”,单击“Next”按钮。
可根据需求选择Cloudbase-Init安装路径进行安装(可选),单击“Next”按钮。
将下图中 Username 修改为Administrators,Serial port for logging设置为COM1
并勾选Run Cloudbase-init service as LocalSystem
,单击“Next”按钮。
单击“Install”按钮,安装Cloudbase-Init。
待 Cloudbase-Init 完成安装后,单击“Finish”按钮,关闭安装页面。
注意
关闭Cloudbase-Init安装界面时,请勿勾选任何复选框,不要运行Sysprep。
修改Cloudbase-init配置文件,请修改以下内容。Cloudbase-init默认路径为:C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf。
如不在默认路径,请在上文第4步中您选择的安装路径查找。
[DEFAULT] username=Administrator groups=Administrators inject_user_password=true config_drive_raw_hhd=true config_drive_cdrom=true config_drive_vfat=true metadata_services=cloudbaseinit.metadata.services.httpservice.HttpService metadata_base_url=http://100.96.0.96/ verbose=true debug=true log_dir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\ log_file=cloudbase-init.log default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN logging_serial_port_settings= mtu_use_dhcp_config=true ntp_use_dhcp_config=true check_latest_version=true first_logon_behaviour=no local_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服务器地址”,单击“确定”按钮,完成操作。
(可选)安装MLNX驱动。
如需使用网卡Offload特性,请在虚拟机上安装MLNX驱动,操作详情可查看MLNX_OFED for Windows - WinOF / WinOF-2。
您需要使用Sysprep删除镜像中的特定信息,以便镜像可以在不同设备中使用。更多详情可查看Sysprep(系统准备)概述。
若您使用火山引擎提供的公共镜像制作自定义镜像,请在cmd中执行如下命令。公共镜像发布版本,可查看镜像发布记录。
reg delete "HKLM\SOFTWARE\Cloudbase Solutions" C:\Windows\System32\Sysprep\sysprep.exe /shutdown /generalize /quiet /oobe /unattend:C:\Windows\sysprep-unattend.xml
注意
执行该命令后,虚拟机将进入通用化:
完成通用化后,虚拟机将自动关机。
若您使用非火山引擎提供的公共镜像制作自定义镜像,请在cmd中执行如下命令。
%WINDIR%\system32\sysprep\sysprep.exe /generalize /shutdown /oobe
注意
执行该命令后,虚拟机将进入通用化:
1. 删除特定于虚拟机的信息,包括但不限于安全标识符 (SID)、主机名、密码等信息,应用程序以及相关数据仍会保留。
2. 卸载(但不删除)特定于虚拟机的驱动程序。
3. 将虚拟机设置为在开箱即用体验(OOBE) 模式下启动。
4. 允许将应答文件 (unattend) 设置添加到现有安装。
完成通用化后,虚拟机将自动关机。
由于Cloudbase-init会在OOBE完成后执行,因此其配置文件中的登录密码将覆盖您在OOBE流程中创建的密码。使用该镜像创建云服务器实例后,请使用创建实例时设置的登录密码,而非OOBE流程创建的密码。
Virtio
,查看虚拟机是否安装Virtio驱动。
若已安装Virtio驱动,可跳过本步骤。
若未安装Virtio驱动,请根据如下步骤指引,完成安装操作。
在PowerShell中执行如下命令,下载Virtio驱动安装程序。
Invoke-WebRequest -Uri 'https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.240-1/virtio-win-gt-x64.msi' -OutFile 'virtio-win-gt-x64.msi'
说明
您也可以通过浏览器,点此下载驱动安装程序。
msiexec /i <安装程序所在文件夹>\virtio-win-gt-x64.msi
说明
若您通过浏览器下载驱动安装程序,也可双击下载的.msi
文件,开启驱动安装流程。
为实现用于重置、绑定/解绑密码功能,您制作的自定义镜像必须安装密码插件,否则可能导致镜像无法正常使用。安装操作可查看安装密码插件。
您还可以为自定义镜像安装云监控插件,从实例内部进行监控,以获取更深层、更准确的实例运行情况。安装操作可查看安装插件。
说明
<密码插件安装目录>
替换为实际路径。Invoke-WebRequest -Uri "https://volc-windows-active.tos-cn-beijing.volces.com/windows-active.ps1" -OutFile "<密码插件安装目录>\windws-activate.ps1"
您可以按照业务的需求,自行将个性化软件安装在系统盘中,例如JDK、Linux图形化桌面。
执行以下命令,关闭虚拟机并获得镜像文件。virsh shutdown volc-tob-windows-2019-x64
执行以下命令,查看镜像文件。virt-install --disk
目前仅支持上传QCOW2、RAW、VHD、VMDK格式的镜像,如果镜像不满足以下两种格式,则需要执行以下命令将镜像格式进行转换。了解更多。
您可以将创建的镜像文件上传至火山引擎作为自定义镜像,上传成功后,即可使用该镜像创建实例,操作详情可查看导入自定义镜像。