创建自定义 Windows® 映像
您可以创建自己的基于 Windows® 的自定义映像,并将该自定义映像导入到 IBM Cloud® Virtual Private Cloud. 中。 然后,您就可以使用自定义映像在您的 IBM Cloud® Virtual Private Cloud 基础设施中部署虚拟服务器或裸机服务器。
准备工作
您可以从 IBM Cloud 经典基础架构开始使用映像模板。 有关更多信息,请参阅从经典基础架构迁移虚拟服务器。 您还可以在导入时创建一个连接到服务器的启动卷的自定义映像。 有关更多信息,请参阅 关于从卷创建映像。 请记住,LinuxONE(s390x处理器架构)不支持 Windows® 自定义映像。
所有自定义图片必须符合以下要求:
- 包含单个文件或卷。
- 应为 qcow2 或 vhd 格式。
- 大小不超过 250 GB。
- 确保在 qcow2 映像中安装并激活 cloud-init(Linux ) 或 cloudbase-init(Windows)。
- 最小大小为 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® 映像。
-
您可以下载 Windows 2016,Windows 2019或 Windows 2022 操作系统 ISO 的评估版本。
-
使用
qemu-img实用程序,创建要安装 Windows 的 VHD 映像。 下载 qemu-img 实用程序 并将其解压缩到 Windows 笔记本电脑客户机。 在解压缩qemu-img实用程序的文件夹中,创建 VHD 映像。qemu-img.exe create -f vpc Windows-2019.vhd 100GIBM Cloud® 支持通过VHD或 qcow2. 然而,Virtual Box 不支持该 qcow2 格式。
-
通过 供应 或访问 IBM Cloud VPC中的现有 RHEL 服务器来获取必需的 virtio-win 驱动程序。
- 在 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- 访问
/usr/share/virtio-win目录中的 virtio-win ISO。
cd /usr/share/virtio-win/-
使用安全副本复制 virtio-win ISO 文件,例如
virtio-win-1.9.24.iso,用于您的 Windows® 自定义映像。- 使用 winSCP 在 ® 客户端复制 ISO 文件。
- 在 Linux 或 macOS 客户端上,使用 SmartCloud Provisioning 复制 ISO 文件。
-
安装并打开 ISO 文件。
-
从相应操作系统的
virtio-win.iso文件中复制所有相关 virtio 驱动程序,将这些驱动程序放入名为Drivers的文件夹中,然后将Drivers文件夹复制到操作系统 ISO 文件夹中。 -
下载 Windows 评估和部署工具箱(ADK)。 要获取
oscdimg.exe实用程序,请仅安装部署工具。 -
创建可引导的 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 -
使用 VirtualBox 通过在步骤 3 中创建的可启动 Windows® ISO,使用在步骤 2 中创建的 VHD 映像创建虚拟服务器。 如需了解更多信息,请参阅 Oracle VM VirtualBox 用户手册。
若要使用除 以外的其他方法创建 VirtualBox 自定义映像(例如 VMware ),则必须从自定义映像中移除所有特定于该虚拟机管理程序的驱动程序。
-
在存储设置中,添加在步骤 3 中创建的 Windows® 安装可启动 ISO。
-
启动服务器并开始安装 Windows®。
-
选择操作系统的版本(标准/数据中心)和桌面体验(带桌面体验或不带桌面体验)。
-
选择 Drive 0 并继续安装。
-
安装完成后,关闭虚拟服务器并除去安装 ISO。 您可以忽略有关删除 ISO 安装文件的警告。
-
使用默认的 Windows® 更新程序下载和安装 Windows 更新。 重复下载和安装更新的过程,直到没有可用的更新为止。
在恢复映像中提供 virtio-win 驱动程序
创建 Windows® 映像后,确保 virtio-win 驱动程序在恢复映像中可用。 这一步确保你可以使用恢复镜像来排除任何问题,或在救援模式下使用镜像。
下载所需的 virtio 驱动程序 vioscsi.inf 和 viostor.inf 后,使用以下步骤在恢复映像中提供这些驱动程序。
-
使用
reagentc /info命令查找恢复映像。- 如果恢复映像位于单独的恢复分区中,请使用
diskpart实用程序分配驱动器代号并取消隐藏驱动器。 如果不存在单独的恢复分区,则不需要这些步骤。 下面的示例针对分区3、驱动器R,并使用设置id=07。
diskpart select disk 0 list part select part 3 assign letter R set id=07 exit - 如果恢复映像位于单独的恢复分区中,请使用
-
要修改恢复映像,请使用
reagentc /disable禁用恢复模式。 -
创建目录以挂载恢复映像。
md C:\mount\winre -
将恢复映像复制到挂载目录。
xcopy /h R:\Recovery\WindowsRE\Winre.wim C:\mount\ -
使用
attrib -s -h -r C:\mount\Winre.wim使恢复图像可见。 -
使用
dism /Mount-Image /ImageFile:c:\mount\Winre.wim /index:1 /MountDir:c:\mount\winre挂载恢复映像的内容。 -
将
vioscsi和viostor驱动程序添加到恢复映像中。 下面的示例假定 virtio 驱动程序位于驱动器 E 上。 为vioscsi和viostor驱动程序选择相应的 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"辅助存储卷以 virtio 块设备的形式呈现。 您的启动分区是 以SCSI设备的形式呈现,但有两种情况例外。 如果您的启动卷位于第二代 存储卷,它以 virtio 块设备的形式呈现。 此外,如果您的实例 如果您的计算机启用了安全启动,并且运行的是 Windows Server 2022 或更高版本的操作系统,那么您的 启动卷以 virtio 块设备的形式呈现。
-
添加所有驱动程序后,就可以创建恢复镜像了。
Dism /Image:c:\mount\winre /Cleanup-Image /StartComponentCleanup Dism /Unmount-Image /MountDir:c:\mount\winre /Commit -
优化恢复映像。
Dism /Export-Image /SourceImageFile:c:\mount\WinRE.wim /SourceIndex:1 /DestinationImageFile:c:\mount\winre-optimized.wim -
将恢复映像复制到步骤 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 - 如果恢复映像位于单独的恢复分区中,请使用
-
使用
reagentc /enable启用恢复映像。 -
使用
reagentc /info验证恢复模式是否已启用。
您的镜像已设置为包含必要 virtio 驱动程序的恢复镜像。
2.定制虚拟服务器
完成以下步骤,自定义使用 VirtualBox 创建的虚拟服务器。
-
从 Cloudbase-Init 安装包 安装和配置 cloudbase-init
-
修改
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 -
修改
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 -
修改
Unattend.xml文件 (C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\Unattend.xml) 并将PersistAllDeviceInstalls值设置为false。 -
从命令提示符使用以下命令来运行
Sysprep。C:\Windows\System32\Sysprep\Sysprep.exe /oobe /generalize /shutdown "/unattend:C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\Unattend.xml" -
运行 sysprep 后,虚拟服务器将关闭。 然后,您可以继续 步骤 4 - 创建自定义虚拟服务器的映像模板
3.上传自定义图像
使用以下信息将定制映像上载到 IBM Cloud Object Storage。
在您的 IBM Cloud® Object Storage 存储桶的 “对象”页面上,点击 “上传”。 您可以使用 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 基础结构中部署服务器。
从导入的映像创建新的虚拟服务器后,请先停止并启动该虚拟服务器,然后再访问该虚拟服务器:
- 在 IBM Cloud 控制台中,单击 导航菜单
基础架构
计算 > 虚拟服务器实例。
- 在“虚拟服务器实例”页面上,单击“操作”图标
。