IBM Cloud Docs
创建自定义 Windows® 映像

创建自定义 Windows® 映像

您可以创建自己的基于 Windows® 的自定义映像,将自定义映像导入 IBM Cloud® Virtual Private Cloud 中。 然后,您可以使用自定义映像在 IBM Cloud® Virtual Private Cloud 基础架构中部署虚拟服务器或裸机服务器。

准备工作

您可以从 IBM Cloud 经典基础架构开始使用映像模板。 有关更多信息,请参阅从经典基础架构迁移虚拟服务器。 您还可以为导入时连接到服务器的启动卷创建自定义映像。 有关更多信息,请参阅 关于从卷创建映像。 请记住,LinuxONE(s390x处理器架构)不支持 Windows® 自定义映像。

所有自定义图片必须符合以下要求:所有自定义图片必须符合以下要求:所有自定义图片必须符合以下要求:所有自定义图片必须符合以下要求

  • 包含单个文件或卷。
  • 应为 qcow2 或 vhd 格式。
  • 启用云启动或使用 ESXi kickstart 启动。
  • 大小不超过 250 GB。
  • 最小大小为 10 GB。 对于小于 10 GB 的任何映像,大小将向上取整为 10 GB。

无法从非 100 GB 的加密引导卷 (来自卷的映像) 创建映像。

使用以下步骤创建 Windows® 自定义映像,以便在 IBM Cloud VPC 基础架构环境中部署。 该过程包含以下高级任务。

  • 使用 VirtualBox 创建 VHD 格式的 Windows® 映像。
  • 使用 virtIO 驱动程序和 Cloudbase-init 定制映像。

在创建 Windows® 自定义映像之前,请牢记以下要求。

必须安装 virtio-win 驱动程序。 Microsoft® 建议您从获得许可的 RHEL 版本 8 或 9 实例中获取驱动程序。 Red Hat 使用微软认证的驱动程序。 建议的最低 Red Hat virtio-win 软件包版本为 virtio-win-1.9.24。 但是,使用最新的包是最好的。

Red Hat virtio-win-1.9.24 ISO 包含以下特定驱动程序版本。

100.84.104.19500 oem10.inf \vioprot.inf_amd64_af0659efdaba9e4b\vioprot.inf
100.90.104.21400 oem11.inf \viofs.inf_amd64_c6f785e21f3f6f80\viofs.inf
100.85.104.20200 oem12.inf \viogpudo.inf_amd64_b19dcf9947e73e5a\viogpudo.inf
100.85.104.19900 oem13.inf \vioinput.inf_amd64_4505a789e17b5f89\vioinput.inf
100.81.104.17500 oem14.inf \viorng.inf_amd64_ef304eab276a3e61\viorng.inf
100.85.104.19900 oem15.inf \vioser.inf_amd64_cb4783c018c10eba\vioser.inf
100.90.104.21500 oem2.inf  \vioscsi.inf_amd64_02a46a7a223648d1\vioscsi.inf
100.90.104.21500 oem3.inf  \viostor.inf_amd64_520417bbc533faba\viostor.inf
100.85.104.20700 oem4.inf  \balloon.inf_amd64_afa8c93081df5458\balloon.inf
100.90.104.21400 oem5.inf  \netkvm.inf_amd64_0efff05c07fcee39\netkvm.inf
100.85.104.19900 oem6.inf  \pvpanic.inf_amd64_b7028360ef636f8b\pvpanic.inf
10.0.0.21000     oem9.inf  \qxldod.inf_amd64_6199f9ecf2339133\qxldod.inf

1.创建 Windows® 自定义映像

使用以下步骤创建自定义 Windows® 映像。

  1. 您可以下载 Windows 2016Windows 2019Windows 2022 操作系统 ISO 的评估版本。

  2. 使用 qemu-img 实用程序,创建要安装 Windows 的 VHD 映像。 下载 qemu-img 实用程序 并将其解压缩到 Windows 笔记本电脑客户机。 在解压缩 qemu-img 实用程序的文件夹中,创建 VHD 映像。

    qemu-img.exe create -f vpc Windows-2019.vhd 100G
    

    IBM Cloud® 支持使用 VHD 或 qcow2进行定制映像导入。 但是,Virtual Box 不支持 qcow2 格式。

  3. 通过 供应 或访问 IBM Cloud VPC中的现有 RHEL 服务器来获取必需的 virtio-win 驱动程序。

    1. 在 IBM Cloud VPC中的 RHEL 服务器上,通过运行以下命令来安装 virtio-win 软件包。

      yum install virtio-win
      

      在此示例中,virtio-win 软件包安装在 RHEL V 8 上。 返回的输出结果类似于下面的示例。

      Installed:
        virtio-win-1.9.24-2.el8_5.noarch
      
    2. 访问 /usr/share/virtio-win 目录中的 virtio-win ISO。

      cd /usr/share/virtio-win/
      
    3. 使用安全副本复制 virtio-win ISO 文件,例如 virtio-win-1.9.24.iso,用于您的 Windows® 自定义映像。

    • 使用 winSCP 在 ® 客户端复制 ISO 文件。
    • 使用 SCP 在 Linux 或 macOS 客户机上复制 ISO 文件。
    1. 安装并打开 ISO 文件。

    2. 从相应操作系统的 virtio-win.iso 文件中复制所有相关 virtio 驱动程序,将这些驱动程序放入名为 Drivers 的文件夹中,然后将 Drivers 文件夹复制到操作系统 ISO 文件夹中。

    3. 下载 Windows 评估和部署工具箱(ADK)。 要获取 oscdimg.exe 实用程序,请仅安装部署工具。

    4. 创建可引导的 Windows ISO,通过使用 oscdimg.exe 命令将所有 virtio 驱动程序合并到 Drivers 文件夹中。

      C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\x86\Oscdimg> oscdimg -m -bC:\..\..\Downloads\<extracted_ISO_folder>\boot\etfsboot.com -u2 C:\..\..\Downloads\extracted_ISO_folder  C:\..\..\Downloads\win2019new.iso
      
  4. 使用 VirtualBox 通过在步骤 3 中创建的可启动 Windows® ISO,使用在步骤 2 中创建的 VHD 映像创建虚拟服务器。 有关更多信息,请参阅 Oracle VM VirtualBox User Manual

    如果要使用 VirtualBox 以外的方法来创建定制映像 (例如 VMware),那么必须从定制映像中除去所有特定于该系统管理器的驱动程序。

  5. 在存储设置中,添加在步骤 3 中创建的 Windows® 安装可启动 ISO。

  6. 启动服务器并开始安装 Windows®。

  7. 选择操作系统的版本(标准/数据中心)和桌面体验(带桌面体验或不带桌面体验)。

  8. 选择 Drive 0 并继续安装。

  9. 安装完成后,关闭虚拟服务器并除去安装 ISO。 您可以忽略有关除去安装 ISO 的警告。

  10. 使用默认的 Windows® 更新程序下载和安装 Windows 更新。 重复下载和安装更新的过程,直到没有可用的更新为止。

在恢复映像中提供 virtio-win 驱动程序

创建 Windows® 映像后,确保 virtio-win 驱动程序在恢复映像中可用。 这一步确保你可以使用恢复镜像来排除任何问题,或在救援模式下使用镜像。

下载所需的 virtio 驱动程序 vioscsi.infviostor.inf 后,使用以下步骤在恢复映像中提供这些驱动程序。

  1. 使用 reagentc /info 命令查找恢复映像。

    • 如果恢复映像位于单独的恢复分区中,请使用 diskpart 实用程序分配驱动器代号并取消隐藏驱动器。 如果不存在单独的恢复分区,则不需要这些步骤。 下面的示例针对分区 3、驱动器 R,并使用设置 id=07

      diskpart
      select disk 0
      list part
      select part 3
      assign letter R
      set id=07
      exit
      
  2. 要修改恢复映像,请使用 reagentc /disable 禁用恢复模式。

  3. 创建目录以挂载恢复映像。

    md C:\mount\winre
    
  4. 将恢复映像复制到挂载目录。

    xcopy /h R:\Recovery\WindowsRE\Winre.wim C:\mount\
    
  5. 使用 attrib -s -h -r C:\mount\Winre.wim 使恢复图像可见。

  6. 使用 dism /Mount-Image /ImageFile:c:\mount\Winre.wim /index:1 /MountDir:c:\mount\winre 挂载恢复映像的内容。

  7. vioscsiviostor 驱动程序添加到恢复映像中。 下面的示例假定 virtio 驱动程序位于驱动器 E 上。 为 vioscsiviostor 驱动程序选择相应的 Windows® 版本。

    Dism /image:c:\mount\winre /Add-Driver /Driver:"E:\vioscsi\2k19\amd64\vioscsi.inf"
    Dism /image:c:\mount\winre /Add-Driver /Driver:"E:\viostor\2k19\amd64\viostor.inf"
    
  8. 添加所有驱动程序后,就可以创建恢复镜像了。

    Dism /Image:c:\mount\winre /Cleanup-Image /StartComponentCleanup
    Dism /Unmount-Image /MountDir:c:\mount\winre /Commit
    
  9. 优化恢复映像。

    Dism /Export-Image /SourceImageFile:c:\mount\WinRE.wim /SourceIndex:1 /DestinationImageFile:c:\mount\winre-optimized.wim
    
  10. 将恢复映像复制到步骤 1 所述的原始位置,并保留其原始属性。

    xcopy C:\mount\winre-optimized.wim  R:\Recovery\WindowsRE\WinEe.wim /h /r
    
    • 如果恢复映像位于单独的恢复分区中,请使用 diskpart 实用程序移除指定的驱动器代号并隐藏驱动器。 如果不存在单独的恢复分区,则不需要这些步骤。 以下示例适用于驱动器 R 的分区 3

      diskpart
      select disk 0
      list part
      select part 3
      remove letter R
      set id=27
      exit
      
  11. 使用 reagentc /enable 启用恢复映像。

  12. 使用 reagentc /info 验证恢复模式是否启用。

您的镜像已设置为包含必要 virtio 驱动程序的恢复镜像。

2.定制虚拟服务器

完成以下步骤,自定义使用 VirtualBox 创建的虚拟服务器。

  1. Cloudbase-Init 安装包 安装和配置 cloudbase-init

  2. 修改 cloudbase-init.conf 文件 (C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf) 以匹配以下值。 请勿从文件中除去任何其他内容。

    [DEFAULT]
    #  "cloudbase-init.conf" is used for every boot
    config_drive_types=vfat,iso
    config_drive_locations=hdd,partition
    activate_windows=true
    kms_host=kms.adn.networklayer.com:1688
    mtu_use_dhcp_config=false
    real_time_clock_utc=false
    bsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe
    mtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\
    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
    local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
    metadata_services=cloudbaseinit.metadata.services.configdrive.ConfigDriveService,
    # enabled plugins - executed in order
    plugins=cloudbaseinit.plugins.common.mtu.MTUPlugin,
              cloudbaseinit.plugins.windows.ntpclient.NTPClientPlugin,
              cloudbaseinit.plugins.windows.licensing.WindowsLicensingPlugin,
              cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,
              cloudbaseinit.plugins.common.userdata.UserDataPlugin,
              cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin
    

    如果计划为定制映像自带许可证,请从 cloudbase-init.conf 文件中除去以下行。

    activate_windows=true
    kms_host=kms.adn.networklayer.com:1688
    
  3. 修改 cloudbase-init-unattend.conf 文件 (C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init-unattend.conf) 以匹配以下值。 请勿从文件中除去任何其他内容。

    [DEFAULT]
    #  "cloudbase-init-unattend.conf" is used during the Sysprep phase
    username=Administrator
    inject_user_password=true
    first_logon_behaviour=no
    config_drive_types=vfat
    config_drive_locations=hdd
    allow_reboot=false
    stop_service_on_exit=false
    mtu_use_dhcp_config=false
    bsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe
    mtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\
    debug=true
    log_dir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\
    log_file=cloudbase-init-unattend.log
    default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN
    local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
    metadata_services=cloudbaseinit.metadata.services.configdrive.ConfigDriveService,
    # enabled plugins - executed in order
     plugins=cloudbaseinit.plugins.common.mtu.MTUPlugin,
              cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,
              cloudbaseinit.plugins.windows.createuser.CreateUserPlugin,
              cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,
              cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin,
              cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin
    
  4. 修改 Unattend.xml 文件 (C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\Unattend.xml) 并将 PersistAllDeviceInstalls 值设置为 false

  5. 从命令提示符使用以下命令来运行 Sysprep

    C:\Windows\System32\Sysprep\Sysprep.exe /oobe /generalize /shutdown "/unattend:C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\Unattend.xml"
    
  6. 运行 sysprep 后,虚拟服务器将关闭。 然后,您可以继续 步骤 4 - 创建自定义虚拟服务器的映像模板

3.上传自定义图像

使用以下信息将定制映像上载到 IBM Cloud Object Storage。

在 IBM Cloud® Object Storage 桶的 Objects 页面上,单击 Upload。 您可以使用Aspera高速传输插件来上传大于 200 MB 的图像。 有关上传到 IBM Cloud Object Storage 的更多信息,请参阅上传数据

后续步骤

当您的 Windows® 自定义映像在 IBM Cloud Object Storage 中创建并可用时,您可以 将自定义映像导入 VPC为 VPC 配置虚拟服务器映像。 确保 授予对 IBM Cloud Object Storage 的访问权以导入映像

如果您计划使用专用目录来管理定制映像,那么必须首先将该映像导入到 IBM Cloud VPC中,然后将该映像加载到专用目录中。

导入定制映像后,可以使用它在 IBM Cloud® Virtual Private Cloud 基础结构中部署服务器。

从导入的映像创建新的虚拟服务器后,请先停止并启动该虚拟服务器,然后再访问该虚拟服务器:

  1. IBM Cloud 控制台中,单击 导航菜单 菜单图标 基础架构 VPC 图标 计算 > 虚拟服务器实例
  2. 在“虚拟服务器实例”页面上,单击“操作”图标 "更多操作" 图标