更新Windows实例的virtio驱动

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

使用限制

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

操作步骤

步骤一:检查virtio驱动

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

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

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

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

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

    通过PowerShell查看

    1. 远程连接Windows实例。

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

    2. 打开运行对话框,输入powershell进入PowerShell命令行。

    3. 运行以下命令,查看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驱动

步骤二:更新virtio驱动

重要

在手动更新virtio驱动时,涉及到网卡驱动的更新,这将导致短暂的网络中断,可能对业务造成影响,因此请提前做好相应的准备。

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

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

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

  1. 远程连接Windows实例。

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

  2. 打开运行对话框,输入powershell进入PowerShell命令行。

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

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

  3. 运行以下命令,下载脚本:

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

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

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

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

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

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

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

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

  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. 执行命令面板的选择实例区域,选中需要更新驱动的实例ID。

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

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

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

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

          参数

          说明

          命令来源

          选择输入命令内容

          命令类型

          选择PowerShell

          命令内容

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

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

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

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

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

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

          执行计划

          选择立即执行

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

  5. 查看命令执行结果。

    您可以在命令执行结果页签查看命令的执行结果。执行结果信息如下图所示,表示该实例成功更新virtio驱动。云助手更新

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

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

常见问题

  • 问题一: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实例,使新版驱动生效。

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

相关文档