如果您需要手动更新Windows实例的virtio驱动,可以参考本文介绍的方式完成驱动更新。

操作流程

  1. 创建快照备份数据。
    建议您为Windows实例创建快照备份数据,如果更新virtio驱动时造成实例异常,可通过快照回滚实例中的数据。具体操作,请参见创建一个云盘快照
  2. 关闭第三方杀毒软件。
    为确保virtio驱动的更新脚本或云助手插件顺利执行,建议您登录Windows实例,临时关闭实例中已安装的第三方杀毒软件(实例自带的杀毒软件无需关闭)。如果您确认您的Windows实例无需更新virtio驱动或者驱动已成功更新,请及时重启第三方杀毒软件。
  3. 通过云安全中心或者手动检测Windows实例中的virtio驱动是否需要更新。
    • 您可以通过阿里云云安全中心的漏洞修复功能检测Windows实例中的virtio驱动是否需要更新。具体操作,请参见通过云安全中心一键更新virtio驱动
      注意 云安全中心提供了多种版本,不同版本支持的功能不同。更多信息,请参见功能特性。如果您的云安全中心是免费版或其他仅支持漏洞检测,但不支持漏洞修复的版本。您可以通过漏洞修复的检测机制查看需要更新驱动的Windows实例信息,然后手动更新驱动。
    • 您可以手动检查是否需要更新Windows实例的virtio驱动。具体操作,请参见手动检查是否需要更新virtio驱动
  4. 手动更新virtio驱动。
    您可以根据实际情况,选择以下任一方式手动更新virtio驱动:
    注意 手动更新virtio驱动时涉及网卡驱动的更新,因此ECS实例的网络会中断10秒左右。您需要注意网络中断所造成的业务影响。
    说明 如果您通过脚本更新virtio驱动失败,建议您尝试使用云助手插件(acs-plugin-manager.exe --exec --plugin=UpdateVirtIo)更新virtio驱动。如果仍然更新失败,请提交工单

通过云安全中心一键更新virtio驱动

阿里云云安全中心针对旧版本virtio驱动可能产生的影响,提供了检测以及一键修复功能。本操作步骤中,主要介绍如何通过云安全中心的漏洞修复功能检测并一键更新virtio驱动。关于云安全中心漏洞修复功能的更多信息,请参见漏洞修复概述

  1. 登录云安全中心控制台
  2. 在左侧导航栏,选择安全防范 > 漏洞修复
  3. 漏洞修复页面,单击Windows系统漏洞页签。
  4. 是否已处理下拉列表中,选择未处理,然后在漏洞公告列表,查看是否存在Windows virtio驱动BUG导致磁盘数据丢失风险更新
    检测virtio驱动bug漏洞公告说明:
    • 如果不存在该漏洞公告,说明您的阿里云账号下没有需要更新virtio驱动的Windows实例,您无需再进行本文中的任何操作。
    • 如果存在该漏洞公告,您可以根据云安全中心的不同版本,选择以下不同的驱动更新操作。关于云安全中心不同版本对漏洞修复的支持情况,请参见漏洞修复
      • 如果您的云安全中心版本仅支持检测漏洞,但不支持修复漏洞。您需要根据本文提供的手动更新方式,完成virtio驱动更新。
      • 如果您的云安全中心版本支持检测并一键修复漏洞,请参考本操作步骤完成驱动更新。
  5. 单击Windows virtio驱动BUG导致磁盘数据丢失风险更新漏洞名称,进入漏洞详情页。
  6. 漏洞详情页签,选中所有待更新virtio驱动的Windows实例,然后在资源列表下方,单击修复
    漏洞详情
  7. 修复页面,单击立即修复
    您可以手动选择是否为待修复的ECS实例创建快照,建议您选择自动创建快照并修复。如果您确保在修复前,已经为各台实例创建了快照,可以选择不建立快照备份直接修复修复
  8. 等待修复成功后,在资源列表的操作列,单击重启,重启所有完成漏洞修复的Windows实例。
    重启win实例
    重启实例后,在漏洞详情页签的资源列表中,状态列将显示重启成功
  9. 查看已处理的漏洞详情。
    1. 返回漏洞修复页面,单击Windows系统漏洞页签。
    2. 是否已处理下拉列表中,选择已处理,然后在漏洞公告列表,单击Windows virtio驱动BUG导致磁盘数据丢失风险更新
      如下图所示,在漏洞详情页签,可以查看到修复成功的资源信息。修复成功

手动检查是否需要更新virtio驱动

在更新virtio驱动前,您可以在Windows实例中运行命令检查是否需要更新驱动。当您根据本文提供的任一方式更新驱动后,也可以再次检查Windows实例中的virtio驱动是否已更新为最新版。

  1. 远程连接Windows实例。
    具体操作,请参见连接方式概述
  2. 在桌面按下Win+R组合键,打开运行对话框。
  3. 输入powershell进入PowerShell命令行。
  4. 运行以下命令,查看virtio驱动的版本信息。
    [System.Diagnostics.FileVersionInfo]::GetVersionInfo("C:\Windows\System32\drivers\viostor.sys")
    命令行回显信息如下图所示。如果产品版本(ProductVersion)低于58017,阿里云建议您参考本文更新驱动。virtio版本信息
  5. 运行以下命令,查看当前服务器中的磁盘唯一标识。
    Get-Disk | Select-Object uniqueid
    命令行回显信息如下图所示。如果uniqueid的值为141463431303031,或者非000000开头的标识,阿里云建议您参考本文更新驱动。磁盘标识

手动更新方式一:使用脚本更新驱动

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

  1. 远程连接待更新驱动的Windows实例。
    具体操作,请参见连接方式介绍
  2. 在Windows实例中,下载用于更新virtio驱动的脚本。
    下载地址:InstallVirtIo.ps1
  3. 执行InstallVirtIo.ps1脚本更新virtio驱动。
    例如,您将脚本InstallVirtIo.ps1下载到了C:\test目录下。
    1. 打开C:\test文件夹。
      您需要打开InstallVirtIo.ps1实际的下载目录。
    2. 选中InstallVirtIo.ps1文件,单击鼠标右键,然后单击使用 PowerShell 运行
      执行脚本
      您也可以在文件夹的空白区域,按下Shift键的同时,单击鼠标右键,然后单击在此处打开 Powershell 窗口(S)。在Windows PowerShell中手动执行InstallVirtIo.ps1脚本。
      说明
      • 如果您当前Windows实例的登录用户为普通用户,需要以管理员权限执行脚本。如果是系统用户,则可以直接执行脚本。
      • 如果您在手动执行脚本时,系统提示您禁止执行脚本,则需要您先修改PowerShell的脚本执行策略。具体操作,请参见常见问题
  4. 脚本执行完成后,重启Windows实例。
    具体操作,请参见重启实例。重启实例后,virtio驱动更新才会生效。

手动更新方式二:通过安装包更新驱动

如果您的Windows实例不具备公网访问能力,可以通过该方式更新virtio驱动。

  1. 在本地主机上,下载阿里云提供的virtio驱动压缩包。
    下载地址:virtio驱动压缩包
    成功下载后,您可以查看到名为210408.1454.1459_bin.zip的压缩包。
  2. 210408.1454.1459_bin.zip上传至Windows实例。
    您可以使用以下任一方式上传文件:
    • 本地操作系统为Windows时,可以使用Windows远程桌面连接工具连接Windows实例,并完成文件的上传。
    • 为Windows实例搭建FTP服务,然后通过FTP客户端将文件上传至Windows实例。更多信息,请参见手动搭建FTP站点(Windows)
  3. 在Windows实例中,解压210408.1454.1459_bin.zip,然后打开210408.1454.1459_bin文件夹。
    打开文件夹后,您可以查看到不同Windows操作系统版本对应的文件夹。windows版本各个文件夹中保存不同操作系统适用的驱动。您只需关注以下文件夹:
    • win10目录中保存的驱动适用于:Windows Server 2016、Windows Server 2019以及Windows 10。
    • Win8目录中保存的驱动适用于:Windows Server 2012 R2、Windows 8.1。
    • win7目录中保存的驱动适用于:Windows Server 2008 R2、Windows 7。

    每个文件夹中的驱动按照amd64架构和x86架构区分,amd64架构对应64位操作系统,x86架构对应32位操作系统。

  4. 根据Windows实例当前的操作系统版本,选择打开对应的文件夹。
    例如,本示例中Windows实例的操作系统版本为Windows Server 2012 R2 64位,则打开的文件夹路径为C:\test\210408.1454.1459_bin\Win8\amd64
  5. amd64文件夹内的空白区域,按下Shift键的同时,单击鼠标右键,然后单击在此处打开 Powershell 窗口(S)
    powershell
  6. 在Windows Powershell中,运行以下命令,安装新版virtio驱动。
    说明 如果您当前Windows实例的登录用户为普通用户,需要以管理员权限运行该命令。如果是系统用户,则可以直接运行该命令。
    pnputil -i -a *.inf
    如下图所示,表示virtio驱动安装成功。驱动更新
  7. 重启Windows实例。
    具体操作,请参见重启实例。重启实例后,virtio驱动更新才会生效。

手动更新方式三:使用云助手批量更新驱动

如果您存在多台ECS实例需要更新virtio驱动,且Windows实例能够访问公网或者专有网络VPC的内网,可以通过阿里云的云助手功能批量更新。
说明 通过云助手更新virtio驱动时,需要下载驱动相关的安装包,系统会优先访问VPC内网进行下载,如果VPC内网访问受限导致下载失败,系统再访问公网进行下载。
  1. 登录ECS管理控制台
  2. 在左侧导航栏,选择运维与监控 > 发送命令/文件(云助手)
  3. 在顶部菜单栏,选择地域。
    选择的地域需要与您ECS实例所属的地域保持一致。
  4. 使用云助手批量更新驱动。
    您可以通过云助手手动设置命令内容,完成驱动更新,也可以通过云助手的公共命令快速完成驱动更新。本文分别介绍不同的云助手更新驱动方式。
    • (推荐)通过公共命令批量更新驱动
      1. ECS云助手页面,单击公共命令,然后在搜索栏中输入ACS-ECS-InstallVirtioDriver-windows.ps1进行搜索。公共命令
      2. 在公共命令ACS-ECS-InstallVirtioDriver-windows.ps1操作列,单击执行
      3. 执行命令面板的选择实例区域,选中需要更新驱动的实例ID。
    • 手动设置命令内容批量更新驱动
      1. ECS云助手页面,单击创建/执行命令
      2. 创建命令面板,完成以下配置。
        • 命令信息区域,必填参数说明如下表所示,其它参数保持默认值即可。
          参数 说明
          命令来源 单击输入命令内容
          命令名称 自定义名称或保持默认名称。
          执行计划 单击立即执行
          命令类型 单击PowerShell
          命令内容 以下任一方式均可完成virtio驱动的更新:
          • 通过InstallVirtIo.ps1脚本更新virtio驱动。

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

          • 通过云助手插件更新virtio驱动。
            将以下命令复制到云助手的命令内容中。
            acs-plugin-manager.exe --exec --plugin=UpdateVirtIo
        • 选择实例区域,选中需要更新驱动的实例ID。
  5. 单击执行
    您可以在命令执行结果页签查看命令的执行结果。具体操作,请参见控制台查看执行结果。多台ECS实例的其中一台实例内命令执行结果信息如下图所示,表示该实例成功更新virtio驱动。云助手更新
  6. 批量重启多台Windows实例。
    具体操作,请参见重启实例。重启实例后,virtio驱动更新才会生效。

常见问题

  • 问题一: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实例。搭建FTP站点的具体操作,请参见手动搭建FTP站点(Windows)

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

    3. 解压Windows驱动程序包,然后打开new_virtio文件夹进行查看。
      打开文件夹后,您可以查看到不同Windows操作系统版本对应的文件夹。文件夹各个文件夹中保存不同操作系统适用的驱动。您只需关注以下文件夹:
      • 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实例中的网卡驱动。

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

      1. 打开Windows控制面板,在搜索控制面板文本框,输入设备管理器进行搜索。设备管理器
      2. 单击设备管理器,打开设备管理器。
      3. 单击网络适配器,然后右键单击Red Hat VirtIO Ethernet Adapter
      4. 单击卸载设备(U)卸载设备
      5. 卸载设备对话框,选中删除此设备的驱动程序软件前的复选框,然后单击卸载

        成功卸载后,设备管理器中将不再显示网络适配器

    5. 安装最新版Windows网卡驱动。
      1. 根据Windows实例当前的操作系统版本,选择打开对应的Windows驱动程序文件夹。

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

      2. amd64文件夹内的空白区域,按下Shift键的同时,单击鼠标右键,然后单击在此处打开 Powershell 窗口(S)
      3. 在Powershell窗口中,运行以下命令,安装最新版Windows网卡驱动。
        pnputil -i -a netkvm.inf
        如下图所示,表示网卡驱动成功安装。安装网卡驱动
    6. 返回或重新打开设备管理器,右键单击主机名称,然后单击扫描检测硬件改动(A)
      例如,本示例中Windows实例的主机名称为test,则操作示例如下图所示:扫描检测

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

    7. 查看最新版的网卡驱动信息。
      1. 单击网络适配器,然后右键单击Red Hat VirtIO Ethernet Adapter
      2. 单击属性(R)
      3. Red Hat VirtIO Ethernet Adapter 属性对话框,单击驱动程序页签。
        如下图所示,在页签内,您可以查看到最新版网卡驱动的数字签名信息。数字签名信息
    8. 重启Windows实例。

      具体操作,请参见重启实例。重启实例后,新版的驱动才会生效。