

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

# 文件网关的最佳实践
<a name="best-practices"></a>

本节包含以下主题，这些主题提供有关使用网关、文件共享、存储桶和数据的最佳实践的信息。我们建议您自行熟悉本节中概述的信息，并尝试遵循这些指南，以避免 AWS Storage Gateway出现问题。有关诊断和解决您在部署中可能遇到的常见问题的更多指导，请参阅[排查 Storage Gateway 部署问题](troubleshooting-gateway-issues.md)。

**Topics**
+ [最佳实践：恢复数据](#recover-data-from-gateway)
+ [最佳实践：管理分段上传](#best-practices-managing-multi-part-uploads)
+ [最佳实践：在复制到网关之前，先在本地解压压缩文件](#best-practices-unzipping-on-gateway)
+ [从 Windows Server 复制数据时保留文件属性](#best-practices-copying-files-on-windows)
+ [最佳实践：合理调整缓存磁盘的大小](#proper-sizing-of-cache-disks)
+ [使用多个文件共享和 Amazon S3 存储桶](#prevent-multiple-writes)
+ [清理不必要的资源](#cleanup-file)

## 最佳实践：恢复数据
<a name="recover-data-from-gateway"></a>

虽然很少发生，但您的网关仍可能会遇到不可恢复的故障。这种故障可能在您的虚拟机 (VM)、网关本身、本地存储或其他位置发生。如果出现故障，我们建议您按照以下相应部分中的说明恢复您的数据。

**重要**  
Storage Gateway 不支持从虚拟机管理程序创建的快照或从 Amazon EC2 Amazon 系统映像 (AMI) 恢复网关 VM。如果您的网关 VM 出现故障，则激活新网关，然后根据以下说明将您的数据恢复到该网关。

### 从虚拟机意外关闭中恢复
<a name="recover-from-gateway-shutdown"></a>

如果您的 VM 意外关闭，例如在停电期间，您的网关会变得不可访问。当电力和网络连接恢复后，您的网关会变得能够访问并开始正常运行。下面是此时您能够采取的有助于恢复数据的一些步骤：
+ 如果断电导致网络连接问题，您可以进行对此问题进行排查。有关如何测试网络连接的信息，请参阅[测试网关的网络连接](MaintenanceTestGatewayConnectivity-fgw.md)。

### 从出现故障的缓存磁盘恢复您的数据
<a name="recover-from-cahe-disk"></a>

如果缓存磁盘出现故障，我们建议您根据具体情况采用以下步骤恢复数据：
+ 如果故障是因将缓存磁盘从您的主机中移除导致的，则关闭网关，重新添加该磁盘，然后重新启动网关。

### 从不可访问的数据中心恢复您的数据
<a name="disaster-recovery"></a>

如果您的网关或数据中心出于某种原因变得无法访问，您可将数据恢复到位于不同数据中心的另一个网关或在 Amazon EC2 实例上托管的网关。如果您无权访问另一个数据中心，则建议在 Amazon EC2 实例上创建网关。您要执行的步骤取决于您要从中恢复数据的网关类型。

**从无法访问的数据中心内的文件网关恢复数据**

对于 File Gateway，您可以将新的映射到包含要恢复的数据的 的 Amazon S3 存储桶FSx 。

1. 在 Amazon EC2 主机上创建并激活新的文件网关。有关更多信息，请参阅 [为 S3 文件网关部署默认 Amazon EC2 主机为 S3 文件网关部署自定义的 Amazon EC2 主机](ec2-gateway-file.md)。

1. 在创建的 EC2 网关上创建一个新的。有关更多信息，请参阅[创建文件共享](https://docs.aws.amazon.com/filegateway/latest/files3/GettingStartedCreateFileShare.html)。

1. 在客户端上安装您的文件共享，并将其映射到包含要恢复的数据的 的 S3 存储桶FSx 。有关更多信息，请参阅[挂载并使用文件共享](https://docs.aws.amazon.com/filegateway/latest/files3/getting-started-use-fileshare.html)。

## 最佳实践：管理分段上传
<a name="best-practices-managing-multi-part-uploads"></a>

传输大型文件时，S3 文件网关利用 Amazon S3 分段上传功能将文件拆分为较小的分段并行传输以提高效率。有关分段上传的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[使用分段上传操作上传和复制对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)。

如果由于任何原因未能成功完成分段上传，网关通常会停止传输，从 Amazon S3 中删除部分传输的所有文件片段，然后再次尝试传输。在极少数情况下（例如硬件或网络故障导致网关无法在分段上传失败后进行清理），部分传输的文件片段可能会保留在 Amazon S3 上，从而产生存储费用。

为更大限度地降低因未完成的分段上传而产生的 Amazon S3 存储成本，建议您配置 Amazon S3 存储桶生命周期规则，该规则使用 `AbortIncompleteMultipartUpload` API 操作自动终止失败的传输，并在指定天数后删除相关的文件分段。有关说明，请参阅《Amazon Simple Storage Service 用户指南》**中的[配置存储桶生命周期以删除未完成的分段上传](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html)。

## 最佳实践：在复制到网关之前，先在本地解压压缩文件
<a name="best-practices-unzipping-on-gateway"></a>

如果尝试解压存储在网关上的包含数千个文件的压缩存档，则可能会遇到严重的性能相关延迟。解压缩任何类型的网络文件共享上包含大量文件的存档的过程本质上涉及大量 input/output 操作、元数据缓存操作、网络开销和延迟。此外，Storage Gateway 无法确定存档中的每个文件何时完成解压，并可能在解压过程完成前就开始上传文件，这会进一步影响性能。当存档中的文件数量众多但体积很小时，这些问题会更加严重。

作为最佳实践，建议先将压缩的存档从网关传输到本地计算机，然后再解压。然后，如有必要，您可以使用诸如 *robocopy* 或 *rsync* 之类的工具将解压的文件传输回网关。

## 从 Windows Server 复制数据时保留文件属性
<a name="best-practices-copying-files-on-windows"></a>

在 Microsoft Windows 上使用基本 `copy` 命令可以将文件复制到文件网关，但是默认情况下，此命令仅复制文件数据，省略了某些文件属性，例如安全描述符。如果在没有相应的安全限制和自由访问控制列表（DACL）信息的情况下将文件复制到网关，则未经授权的用户也许可以访问这些文件。

将文件复制到 Microsoft Windows Server 上的网关时，最好保留所有文件属性和安全信息，建议分别使用带 `/copy:DS` 或 `/o` 标记的 `robocopy` 或 `xcopy` 命令。有关更多信息，请参阅 Microsoft Windows Server 命令参考文档中的 [robocopy](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy) 和 [xcopy](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/xcopy)。

## 最佳实践：合理调整缓存磁盘的大小
<a name="proper-sizing-of-cache-disks"></a>

为了获得最佳性能，磁盘缓存总大小必须足够大，以覆盖活动工作集的大小。对于读取密集型 read/write 工作负载和混合型工作负载，这可以确保读取时实现较高的缓存命中率，这是理想的。您可以通过 S3 文件网关的 `CacheHitPercent` 指标对此进行监控。

对于写入密集型工作负载（例如备份和存档），S3 文件网关会在将数据异步复制到 Amazon S3 之前，将传入的写入数据缓冲到磁盘缓存中。您应确保有足够的缓存容量来缓冲写入的数据。该`CachePercentDirty`指标显示了尚未持久化的磁盘缓存的百分比。 AWS

`CachePercentDirty` 的值越低，性能越好。持续接近 100% 的值表明 S3 文件网关无法跟上传入写入流量的速率。您可以通过增加预置磁盘缓存容量、增加 S3 文件网关到 Amazon S3 的专用网络带宽，或者两者都增加来避免这种情况。

有关缓存磁盘大小的更多信息，请参阅 [Amazon Web Services 官方 YouTube 频道上的 Amazon S3 文件网关缓存大小调整最佳实践](https://www.youtube.com/watch?v=-ibL1eEcROI)。

## 使用多个文件共享和 Amazon S3 存储桶
<a name="prevent-multiple-writes"></a>

当您将单个 Amazon S3 存储桶配置为允许多个网关或文件共享写入该存储桶时，结果可能无法预测。您可以通过以下两种方式之一配置存储桶，以避免出现不可预测的结果。请从以下选项中选择最适合您使用案例的配置方法：
+ 配置您的 S3 存储桶，以便只有一个文件共享可以写入每个存储桶。使用不同的文件共享写入每个存储桶。

  为此，请创建一个 S3 存储桶策略，禁止除特定文件共享所使用的角色之外的所有角色向该存储桶添加或删除对象。为每个存储桶附加类似的策略，为每个存储桶指定不同的文件共享以进行写入。

  以下示例策略拒绝除创建存储桶的角色之外的所有角色对 S3 存储桶的写入权限。将拒绝除 `s3:DeleteObject` 以外的所有角色的 `s3:PutObject` 和 `"TestUser"` 操作。该策略适用于 `"arn:aws:s3:::amzn-s3-demo-bucket/*"` 存储桶中的所有对象。

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

****  

  ```
  {
     "Version":"2012-10-17",		 	 	 
     "Statement":[
        {
           "Sid":"DenyMultiWrite",
           "Effect":"Deny",
           "Principal":"*",
           "Action":[
              "s3:DeleteObject",
              "s3:PutObject"
           ],
           "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*",
           "Condition":{
              "StringNotLike":{
                 "aws:userid":"TestUser:*"
              }
           }
        }
     ]
  }
  ```

------
+ 如果您确实希望多个文件共享写入同一 Amazon S3 存储桶，则必须阻止这些文件共享尝试同时写入同一对象。

  为此，请为每个文件共享配置一个单独、唯一的对象前缀。这意味着每个文件共享仅写入带有相应前缀的对象，而不会写入与部署中其他文件共享关联的对象。创建新的文件共享时，您可以在 **S3 前缀名称**字段中配置对象前缀。

## 清理不必要的资源
<a name="cleanup-file"></a>

作为最佳实践，建议清理 Storage Gateway 资源，以避免产生意外或不必要的费用。例如，如果您创建网关是为了演示练习或测试，请考虑将其及其虚拟设备从部署中删除。请执行以下步骤来清理资源。

**清除不需要的资源**

1. 如果您不再打算继续使用网关，请将其删除。有关更多信息，请参阅 [删除网关和移除关联的资源](deleting-gateway-common.md)。

1. 从本地主机中删除 Storage Gateway VM。如果您在 Amazon EC2 实例上创建了网关，请终止该实例。