创建自定义 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® 映像。
-
您可以下载 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 100G
IBM 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 文件。
- 使用 SCP 在 Linux 或 macOS 客户机上复制 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 User Manual。
如果要使用 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"
-
添加所有驱动程序后,就可以创建恢复镜像了。
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 桶的 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 基础结构中部署服务器。
从导入的映像创建新的虚拟服务器后,请先停止并启动该虚拟服务器,然后再访问该虚拟服务器:
- 在 IBM Cloud 控制台中,单击 导航菜单
基础架构
计算 > 虚拟服务器实例。
- 在“虚拟服务器实例”页面上,单击“操作”图标
。