更新Windows实例的virtio驱动

如果virtio驱动版本过旧或存在兼容性问题,可能导致ECS实例性能下降(如磁盘IOPS降低、网络延迟增加)或功能异常(如设备无法识别、元数据读取失败)。为确保ECS实例在阿里云平台稳定运行,建议您及时更新virtio驱动版本。

适用场景

  • 阿里云会定期更新virtio驱动,旧版驱动可能存在已知漏洞,更新virtio驱动版本可避免潜在风险或提升驱动的性能。

  • Windows实例从旧版本(例如Windows Server 2016)升级到新版本(例如Windows Server 2022),旧版virtio驱动可能不兼容新系统,导致设备无法识别或功能异常,因此需要更新virtio驱动版本,确保与新系统兼容。

  • Windows实例某些操作依赖于镜像的virtio驱动版本,例如,在线扩容云盘要求virtio驱动版本大于58011(创建时间早于20190330日的实例virtio版本可能不满足要求),而查询云盘序列号则要求virtio驱动版本大于58017(创建时间早于20200501日的实例virtio版本可能不满足要求)。如果当前实例的virtio驱动版本不满足要求,则需要先更新驱动版本。

使用限制

仅支持为Windows Server 2008及以上版本的操作系统更新virtio驱动。

操作步骤

  1. 准备工作。

    • 创建快照备份数据。

      建议您为Windows实例创建快照备份数据,以便在更新virtio驱动时出现异常时可以回滚数据。

    • 关闭第三方杀毒软件。

      为确保virtio驱动的更新顺利进行,建议您临时关闭已安装的第三方杀毒软件(实例自带的杀毒软件无需关闭)。更新完成后,请及时重启杀毒软件。

  2. 更新virtio驱动。

    您可以根据实际情况,选择以下任一方式手动更新virtio驱动。

    使用脚本更新(实例可以访问公网)

    如果您的Windows实例能够访问公网,可以通过该方式快速更新virtio驱动。

    1. 远程连接Windows实例。

      具体操作,请参见通过密码认证登录Windows实例

    2. Windows PowerShell中,运行以下命令,下载脚本。

      Invoke-WebRequest -Uri "https://windows-driver-cn-beijing.oss-cn-beijing.aliyuncs.com/virtio/InstallVirtIo.ps1" -OutFile "C:\Users\Administrator\Downloads\InstallVirtIo.ps1"
    3. 运行以下命令,执行脚本。

      powershell -ExecutionPolicy Bypass -File "C:\Users\Administrator\Downloads\InstallVirtIo.ps1"
    4. 脚本执行完成后,重启Windows实例使驱动更新生效。

      具体操作,请参见重启实例

    通过安装包更新(实例不能访问公网)

    1. 在本地主机上,根据实际的操作系统下载对应版本的virtio驱动安装包。

      下载地址:请参见阿里云virtio驱动介绍

    2. 将安装包上传至Windows实例。

      具体操作,请参见使用远程桌面或Windows APPWindows实例传输文件

    3. Windows实例中安装新版virtio驱动。

      图形化安装

      以安装58101版本的阿里云virtio驱动为例。

      重要

      图形化安装virtio驱动过程中会更新网卡驱动,因此会有约10秒左右的网络中断,可能对您的业务造成影响,请您提前做好风险评估和准备工作。

      1. 在安装包上传路径中找到并双击AliyunVirtio_58101_WIN2016_x64.exe

      2. 按照界面提示完成安装。

        image

      3. 直至出现如下界面,重启系统使配置生效。

        image

        说明

        如果Windows 7/Windows Server 2008 R2系统在安装过程中出现对于Windows 7/Windows Server 2008 R2系统,您必须安装SHA-2补丁!的提示,表示系统中缺少SHA-2签名补丁,为避免镜像导入后启动异常,建议您提前安装签名补丁。更多信息,请参见Windows Server 2008 R2因驱动签名无法验证导致启动失败

      命令行安装

      1. Windows PowerShell中,运行以下命令,切换到软件包上传目录,例如C:\test

        cd C:\test
      2. 运行以下命令,安装virtio驱动。

        ./AliyunVirtio_58101_WIN2016_x64.exe /SILENT /FORCE /NORESTART
        说明
        • /SILENT:表示静默模式。

        • /FORCE:表示强制覆盖(如果已经安装过virtio驱动)安装。

        • /NORESTART:表示不自动重启。

    通过云助手更新(批量更新多台实例)

    如果您有多台ECS实例需要更新virtio驱动,且Windows实例能够访问公网或者专有网络VPC的内网,可以通过阿里云的云助手功能批量更新。

    说明

    通过云助手更新virtio驱动时,需要下载驱动相关的安装包,系统会优先访问VPC内网进行下载,如果VPC内网访问受限导致下载失败,系统再访问公网进行下载。

    1. 登录ECS管理控制台

    2. 在左侧导航栏,选择运维与监控 > 云助手

    3. 在顶部菜单栏,选择地域。

      选择的地域需要与您的ECS实例所属的地域保持一致。

    4. 使用云助手批量更新驱动。

      您可以通过云助手手动设置命令内容,完成驱动更新,也可以通过云助手的公共命令快速完成驱动更新。本文分别介绍不同的云助手更新驱动方式。

      • (推荐)通过公共命令批量更新驱动

        1. ECS云助手页面,单击公共命令页签,搜索并执行ACS-ECS-InstallVirtioDriver-windows.ps1

        2. 执行命令面板的选择实例区域,选中需要更新驱动的实例ID。

      • 手动设置命令内容批量更新驱动

        1. ECS云助手页面,单击创建/执行命令

        2. 创建执行命令面板,完成以下配置。

          • 命令信息区域,必填参数说明如下表所示,其他参数保持默认值即可。更多参数信息,请参见创建并执行命令

            参数

            说明

            命令来源

            选择输入命令内容

            命令类型

            选择PowerShell

            命令内容

            以下任意一种方式均可完成virtio驱动的更新:

            • 通过InstallVirtIo.ps1脚本更新virtio驱动。

              您需要在本地主机下载InstallVirtIo.ps1脚本,然后将脚本的内容完整复制到云助手的命令内容中。

            • 通过云助手插件更新virtio驱动。

              将以下命令复制到云助手的命令内容中。

              acs-plugin-manager.exe --exec --plugin=UpdateVirtIo

            执行计划

            选择立即执行

          • 选择实例区域,选中需要更新驱动的实例ID,单击执行

    5. 批量重启多台Windows实例,使驱动更新生效。

      具体操作,请参见重启实例

  3. 在设备管理器中检查已安装的virtio驱动版本。

    说明

    阿里云大部分新实例规格(例如ecs.g8a)使用NVMe协议云盘,此时存储控制器表现为NVMe控制器;其他规格实例通常采用VirtlO SCSI模拟的传统SCSI控制器。NVMe设备在更新virtio驱动版本时会存在存储驱动(viostor)更新不生效的情况(即驱动版本号不更新),此时建议以网卡设备的驱动版本信息为准。

    • 存储控制器显示为Red Hat VirtlO SCSI controller表示virtio块设备,virtio块设备需根据存储控制器驱动程序版本末尾编号来判断virtio驱动版本。

      image

    • 存储控制器显示包含了NVMe字样(如图所示的Aibaba NVMe Elastic Block Storage Adapter)表示NVMe设备,NVMe设备需根据网络适配器驱动程序版本末尾编号来判断virtio驱动版本。

      image

常见问题

  • 问题一:PowerShell中禁止运行脚本怎么办?

    禁止执行脚本

    解决方案:部分Windows操作系统版本中,PowerShell为保证安全性,默认禁止运行脚本。您可以修改PowerShell的脚本执行策略,使PowerShell支持运行脚本。具体操作如下:

    1. 运行以下命令,使PowerShell支持运行脚本。

      Set-ExecutionPolicy Unrestricted
    2. 在命令行输入A,然后按下Enter键,更改策略。脚本策略

    3. 再次手动运行脚本。

    4. PowerShell为保证系统安全,将在命令行中回显安全警告,您需要在命令行输入R,然后按下Enter键,运行一次脚本。

    5. 当脚本成功运行后,建议运行以下命令,恢复PowerShell的默认配置,以保证系统安全。

      Set-ExecutionPolicy Restricted
    6. 在命令行输入A,然后按下Enter键,更改策略。

  • 问题二:更新virtio驱动后,网卡驱动提示没有数字签名如何解决?

    解决方案:您可以手动下载最新的Windows驱动程序包,替换存在问题的网卡驱动。具体操作如下:

    1. 远程连接目标Windows实例。

      具体操作,请参见通过密码认证登录Windows实例

    2. 下载最新的Windows驱动程序包

      说明

      如果您的Windows实例不能成功下载该驱动包,您可以先将驱动包下载至本地物理主机,然后通过远程桌面连接工具、FTP等方式将驱动包上传至Windows实例。具体操作,请参见上传文件

      成功下载后,您可以查看到名为new_virtio.zip的驱动程序包。

    3. 解压驱动程序包,打开new_virtio文件夹。

      image

      各个文件夹中保存不同操作系统适用的驱动。您只需关注以下文件夹,选择对应操作系统版本的文件夹:

      • win10目录中保存的驱动适用于:Windows Server 2016、Windows Server 2019以及Windows 10。

      • Win8目录中保存的驱动适用于:Windows Server 2012 R2、Windows 8.1。

      • win7目录中保存的驱动适用于:Windows Server 2008 R2、Windows 7。

    4. 卸载现有网卡驱动。

      本示例以Windows Server 2019 64位为例,介绍具体的操作步骤,其他Windows操作系统版本的操作步骤与之类似。

      1. 打开Windows控制面板,在搜索控制面板文本框,搜索并打开设备管理器设备管理器

      2. 网络适配器下,右键单击Red Hat VirtIO Ethernet Adapter,选择卸载设备(U)

        卸载设备

      3. 卸载设备对话框,选中删除此设备的驱动程序软件前的复选框,然后单击卸载

    5. 安装最新版网卡驱动。

      1. PowerShell中,运行以下命令,打开对应的驱动程序文件夹。

        例如,本示例中Windows实例的操作系统版本为Windows Server 2019 64位,且Windows驱动程序保存在C:\test文件夹中,则需要打开的文件夹路径为C:\test\new_virtio\win10\amd64

        cd C:\test\new_virtio\win10\amd64
      2. 运行以下命令,安装最新版网卡驱动。

        pnputil -i -a netkvm.inf

        如下图所示,表示网卡驱动成功安装。安装网卡驱动

    6. 返回或重新打开设备管理器,右键单击主机名称,选择扫描检测硬件改动(A)

      例如,本示例中Windows实例的主机名称为test,则操作示例如下图所示:扫描检测

      扫描检测完成后,您可以在设备管理器中查看到新增的网络适配器

    7. 查看最新版的网卡驱动信息。

      1. 网络适配器下,右键单击Red Hat VirtIO Ethernet Adapter,选择属性(R)

      2. Red Hat VirtIO Ethernet Adapter 属性对话框,单击驱动程序页签,查看驱动信息。

        image

    8. 重启Windows实例,使新版驱动生效。

      具体操作,请参见重启实例