

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 解决 Snowball Edge 的数据传输问题
<a name="transfer-troubleshooting"></a>

如果在 Snowball Edge 中传入或传出数据时遇到性能问题，请参阅 [有关向 Snowball Edge 或从 Snowball Edge 传输数据的最佳性能的建议](BestPractices.md#performance)以获取有关改善传输性能的建议和指南。以下内容可帮助您解决在 Snowball Edge 中传入或传出数据时可能遇到的问题。
+ 您无法将数据传输到 Snowball Edge 的根目录。如果您在将数据传输到设备时遇到问题，请确保将数据传输到子目录。顶层子目录具有您在作业中包含的 Amazon S3 存储桶的名称。将您的数据放在这些子目录中。
+ 如果您使用的是 Linux 且无法将使用 UTF-8 字符的文件上传到 AWS Snowball Edge 设备，则可能是因为 Linux 服务器无法识别 UTF-8 字符编码。您可以通过在 Linux 服务器上安装 `locales` 程序包并将该服务器配置为使用 UTF-8 区域设置之一（例如 `en_US.UTF-8`）来更正这一问题。您可以通过导出环境变量 `LC_ALL` 来配置 `locales` 程序包，例如：`export LC_ALL=en_US.UTF-8`
+ 当您将 Amazon S3 界面与一起使用时 AWS CLI，可以处理名称中带空格的文件或文件夹，例如`my photo.jpg`或`My Documents`。但是，请确保正确处理空格。有关更多信息，请参阅《AWS Command Line Interface User Guide》**中的 [Specify parameter values for the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters.html)。

## 使用 Snowball Edge 解决导入任务问题
<a name="import-troubleshooting"></a>

有时，文件无法导入 Amazon S3 中。如果出现以下问题，请尝试指定的操作来解决您的问题。如果某个文件导入失败，您可能需要重新尝试导入该文件。重新导入文件可能需要 Snowball Edge 的新作业。

**由于对象名称中的字符无效，文件无法导入到 Amazon S3 中**  
如果文件名或文件夹名包含 Amazon S3 不支持的字符，则会出现此问题。Amazon S3 具有有关对象名称中可包含的字符的规则。有关更多信息，请参阅《Amazon S3 用户指南》中的[创建对象键名称](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html)。

**要采取的操作**  
如果您遇到此问题，您将在作业完成报告中看到无法导入的文件和文件夹的列表。

在某些情况下，此列表过大或列表中的文件太大，无法通过 Internet 进行传输。在这些情况下，您应创建一个新的 Snowball 导入作业，更改文件和文件夹名称以符合 Amazon S3 规则并重新传输文件。

如果文件很小且数量不多，则可以通过 AWS CLI 或将其复制到 Amazon S3 AWS 管理控制台。有关更多信息，请参阅*《Amazon Simple Storage Service 用户指南》*中的[如何将文件和文件夹上传到 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)。

## 使用 Snowball Edge 解决导出任务问题
<a name="export-troubleshooting"></a>

有时，文件无法导出到您的工作站中。如果出现以下问题，请尝试指定的操作来解决您的问题。如果某个文件导出失败，您可能需要重新尝试导出该文件。重新导出文件可能需要 Snowball Edge 的新作业。

**文件无法导出到 Microsoft Windows Server**  
如果文件或相关文件夹以 Windows 不支持的格式命名，则文件无法导出到 Microsoft Windows Server。例如，如果文件名或文件夹名包含冒号（`:`），则导出将失败，因为 Windows 不允许文件名或文件夹名包含该字符。

**要采取的操作**

1. 创建将导致错误的名称的列表。您可以在日志中查找无法导出的文件和文件夹的名称。有关更多信息，请参阅 [从 Snowball Edge 查看和下载日志](using-client-commands.md#logs)。

1. 更改 Amazon S3 中导致此问题的对象的名称以删除或替换不支持的字符。

1. 如果名称列表过大或列表中的文件过大，无法通过 Internet 进行传输，请为这些对象专门创建一个新的导出作业。

   如果文件很小且数量不多，请通过 AWS CLI 或从 Amazon S3 中复制重命名的对象 AWS 管理控制台。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[如何从 S3 存储桶下载对象？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)。

## 解决 Snowball Edge 的 NFS 接口问题
<a name="nfs-interface-troubleshooting"></a>

Snowball Edge 可能表明 NFS 接口的状态为。`DEACTIVATED`如果 Snowball Edge 在没有事先停止 NFS 接口的情况下关闭了电源，则可能会发生这种情况。

**要采取的操作**  
要解决该问题，请使用以下步骤停止并重新启动 NFS 服务。

1. 使用 `describe-service` 命令确定服务的状态：

   ```
   snowballEdge describe-service --service-id nfs
   ```

    命令将返回以下内容。

   ```
   {
     "ServiceId" : "nfs",
     "Status" : {
     "State" : "DEACTIVATED"
     }
   }
   ```

1. 使用 `stop-service` 命令停止 NFS 服务。

   ```
   snowballEdge stop-service --service-id nfs
   ```

1. 使用 `start-service` 命令启动 NFS 服务。有关更多信息，请参阅[管理 NFS 接口](https://docs.aws.amazon.com/snowball/latest/developer-guide/shared-using-nfs.html)。

   ```
   snowballEdge start-service  --virtual-network-interface-arns vni-arn --service-id nfs  --service-configuration  AllowedHosts=0.0.0.0/0
   ```

1. 使用 `describe-service` 命令确保服务正在运行。

   ```
   snowballEdge describe-service --service-id nfs
   ```

   如果 `State` 名称的值为 `ACTIVE`，则表示 NFS 接口服务处于活动状态。

   ```
   {
    "ServiceId" : "nfs",
    "Status" : {
    "State" : "ACTIVE"
    },
    "Endpoints" : [ {
    "Protocol" : "nfs",
    "Port" : 2049,
    "Host" : "192.0.2.0"
    } ],
    "ServiceConfiguration" : {
    "AllowedHosts" : [ "10.24.34.0/23", "198.51.100.0/24" ]
    }
   }
   ```

## 对使用 S3 接口传输数据时出现的访问被拒绝错误进行故障排除
<a name="access-denied-s3"></a>

使用 S3 接口向 Snowball Edge 设备传输数据或从 Snowball Edge 设备传输数据时，您可能会遇到拒绝访问错误。此错误可能是 IAM 用户或存储桶策略造成的。

**要采取的操作**

1. 检查您正在使用的 S3 存储桶的策略是否存在以下语法问题。

   1. 如果该策略仅允许在传递 KMS 标头后上传数据，请确保该策略指定委托人 ARN 而不是用户 ID。以下示例显示了正确的语法。

      ```
          {
          "Sid": "Statement3",
          "Effect": "Deny",
          "Principal": "*",
          "Action": "s3:PutObject",
          "Resource": "{{arn:aws:s3:::amzn-s3-demo-bucket/*}}",
          "Condition": {
              "StringNotLike": {
                  "aws:PrincipalArn": "{{arn:aws:iam::111122223333:role/JohnDoe}}"
              },
              "StringNotEquals": {
                  "s3:x-amz-server-side-encryption": [
                      "aws:kms",
                      "AES256"
                  ]
              }
          }
      },
      {
          "Sid": "Statement4",
          "Effect": "Deny",
          "Principal": "*",
          "Action": "s3:PutObject",
          "Resource": "{{arn:aws:s3:::amzn-s3-demo-bucket/*}}",
          "Condition": {
              "StringNotLike": {
                  "aws:PrincipalArn": "{{arn:aws:iam::111122223333:role/JohnDoe}}"
              },
              "Null": {
                  "s3:x-amz-server-side-encryption": "true"
              }
          }
      }
      ```

   1. 如果存储桶策略仅在传递了正确的标头后才允许上传到存储桶，则默认情况下，从 Snowball Edge 设备上传的内容不会传递任何标头。修改策略以允许用于上传数据的 IAM 用户例外。以下是正确语法的示例。

      ```
      {
          "Sid": "Statement3",
          "Effect": "Deny",
          "Principal": "",
          "Action": "s3:PutObject",
          "Resource": "{{arn:aws:s3:::amzn-s3-demo-bucket/}}",
          "Condition": {
              "StringNotEquals": {
                  "s3:x-amz-server-side-encryption": "AES256"
              },
              "StringNotLike": {
                  "aws:PrincipalArn": "{{arn:aws:iam::111122223333:role/JohnDoe}}"
              }
          }
      },
      {
          "Sid": "Statement4",
          "Effect": "Deny",
          "Principal": "",
          "Action": "s3:PutObject",
          "Resource": "{{arn:aws:s3:::amzn-s3-demo-bucket/}}",
          "Condition": {
              "Null": {
                  "s3:x-amz-server-side-encryption": "true"
              },
              "StringNotLike": {
                  "aws:PrincipalArn": "{{arn:aws:iam::111122223333:role/JohnDoe}}"
              }
          }
      }
      ```

1. 检查您正在使用的 KMS 密钥的策略，以了解主体元素中的语法是否正确。参见下面的示例显示了正确的语法。

   ```
   {
       "Sid": "Statement2",
       "Effect": "Allow",
       "Principal": {
           "AWS": [
               "arn:aws:iam::111122223333:role/service-role/JohnDoe"
           ]
       },
       "Action": [
           "kms:Encrypt",
           "kms:Decrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey*",
           "kms:DescribeKey"
       ],
       "Resource": "*"
   }
   ```

## 使用 S3 接口传输数据时出现 403 禁止错误进行故障排除
<a name="403-error-s3"></a>

使用 S3 接口向 Snowball Edge 设备传输数据或从 Snowball Edge 设备传输数据时，您可能会遇到 403 禁止错误。此错误可能是 IAM 用户或存储桶策略造成的。检查您正在使用的 S3 存储桶的策略是否存在以下语法问题。

**要采取的操作**

1. 该政策未提供 PrincipalArn. 以下面的策略为例，使用 aws: PrincipalArn 标头并提供不带标头的 IAM 角色 ARN。`:*`

------
#### [ JSON ]

****  

   ```
           {
       "Version": "2012-10-17",
       "Statement": [{
               "Sid": "DenyIncorrectEncryptionHeader",
               "Effect": "Deny",
               "Principal": "*",
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::BucketName/*",
               "Condition": {
                   "StringNotLike": {
                       "aws:PrincipalArn": "arn:aws:iam::1234567890:role/RoleName"
                   },
                   "StringNotEquals": {
                       "s3:x-amz-server-side-encryption": [
                           "aws:kms",
                           "AES256"
                       ]
                   }
               }
           },
           {
               "Sid": "DenyUnEncryptedObjectUploads",
               "Effect": "Deny",
               "Principal": "*",
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
               "Condition": {
                   "StringNotLike": {
                       "aws:PrincipalArn": "arn:aws:iam::1234567890:role/RoleName"
                   },
                   "Null": {
                       "s3:x-amz-server-side-encryption": "true"
                   }
               }
           },
           {
               "Sid": "DenyInsecureTransport",
               "Effect": "Deny",
               "Principal": "*",
               "Action": "s3:*",
               "Resource": [
                   "arn:aws:s3:::BucketName/*",
                   "arn:aws:s3:::BucketName"
               ],
               "Condition": {
                   "Bool": {
                       "aws:SecureTransport": "false"
                   }
               }
           },
           {
               "Sid": "AllowSnowballPutObjectAccess",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::1234567890:role/RoleName"
               },
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::BucketName/*"
           }
       ]
   }s
   ```

------

1. 如果 KMS 策略使用不正确的 IAM 角色格式，则可能会出现 403 错误。修改策略以允许用于上传数据的 IAM 用户例外。以下是正确语法的示例。

   ```
   {{
               "Sid": "Allow use of the key",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::1234567890:role/service-role/RoleName"
                   ]
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:GenerateDataKey*"
               ],
               "Resource": "*"
           }
   ```

1. IAM 角色可能需要绕过加密标头条件。默认情况下，存储在 Snowball Edge 设备上的所有对象都使用 SSE-S3 加密进行加密。使用以下策略为 IAM 角色提供例外情况，允许其上传不带加密标头的对象。

------
#### [ JSON ]

****  

   ```
   {
       "Version": "2012-10-17",
       "Id": "PutObjPolicy",
       "Statement": [{
               "Sid": "DenyIncorrectEncryptionHeader",
               "Effect": "Deny",
               "Principal": "*",
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::BucketName/",
               "Condition": {
                   "StringNotEquals": {
                       "s3:x-amz-server-side-encryption": "AES256"
                   },
                   "StringNotLike": {
                       "aws:PrincipalArn": "arn:aws:iam::1234567890:role/RoleName"
                   }
               }
           },
           {
               "Sid": "DenyUnEncryptedObjectUploads",
               "Effect": "Deny",
               "Principal": "*",
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::BucketName/*",
               "Condition": {
                   "Null": {
                       "s3:x-amz-server-side-encryption": "true"
                   },
                   "StringNotLike": {
                       "aws:PrincipalArn": "arn:aws:iam::1234567890:role/RoleName"
                   }
               }
           }
       ]
   }
   ```

------

1. 错误消息表示访问被拒绝，无法 PutObject NotPrincipal 使用 IP 条件。为 Snowball Edge IAM 角色添加一个例外，如下所示。

------
#### [ JSON ]

****  

   ```
         {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Sid": "Statement1",
               "Effect": "Deny",
               "NotPrincipal": {
                   "AWS": [
                       "IAMRole"
                   ]
               },
               "Action": [
                   "s3:PutObject",
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::BucketName/*",
                   "arn:aws:s3:::BucketName"
               ],
               "Condition": {
                   "NotIpAddress": {
                       "aws:SourceIp": [
                           "IPAddress"
                       ]
                   },
                   "StringNotEquals": {
                       "aws:PrincipalArn": "arn:aws:iam::1234567890:role/RoleName"
                   }
               }
           }
       ]
   }
   ```

------