对基于 Windows VSS 的 EBS 快照进行问题排查 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

对基于 Windows VSS 的 EBS 快照进行问题排查

在尝试任何其他故障排除步骤之前,我们建议您验证以下详细信息。

检查日志文件

如果您在创建启用了 VSS 的 EBS 快照时遇到问题或收到错误消息,可以在 Systems Manager 控制台中查看命令输出。

对于可创建 VSS 快照的 Systems Manager 文档,可在运行时将 CollectDiagnosticLogs 参数设置为“True”。当 CollectDiagnosticLogs 参数设置为“True”时,VSS 会收集其他日志以帮助调试。有关更多信息,请参阅 收集其他诊断日志

如果您收集诊断日志,Systems Manager 文档会将其存储在实例的以下位置:C:\ProgramData\Amazon\AwsVss\Logs\timestamp.zipCollectDiagnosticLogs 参数的默认值为“False”。

注意

有关调试的其他帮助,可将 .zip 文件发送到 Amazon Web Services Support。

无论您是否收集诊断日志,以下其他日志均可访问:

  • %ProgramData%\Amazon\SSM\InstanceData\InstanceID\document\orchestration\SSMCommandID\awsrunPowerShellScript\runPowerShellScript\stdout

  • %ProgramData%\Amazon\SSM\InstanceData\InstanceID\document\orchestration\SSMCommandID\awsrunPowerShellScript\runPowerShellScript\stderr

您还可以打开事件查看器 Windows 应用程序,然后选择 Windows 日志应用程序以查看其他日志。要专门查看来自 EC2 Windows VSS 提供程序和卷影复制服务的事件,请根据条款 Ec2VssSoftwareProviderVSS进行筛选。

如果您将 Systems Manager 与 VPC 端点结合使用,并且 Systems Manager SendCommand API 操作(控制台中的 Run Command)失败,请确认您是否正确配置了如下端点:com.amazonaws.region.ec2

如果没有定义 Amazon EC2 端点,枚举附加的 EBS 卷的调用将会失败,进而导致 Systems Manager 命令失败。有关使用 Systems Manager 设置 VPC 终端节点的更多信息,请参阅 Amazon Systems Manager 用户指南中的创建 Virtual Private Cloud 终端节点

收集其他诊断日志

要在通过 Systems Manager 发送命令以运行 VSS 快照文档时收集其他诊断日志,请在运行时将 CollectDiagnosticLogs 输入参数设置为“True”。建议您在排查问题时将该参数设置为“True”。

要查看命令行示例,请选择以下选项卡之一。

Amazon CLI

以下示例将在 Amazon CLI 中运行 AWSEC2-CreateVssSnapshot Systems Manager 文档:

aws ssm send-command \ --document-name "AWSEC2-CreateVssSnapshot" \ --instance-ids "i-1234567890abcdef0" \ --parameters '{"description":["Example - create diagnostic logs at runtime."],"tags":["Key=tag_name,Value=tag_value"],"CollectDiagnosticLogs":["True"]}'
PowerShell

以下示例将在 PowerShell 中运行 AWSEC2-CreateVssSnapshot Systems Manager 文档:

Send-SSMCommand -DocumentName AWSEC2-CreateVssSnapshot -InstanceId "i-1234567890abcdef0" -Parameter @{'description'='Example - create diagnostic logs at runtime.';'tags'='Key=tag_name,Value=tag_value';'CollectDiagnosticLogs'='True'}

在已配置代理的实例上使用 VSS

如果在使用代理访问 EC2 端点的实例上创建启用 VSS 的 EBS 快照时遇到问题,请确保以下几点:

  • 已配置代理,以便以 SYSTEM 身份运行的 Amazon Tools for Windows PowerShell 可以访问实例区域和 IMDS 中的 EC2 服务端点。

  • 已安装 2.0.1 或更高版本的 AwsVssComponents。从 AwsVssComponents 2.0.1 版本开始,EC2 VSS 提供商支持使用系统配置的 WinHTTP 代理。有关配置 WinHTTP 代理的更多信息,请参阅 Microsoft 网站上的 Windows 超文本传输协议(WINHTTP)的 Netsh 命令

错误:解冻管道连接超时、解冻时出错、等待 VSS 冻结超时或其他超时错误

EC2 Windows VSS 提供程序可能会由于实例上的活动或服务阻止启用了 VSS 的快照及时继续而超时。Windows VSS 框架提供了一个不可配置的 10 秒钟窗口,在此期间暂停与文件系统的通信。在此期间,对卷执行 AWSEC2-CreateVssSnapshot 快照。

以下问题可能会导致 EC2 Windows VSS Provider 在快照期间受到时间限制:

  • 对卷的 I/O 过多

  • 实例上 EC2 API 的响应速度缓慢

  • 片段化的卷

  • 与某些杀毒软件不兼容

  • VSS 应用程序编写者的问题

  • 当为大量 PowerShell 模块启用模块日志记录时,这样可能会导致 PowerShell 脚本运行缓慢

运行 AWSEC2-CreateVssSnapshot 命令文档时出现的大多数超时问题,与备份时实例上的工作负载过高有关。以下操作可以帮助您成功拍摄快照:

  • 重试 AWSEC2-CreateVssSnapshot 命令以查看快照尝试是否成功。如果在某些情况下重试成功,减少实例负载可能会使快照成功几率更高。

  • 等待片刻,让实例上的工作负载减少,然后重试该 AWSEC2-CreateVssSnapshot 命令。或者,当已知实例处于低压力时,您也可以尝试拍摄快照。

  • 在系统上的杀毒软件关闭时尝试拍摄 VSS 快照。如果这样解决了问题,请参阅杀毒软件说明并将其配置为允许 VSS 快照。

  • 如果在运行快照的同一区域内的账户中有大量 Amazon EC2 API 调用,则 API 节流可能会延迟快照操作。要降低节流的影响,请使用最新的 AwsVssComponents 软件包(版本 2.1.0 及更高版本,且具有先决权限)。该软件包利用 EC2 CreateSnapshots API 操作来减少变更操作的数量,例如按卷创建快照和标记。

  • 如果同时运行多个 AWSEC2-CreateVssSnapshot 命令脚本,则可以采取以下步骤来减少并发问题。

    • 考虑在 API 活动较低的时段安排快照。

    • 如果在 Systems Manager 控制台中(或 API SendCommand 中)使用 Run Command 来运行命令脚本,则可以使用 Systems Manager 速率控制来减少并发。

      还可以使用 Systems Manager 速率控制,来减少诸如 Amazon Backup 等服务(使用 Systems Manager 运行命令脚本)的并发。

  • 在 Shell 中运行命令 vssadmin list writers,看它是否在系统上任何写入程序的最后一个错误字段中报告任何错误。如果有写入程序报告超时错误,请考虑在实例负载较小时重新拍摄快照。

  • 当使用较小的实例类型(例如,t2 | t3 | t3a.nano 或 t2 | t3 | t3a.micro)时,可能会由于内存和 CPU 限制而出现超时。以下操作可能有助于减少超时问题。

    • 在拍摄快照之前,请尝试关闭内存或 CPU 密集型应用程序。

    • 尝试在实例活动较低的时段拍摄快照。

错误:无法调用方法。在此语言模式下,仅核心类型支持方法调用。

PowerShell 语言模式未设置为 FullLanguage 时,会发生此错误。AWSEC2-CreateVssSnapshotAWSEC2-ManageVssIo SSM 文档要求将 PowerShell 配置为 FullLanguage 模式。

要验证语言模式,请在 PowerShell 控制台中的实例上运行以下命令:

$ExecutionContext.SessionState.LanguageMode

有关语言模式的更多信息,请参阅 Microsoft 文档中的 about_Language_Modes