你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

IoT 中心设备更新故障排除指南

本文档列出了设备更新用户报告的一些常见问题和问题。 如果遇到此故障排除指南中未出现的问题,请参阅 “联系Microsoft支持 ”部分来记录你的情况。

导入更新

问:我成功导入了更新,但更新未显示为可供部署——即使对理应兼容的设备也是如此

仔细检查导入清单 .json 文件没有任何意外错误,尤其是在 兼容性对象 值中。 导入清单中的兼容性属性必须与设备报告的属性完全匹配,这可确保始终将正确的更新发送到正确的设备。 例如,导入清单中可能存在拼写错误,导致兼容性属性与设备报告的内容相比缺少、转置或额外字符。 如果是这样,IoT 中心服务的设备更新与该设备的更新不匹配。 如果已导入更新,可以通过单击该更新的“详细信息”链接,然后单击右侧浮出菜单中的“其他详细信息”,快速检查兼容性属性的问题。 在此处,可以查看该更新的导入清单 JSON 内容,并识别任何潜在的错误。

问:将设备更新实例连接到 IoT 中心实例时遇到问题

确保根据 设备更新资源 文档正确配置 IoT 中心消息路由。

可能无法正确配置访问权限。 确保根据 设备更新访问控制 文档正确配置访问权限。

问:将内容导入设备更新服务时遇到 500 类型错误

500 范围内的错误代码可能表示设备更新服务出现问题。 等待 5 分钟,然后重试。 如果仍然出现相同的错误,请按照 “联系 Microsoft 支持” 部分中的说明向 Microsoft 提交支持请求。

问:我想保留相同的兼容性属性(以更新为相同的设备类型为目标),但更改导入清单中的提供程序或名称。 但是当我这样做时,我收到错误"失败: 由于超出限制,导入更新时出错"

同一组完全相同的兼容性属性不能与多个更新提供程序和名称组合一起使用。 此策略允许设备更新服务确定哪些更新应可用于部署到给定设备。 如果需要在单个设备上更新多个组件或分区, 代理更新 功能可提供该功能。

问:导入内容时遇到错误消息,想要了解其详细信息

有关导入相关错误消息的更多详细信息,请参阅 设备更新错误代码 文档。

设备故障

问:如何确保我的设备已连接到 IoT 中心的设备更新?

可以通过检查设备是否显示在 Azure 门户符合性视图中的“未组合”设备部分下,来验证设备是否已连接到设备更新。

问:我的一个或多个设备无法更新

设备更新失败存在许多可能的根本原因。 验证设备是否:1)连接到您的 IoT 中心实例,2)连接到您的设备更新实例,3)传递优化(DO)服务正在运行。 如果这三个条件都适用于您的设备,请按照“联系 Microsoft 支持”部分中的说明向 Microsoft 提交支持请求。

问:我的设备更新代理无法启动

设备更新代理启动失败的最常见原因之一是格式不正确的配置文件(du-config.json)。 请参阅 配置文件文档 并确保代理配置正确。 配置文件中的所有值都必须使用双引号。

部署更新

问:我已将更新部署到我的设备,但符合性状态显示它不在最新更新中。 我该怎么办?

设备符合性状态可能需要长达 5 分钟才能刷新。

问:我的设备的部署状态显示不兼容,我该怎么办?

将设备连接到 IoT 中心后,目标设备的制造商和型号属性可能已更改,导致设备现在被视为与当前部署的更新内容不兼容。

检查 ADU 核心接口 ,查看设备向设备更新服务报告的制造商和型号。 请确保它与要部署的更新内容的 导入清单 中指定的制造商和型号匹配。 可以使用 设备更新配置文件更改给定设备的这些属性。

问:看到部署处于“活动”阶段,但没有任何设备“正在进行”更新。 我该怎么办?

请确保部署的开始日期是否未设置为将来的日期。 创建新部署时,部署开始日期默认设置为第二天,除非您显式更改它,作为一种安全措施。 你可等待部署开始日期到来,也可取消正在进行的部署,并创建具有所需开始日期的新部署。

问:我正在尝试对设备进行分组,但在创建组时,我看不到下拉列表中的标记

确保根据 设备更新资源 文档正确配置 IoT 中心的消息路由。 配置路由后,必须再次对设备进行标记。

另一个根本原因可能是你在将设备连接到 IoT Hub 的设备更新之前应用了标签。 确保设备已连接到设备更新。 您可以通过检查设备在符合性视图中是否显示在“未组合”设备下,来验证您的设备是否已连接到 IoT 中心的设备更新程序。 暂时添加不同值的标记,然后在设备连接后再次添加预期标记。

如果使用设备预配服务(DPS),请确保在预配设备后标记设备,而不是在设备创建过程中标记设备。 如果在设备创建步骤中已标记设备,则必须在预配设备后临时使用其他值标记设备,然后再次添加预期标记。

问:我的部署已成功完成,但某些设备无法更新

此条件可能是由失败设备上的客户端错误引起的。 请参阅本故障排除指南中的“设备故障”部分。

问:尝试启动部署时,在 UX 中遇到错误

此条件可能是由服务/UX bug 或 API 权限问题引起的。 按照 “联系Microsoft支持 ”部分中的说明,通过Microsoft提交支持请求。

问:我启动了部署,但它未达到最终状态

此条件可能是由服务性能问题、服务 bug 或客户端 bug 引起的。 10 分钟后重试部署。 如果遇到相同的问题,请拉取设备日志,并参阅本故障排除指南中的“设备故障”部分。 如果仍然存在相同的问题,请按照 “联系Microsoft支持 ”部分中的说明,向Microsoft提交支持请求。

问:我从设备级代理迁移到将代理添加为设备上的模块标识。 现在,我的更新显示为“正在进行中”,虽然它已经应用到设备上。

如果未删除通过设备孪生通信的较旧代理,则可能会出现此情况。 将设备更新代理预配为模块 (了解如何),设备与设备更新服务之间的所有通信都通过模块孪生进行。 请记住在创建 时标记设备的模块孪生,并且所有 通信 都必须通过模块孪生进行。

将更新下载到设备上

问:当设备在断开连接一段时间后重新连接时,如何恢复下载?

在 24 小时内还原连接时,下载将自行恢复。 24 小时后,用户需要重新初始化下载。

使用Microsoft连接缓存 (MCC)

问:尝试在 IoT Edge 设备上部署 MCC 模块时遇到问题

请参阅 IoT Edge 文档 ,了解如何将 Edge 模块部署到 IoT Edge 设备。 可以通过导航到 http://localhost:5100/Summary.,检查 MCC 模块是否在 IoT Edge 设备上成功运行

问:我的一个 IoT 设备正在尝试通过 MCC 下载更新,但失败

有几个问题可能导致 IoT 设备在连接到 MCC 时失败。 若要诊断问题,请从失败的设备收集 DO 客户端和 Nginx 日志(请参阅 “联系Microsoft支持 ”部分,获取有关收集客户端日志的说明)。

设备可能无法从Internet拉取内容并传递到其MCC模块,因为它使用的URL不被允许。 通过在 Azure 门户中检查 IoT Edge 环境变量来确认这一点。

排查 Azure 门户中缺少的实例的问题

问:当我选择“齿轮”图标时,看不到 IoT 中心的设备更新实例。

此问题有一些可能的原因。 有关故障排除步骤,请参阅下文。

设备更新实例需要与同一资源组和订阅中的 Azure IoT 中心相关联。 如果将设备更新实例或中心移动到其他资源组或订阅,则可能在 Azure 门户中看不到实例。 如果是这样,请执行以下步骤之一,以便继续使用 IoT 中心的设备更新:

  • 将移动的项目返回到其原始配置。

  • 如果仅将 IoT 中心从一个资源组移动到另一个资源组,请使用 IoT 中心的新 resourceId 修改设备更新实例。

  • 如果将项从一个订阅移动到另一个订阅,请确保设备更新帐户和 IoT 中心位于同一订阅中,然后使用 IoT 中心的新 resourceId 修改设备更新实例。

若要通过 Azure 门户中的 IoT 中心体验访问设备更新功能,至少需要 IoT 中心和 IoT 中心帐户的读取级别权限。

  • 若要管理 IoT 中心的权限,请执行以下作:
    • 从 Azure 门户选择你的中心
    • 从左侧导航栏中选择“访问控制(IAM)。
    • 选择“添加角色分配”。
    • 选择至少具有读取访问权限的角色,然后选择“下一步”。
    • 在“成员”旁边,选择“+选择成员”。
    • 在右侧浮出控件中添加帐户,然后选择“选择”按钮。
    • 选择“查看 + 分配”。
  • 若要管理适用于 IoT 中心帐户的设备更新的权限,请让帐户的所有者执行以下步骤:
    • 从 Azure 门户选择设备更新帐户。
    • 从左侧导航栏中选择“访问控制(IAM)。
    • 选择“添加角色分配”。
    • 选择“读取者”角色(或具有等效权限的读者角色)。
    • 在“成员”旁边,选择“+选择成员”。
    • 在右侧浮出控件中添加帐户,然后选择“选择”按钮。
    • 选择“查看 + 分配”。

详细了解设备更新服务的 基于角色的访问控制

联系Microsoft支持部门

如果遇到无法使用此页面上的内容解决的问题,可以通过 Azure 门户界面向Microsoft支持部门提交支持请求。 根据你指示问题所属的类别,可能会要求你收集和共享更多数据,以帮助Microsoft支持调查你的问题。

有关如何收集每种数据类型的说明,请参阅本节中的剩余文本。

可以使用 getDevice 检查 API 的有效负载响应中的其他信息。

如果可能,还包含以下信息,因为它可用于缩小问题的根本原因:

  • 尝试更新的设备类型(IoT Edge 网关,其他)
  • 你正在使用的设备更新客户端类型(基于映像、基于包、模拟器)
  • 设备正在运行的 OS
  • 有关设备体系结构的详细信息
  • 是否已成功使用设备更新功能来更新设备

收集客户端日志

  • 在 Raspberry Pi 设备上,此处提供了两组日志:
/adu/logs
/var/cache/do-client-lite/log
  • 对于打包的客户端,可在此处找到日志:
/var/log/adu
/var/cache/do-client-lite/log
  • 对于模拟器,可以在以下位置找到日志:
/tmp/aduc-logs

错误代码

报告与导入更新、设备故障或部署更新相关的问题时,可能会要求你提供错误代码。

可以通过查看 ADUCoreInterface 接口来获取错误代码。 有关如何分析用于自我诊断和故障排除的错误代码的信息,请参阅 设备更新错误代码 文档。

跟踪 ID

报告与导入或部署更新相关的问题时,系统可能会要求你提供跟踪 ID。

可以在 API 响应中找到给定用户作的跟踪 ID,也可以在 Azure 门户用户界面的“导入历史记录”部分中找到。

目前,部署操作的跟踪 ID 仅可通过 API 响应获取。

部署识别号

报告与部署更新相关的问题时,可能会要求你提供部署 ID。

在调用 API 以启动部署时,用户会创建部署 ID。

目前,从 Azure 门户用户界面启动的部署的部署 ID 是自动生成的,不会显示给用户。

IoT 中心实例名称

报告与设备故障或部署更新相关的问题时,可能会要求你提供 IoT 中心实例的名称。

首次预配时,用户会选择 IoT 中心名称。

设备更新帐户名称

报告与导入更新、设备故障或部署更新相关的问题时,系统可能会要求你提供设备更新帐户的名称。

首次注册服务时,用户会选择设备更新帐户名称。 可以在 设备更新资源 文档中找到详细信息。

设备更新实例名称

报告与导入更新、设备故障或部署更新相关的问题时,系统可能会要求你提供设备更新实例的名称。

首次预配时,用户会选择设备更新实例名称。 可以在 设备更新资源 文档中找到详细信息。

设备识别码

报告与设备故障或部署更新相关的问题时,可能会要求你提供设备 ID。

首次预配设备时,客户定义设备 ID。 此外,也可以从设备的设备孪生中检索它。

更新 ID

报告与部署更新相关的问题时,可能会要求你提供更新 ID。

启动部署时,客户定义更新 ID。

Nginx 日志

报告与Microsoft连接缓存相关的问题时,系统可能会要求你提供 Nginx 日志。

ADU-conf.txt

报告与部署更新相关的问题时,可能会要求你提供设备更新配置文件(“adu-conf.txt”)。

配置文件是可选的,由用户按照 设备更新配置 文档中的说明创建。

导入清单

报告与导入或部署更新相关的问题时,可能会要求你提供导入清单文件。

导入清单是客户在将更新内容导入设备更新服务时创建的文件。

后续步骤

详细了解设备更新错误代码