更新Windows实例的virtio驱动

Windows实例某些操作依赖于镜像的virtio驱动版本,在线扩容云盘要求virtio驱动版本大于58011(创建时间早于2019年03月30日的实例virtio版本可能小于58011),或查询云盘序列号要求virtio驱动版本大于58017(创建时间早于2020年05月01日的实例virtio版本可能小于58017)。如果当前实例的virtio驱动版本不满足要求,则需要先更新virtio驱动版本才能进行相关操作。本文介绍如何查看并更新Windows实例的virtio驱动版本。

使用限制

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

操作步骤

  1. (可选)创建快照备份数据。

    建议您为Windows实例创建快照备份数据,如果更新virtio驱动时造成实例异常,可通过快照回滚实例中的数据。具体操作,请参见创建快照

  2. 关闭第三方杀毒软件。

    为确保virtio驱动的更新脚本或云助手插件顺利执行,建议您登录Windows实例,临时关闭实例中已安装的第三方杀毒软件(实例自带的杀毒软件无需关闭)。如果您确认您的Windows实例无需更新virtio驱动或者驱动已成功更新,请及时重启第三方杀毒软件。

  3. 查看当前实例的virtio驱动版本,根据场景判断是否需要更新virtio驱动。

    通过PowerShell查看

    1. 远程连接Windows实例。

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

    2. 打开运行对话框。

    3. 输入powershell进入PowerShell命令行。

    4. 运行以下命令,查看virtio驱动的版本信息。

      [System.Diagnostics.FileVersionInfo]::GetVersionInfo("C:\Windows\System32\drivers\viostor.sys")
      说明

      viostor.sys是一个与虚拟化环境存储设备驱动相关的系统文件,特别是用于Microsoft Hyper-V虚拟机上的虚拟磁盘控制器。当一个操作系统在Hyper-V平台上作为虚拟机运行时,viostor.sys驱动会与主机的虚拟化层协同工作,确保客户机操作系统能够像操作物理硬盘一样对虚拟硬盘进行读写操作。它是确保虚拟机磁盘I/O性能和兼容性的重要组件之一。

      命令行回显信息如下图所示。virtio版本信息

      根据ProductVersion末尾编号是否小于5801158017,判断是否需要更新驱动。

      操作场景

      virtio版本

      操作

      在线扩容云盘

      大于等于58011

      可以直接在线扩容云盘,无需更新virtio驱动。具体操作,请参见步骤一:扩容云盘容量

      小于58011

      无法在线扩容,需继续执行后续操作更新virtio驱动

      查询序列号

      大于等于58017

      可以直接查看磁盘序列号,无需更新virtio驱动。具体操作,请参见查看磁盘序列号

      小于58017

      无法直接查询序列号,需继续执行后续操作更新virtio驱动

    通过系统文件查看

    1. 远程连接Windows实例。

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

    2. 进入系统目录C:\Windows\System32\drivers

    3. 右键单击viostor.sys文件,选择属性,在详细信息页签下查看文件版本号。

      说明

      viostor.sys是一个与虚拟化环境存储设备驱动相关的系统文件,特别是用于Microsoft Hyper-V虚拟机上的虚拟磁盘控制器。当一个操作系统在Hyper-V平台上作为虚拟机运行时,viostor.sys驱动会与主机的虚拟化层协同工作,确保客户机操作系统能够像操作物理硬盘一样对虚拟硬盘进行读写操作。它是确保虚拟机磁盘I/O性能和兼容性的重要组件之一。

      文件版本号

      根据文件版本末尾编号是否小于5801158017,判断是否需要更新驱动。

      操作场景

      virtio版本

      操作

      在线扩容云盘

      大于等于58011

      可以直接在线扩容云盘,无需更新virtio驱动。具体操作,请参见步骤一:扩容云盘容量

      小于58011

      无法在线扩容,需继续执行后续操作更新virtio驱动

      查询序列号

      大于等于58017

      可以直接查看磁盘序列号,无需更新virtio驱动。具体操作,请参见查看磁盘序列号

      小于58017

      无法直接查询序列号,需继续执行后续操作更新virtio驱动

    说明

    您也可以登录云安全中心控制台,在漏洞公告列表中查看是否存在Windows virtio驱动BUG导致磁盘数据丢失风险更新漏洞,来判断是否需要更新virtio驱动。

    • 如果不存在该漏洞公告,说明您的阿里云账号下没有需要更新virtio驱动的Windows实例,无需再执行后续更新驱动操作。

    • 如果存在该漏洞公告:

      • 如果您的云安全中心版本支持检测并一键修复漏洞,按照界面提示修复漏洞即可,无需再执行后续更新驱动操作。更多信息,请参见查看和处理漏洞

      • 如果您的云安全中心版本仅支持检测漏洞,但不支持修复漏洞,您需要继续执行后续操作更新virtio驱动

  4. 更新virtio驱动。

    重要
    • 手动更新virtio驱动时涉及到网卡驱动的更新,因此会有约10秒左右的网络中断,可能对您的业务造成影响,请您提前做好风险评估和准备工作。

    • 如果ECS实例的数据盘数量较多,可能需要1~2分钟才能完成virtio驱动的更新。

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

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

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

    1. 远程连接待更新驱动的Windows实例。

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

    2. 在Windows实例中,下载用于更新virtio驱动的脚本。

      下载地址:InstallVirtIo.ps1

    3. 执行InstallVirtIo.ps1脚本更新virtio驱动。

      例如,您将脚本InstallVirtIo.ps1下载到了C:\test目录下。

      1. 打开C:\test文件夹。

        您需要打开InstallVirtIo.ps1的实际下载目录。

      2. 选中InstallVirtIo.ps1文件,单击鼠标右键,然后单击使用 PowerShell 运行

        执行脚本

        说明
        • 如果您当前Windows实例的登录用户为普通用户,需要以管理员权限执行脚本。如果是系统用户,则可以直接执行脚本。

        • 如果您在手动执行脚本时,系统提示您禁止执行脚本,则需要您先修改PowerShell的脚本执行策略。具体操作,请参见常见问题

    4. 脚本执行完成后,请重启Windows实例。重启实例后,virtio驱动更新才会生效。

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

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

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

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

      下载地址:请参见安装virtio驱动

    2. 220915.0953.0953_bin.zip安装包上传至Windows实例。

      具体操作,请参见上传或下载文件(Windows)

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

      安装方法,请参见安装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操作系统版本对应的文件夹。

      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实例中的网卡驱动。

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

      1. 打开Windows控制面板,在搜索控制面板文本框,输入设备管理器进行搜索。设备管理器

      2. 单击设备管理器,打开设备管理器。

      3. 单击网络适配器,然后右键单击Red Hat VirtIO Ethernet Adapter

      4. 单击卸载设备(U)卸载设备

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

        成功卸载后,设备管理器中将不再显示Red Hat VirtIO Ethernet Adapter

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

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

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

        cd C:\test\new_virtio\win10\amd64
      2. 在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 属性对话框,单击驱动程序页签,查看驱动信息。

        image

    8. 重启Windows实例。重启实例后,新版的驱动才会生效。

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

相关文档