You need to enable JavaScript to run this app.
导航
制作Windows镜像
最近更新时间:2024.11.01 14:36:20首次发布时间:2021.07.09 13:31:10

操作场景

如果您拥有已经预装所需应用的镜像,您可以参考本文使用virt-install制作QCOW2镜像并导入您的私有镜像到火山引擎平台。

此方式具有更高的定制化性,适用于需要复杂初始化系统镜像的场景,导入平台后,您可以使用该镜像重新部署复杂初始化系统或多次部署同样配置的云服务器。

前提条件

下文制作方法支持的基础镜像操作系统及相关版本如下,支持32位/64位。

  • Windows Server 2012
  • Windows Server 2016
  • Windows Server 2019

第一步:宿主机环境准备

  1. 配置宿主机。

    1. 准备一台Linux系统的物理服务器作为镜像制作服务器(即宿主机)。

      宿主机操作系统的发行版无硬性要求,本文以CentOS 8.3版为例。

    2. 登录宿主机。

    3. 确认宿主机已开启虚拟化能力,请执行以下命令验证。
      lscpu | grep vmx

    4. 确认宿主机内核高于3.10版本,请执行以下命令验证。
      uname -r

  2. 依次执行以下命令,安装虚拟化软件。

    sudo yum install qemu-kvm 
    sudo yum install libvirt
    sudo yum install virt-install
    sudo yum install virt-manager
    
  3. 加载虚拟化相关服务。

    1. 执行以下命令,开启 libvirtd 服务。
      systemctl restart libvirtd.service

    2. 执行以下命令,检查 virbr0 网卡已经被创建。
      ip link show virbr0

    3. 执行以下命令,加载 kvm。

      modprobe kvm
      modprobe kvm-intel
      

第二步:在宿主机上创建虚拟机

  1. 上传基础镜像。

    • 上传您所需的基础镜像文件到宿主机/home文件夹中,建议您使用官方镜像。

    • 若您可选的镜像文件包括QCOW2、ISO两种格式,建议选择QCOW2镜像。

  2. 创建虚拟机。

    假设已上传的基础镜像文件名称为: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格式时,执行以下命令。

      1. 执行以下命令,创建一个QCOW2格式,大小为20G的镜像。
        qemu-img create -f qcow2 /home/windows-2019-x64.qcow2 20G

      2. 执行以下命令,基于基础镜像创建虚拟机。

        • --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
        
  3. 执行以下命令,确认虚拟机创建成功,并查看VNC地址。

    请将命令中的端口号6000替换为实际端口号。

    virsh list volc-tob-windows-2019-x64
    netstat -lntp | grep 6000
    
  4. 通过VNC Viewer工具,使用“vnc地址:vnc端口”远程登录虚拟机。

  5. 检查OS virtio驱动。请确认镜像支持全虚拟化,且安装了virtio-net驱动(网络)和virtio-blk 驱动(磁盘)。

    打开CMD命令提示符工具,执行命令driverquery,在列表中查找网卡驱动(netkvm)和磁盘驱动(viostor),不同版本的驱动时间可能存在差异。

    • 网卡驱动
      image

    • 磁盘驱动
      image

第三步:在虚拟机上安装Cloudbase-init

  1. 执行wget命令,下载Cloudbase-init安装程序,下载链接为:

  2. 打开安装包执行安装,单击“Next”按钮。

  3. 勾选“I accept the terms in the License Agreement”,单击“Next”按钮。

  4. 可根据需求选择Cloudbase-Init安装路径进行安装(可选),单击“Next”按钮。

  5. 将下图中 Username 修改为Administrators,Serial port for logging设置为COM1并勾选Run Cloudbase-init service as LocalSystem,单击“Next”按钮。

  6. 单击“Install”按钮,安装Cloudbase-Init。

  7. 待 Cloudbase-Init 完成安装后,单击“Finish”按钮,关闭安装页面。

    注意

    关闭Cloudbase-Init安装界面时,请勿勾选任何复选框,不要运行Sysprep。

  8. 修改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
      
  9. 修改网卡DHCP。

    1. 单击“开始 > 控制面板 > 网络和Internet”按钮。

    2. 根据下方示例,单击相应的连接。
      image.png

    3. 单击“属性”按钮,再双击“Internet 协议版本4(TCP /IPv4)”按钮,打开属性配置窗口。
      image.png

    4. 勾选 “自动获得IP地址”和“自动获得DNS服务器地址”,单击“确定”按钮,完成操作。
      image.png

  10. (可选)安装MLNX驱动。
    如需使用网卡Offload特性,请在虚拟机上安装MLNX驱动,操作详情可查看MLNX_OFED for Windows - WinOF / WinOF-2

第四步:执行Sysprep

您需要使用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
    
    

    注意

    执行该命令后,虚拟机将进入通用化:

    1. 删除特定于虚拟机的信息,包括但不限于安全标识符 (SID)、主机名、密码等信息,应用程序以及相关数据仍会保留
    2. 卸载(但不删除)特定于虚拟机的驱动程序。
    3. 允许将应答文件 (unattend) 设置添加到现有安装。

    完成通用化后,虚拟机将自动关机。

  • 若您使用非火山引擎提供的公共镜像制作自定义镜像,请在cmd中执行如下命令。

    %WINDIR%\system32\sysprep\sysprep.exe /generalize /shutdown /oobe
    

    注意

    • 执行该命令后,虚拟机将进入通用化:
      1. 删除特定于虚拟机的信息,包括但不限于安全标识符 (SID)、主机名、密码等信息,应用程序以及相关数据仍会保留。
      2. 卸载(但不删除)特定于虚拟机的驱动程序。
      3. 将虚拟机设置为在开箱即用体验(OOBE) 模式下启动。
      4. 允许将应答文件 (unattend) 设置添加到现有安装。

      完成通用化后,虚拟机将自动关机。

    • 由于Cloudbase-init会在OOBE完成后执行,因此其配置文件中的登录密码将覆盖您在OOBE流程中创建的密码。使用该镜像创建云服务器实例后,请使用创建实例时设置的登录密码,而非OOBE流程创建的密码。

第五步:在虚拟机上安装Virtio驱动

  1. 单击“开始 > 控制面板”按钮。
  2. 在控制面板页面,单击“程序”按钮。
  3. 单击“程序和功能”按钮,进入程序和功能页面。
  4. 在右上角搜索框中搜索Virtio,查看虚拟机是否安装Virtio驱动。
    • 若已安装Virtio驱动,可跳过本步骤。

    • 若未安装Virtio驱动,请根据如下步骤指引,完成安装操作。

      1. 在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'
        

        说明

        您也可以通过浏览器,点此下载驱动安装程序。

      2. 在PowerShell中执行如下命令,开启驱动安装流程。
      3. msiexec /i <安装程序所在文件夹>\virtio-win-gt-x64.msi
        

        说明

        若您通过浏览器下载驱动安装程序,也可双击下载的.msi文件,开启驱动安装流程。

      4. 单击“Next”按钮,继续安装流程。
      5. 勾选“I accept the terms in the License Agreement”后,单击“Next”按钮。
      6. 确认需要安装的功能后,单击“Next”按钮。
      7. 单击“Install”按钮,确认安装选项,开始安装Virtio驱动。
      8. 单击“Finish”按钮,完成Virtio驱动安装。

第六步:安装插件

为实现用于重置、绑定/解绑密码功能,您制作的自定义镜像必须安装密码插件,否则可能导致镜像无法正常使用。安装操作可查看安装密码插件

您还可以为自定义镜像安装云监控插件,从实例内部进行监控,以获取更深层、更准确的实例运行情况。安装操作可查看安装插件

第七步:获取激活脚本

  1. 请在PowerShell中执行如下命令,下载Windows激活脚本,并将其存放至密码插件安装目录。

    说明

    • 请将<密码插件安装目录>替换为实际路径。
    • 您也可以点此,通过浏览器下载激活脚本。
    Invoke-WebRequest -Uri "https://volc-windows-active.tos-cn-beijing.volces.com/windows-active.ps1" -OutFile "<密码插件安装目录>\windws-activate.ps1"
    
  2. 确认脚本文件具备可执行权限。
    1. 右键单击激活脚本文件,并选择“属性”。
    2. 在“常规”页签中,确认是否存在“安全”模块。
      • 若不存在,请跳过本步骤。
      • 若存在,请勾选“解除锁定”后单击“应用”按钮,再单击“确定”按钮。

第八步:安装个性化软件(可选)

您可以按照业务的需求,自行将个性化软件安装在系统盘中,例如JDK、Linux图形化桌面。

第九步:导出镜像

  1. 执行以下命令,关闭虚拟机并获得镜像文件。
    virsh shutdown volc-tob-windows-2019-x64

  2. 执行以下命令,查看镜像文件。
    virt-install --disk

第十步:镜像格式转换

目前仅支持上传QCOW2、RAW、VHD、VMDK格式的镜像,如果镜像不满足以下两种格式,则需要执行以下命令将镜像格式进行转换。了解更多

后续操作

您可以将创建的镜像文件上传至火山引擎作为自定义镜像,上传成功后,即可使用该镜像创建实例,操作详情可查看导入自定义镜像