

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

# 从数据存储库导入更改
<a name="importing-files-dra"></a>

您可以将对数据和 POSIX 元数据的更改从链接的数据存储库导入到您的 Amazon FSx 文件系统。关联的 POSIX 元数据包括所有权、权限和时间戳。

要将更改导入文件系统，请使用以下其中一种方法：
+ 配置您的文件系统，以便自动从链接的数据存储库中导入新的、已更改或已删除的文件。有关更多信息，请参阅 [自动从 S3 存储桶导入更新。](autoimport-data-repo-dra.md)。
+ 在创建数据存储库关联时，选择用于导入元数据的选项。这将在数据存储库关联创建后立即启动导入数据存储库任务。
+ 使用按需导入数据存储库任务。有关更多信息，请参阅 [使用数据存储库任务导入更改](import-data-repo-task-dra.md)。

自动导入和导入数据存储库任务可以同时运行。

为数据存储库关联启用自动导入后，当您在 S3 中创建、修改或删除对象时，您的文件系统会自动更新文件元数据。当您在创建数据存储库关联时选择用于导入元数据的选项时，您的文件系统将导入数据存储库中所有对象的元数据。当您使用导入数据存储库任务导入时，您的文件系统仅导入自上次导入以来创建或修改的对象的元数据。

FSx for Lustre 会自动从您的数据存储库中复制文件内容，并在应用程序首次访问文件系统中的文件时将其加载到文件系统中。此数据移动由 FSx for Lustre 管理，并且对您的应用程序是透明的。直接从文件系统后续读取这些文件，延迟为亚毫秒。

您还可以预加载整个文件系统或文件系统中的目录。有关更多信息，请参阅 [将文件预加载到文件系统](preload-file-contents-hsm-dra.md)。如果您请求同时预加载多个文件，For Lustre 会并行加载您的 Amazon S3 数据存储库中的文件。 FSx 

FSx for Lustre 仅导入具有兼容 POSIX 的对象密钥的 S3 对象。自动导入和导入数据存储库任务都会导入 POSIX 元数据。有关更多信息，请参阅 [针对数据存储库的 POSIX 元数据支持](posix-metadata-support.md)。

**注意**  
FSx for Lustre 不支持从 S3 Glacier 灵活检索和 S3 Glacier Deep Archive Deep Archive 存储类中导入符号链接（符号链接）的元数据。可以导入不是符号链接的 S3 Glacier 灵活检索或 S3 Glacier Deep Archive 对象的元数据（也就是说，使用正确的元数据在 for Lustre 文件系统上创建索引节点）。 FSx 但是，要从文件系统读取这些数据，您必须先恢复 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 对象。不支持将文件数据直接从 S3 Glacier 灵活检索或 S3 Glacier Deep Archive Deep Archive 存储类中的 Amazon S3 对象导入 FSx for Lustre。

# 自动从 S3 存储桶导入更新。
<a name="autoimport-data-repo-dra"></a>

您可以将 Lustre 配置 FSx 为在向 S3 存储桶中添加、更改对象或从中删除对象时自动更新文件系统中的元数据。 FSx for Lustre 创建、更新或删除与 S3 中的更改相对应的文件和目录列表。如果 S3 存储桶中已更改的对象不再包含其元数据， FSx 则 for Lustre 将保留该文件的当前元数据值，包括当前权限。

**注意**  
f FSx or Lustre 文件系统和链接的 S3 存储桶必须位于同一存储桶中， AWS 区域 才能自动导入更新。

您可以在创建数据存储库关联时配置自动导入，也可以随时使用 FSx 管理控制台 AWS CLI、或 AWS API 更新自动导入设置。

**注意**  
您可以在同一数据存储库关联上同时配置自动导入和自动导出。本主题仅介绍自动导入功能。

**重要**  
如果您在 S3 中修改某个对象，同时启用所有自动导入策略并禁用自动导出，则该对象的内容将始终导入文件系统中的相应文件。如果目标位置已存在文件，则该文件将被覆盖。
如果同时在文件系统和 S3 中修改文件，并且启用所有自动导入和自动导出策略，则文件系统中的文件或 S3 中的对象可能被其他文件或对象覆盖。无法保证某个位置更晚的编辑会覆盖其他位置更早的编辑。如果您修改文件系统和 S3 存储桶中的同一个文件，则应确保应用程序级别的协调以防止此类冲突。 FSx for Lustre 并不能防止在多个位置发生冲突的写入。

导入策略指定了当链接 FSx 的 S3 存储桶中的内容发生变化时，Lustre 如何更新文件系统。数据存储库关联可能具有下面其中一种导入策略：
+ **新**增- FSx 仅当向链接的 S3 数据存储库添加新对象时，for Lustre 才会自动更新文件和目录元数据。
+ **已更改**- FSx 仅当数据存储库中的现有对象发生更改时，for Lustre 才会自动更新文件和目录元数据。
+ **已删除**-f FSx or Lustre 仅在删除数据存储库中的对象时才会自动更新文件和目录的元数据。
+ 当 S3 数据存储库中发生@@ **任何指定操作时，“新建”、“已更改” 和 “已删除” — FSx for Lustre 的任意组合**都会自动更新文件和目录元数据。例如，您可以指定在 S3 存储库中添加对象（**新**）或从 S3 存储库中删除对象（**已删除**）时更新文件系统，但在更改对象时不更新文件系统。
+ **未配置策略 — FSx 在** S3 数据存储库中添加对象、更改对象或从中删除对象时，For Lustre 不会更新文件系统上的文件和目录元数据。如果您未配置导入策略，则禁用数据存储库关联的自动导入。您仍然可以使用导入数据存储库任务来手动导入元数据更改，如[使用数据存储库任务导入更改](import-data-repo-task-dra.md)中所述。

**重要**  
自动导入不会将以下 S3 操作与您的 Lustre 文件系统链接 FSx 同步：  
使用 S3 对象生命周期过期来删除对象
永久删除已启用版本控制的桶中的当前对象版本
取消删除已版本控制的桶中的对象

对于大多数使用案例，我们建议您将导入策略配置为**新**、**已更改**和**已删除**。该策略确保链接的 S3 数据存储库中的所有更新都自动导入您的文件系统。

当您设置导入策略以根据链接的 S3 数据存储库中的更改更新文件系统文件和目录元数据时， FSx for Lustre 会在链接的 S3 存储桶上创建事件通知配置。事件通知配置的名称为 `FSx`。请勿修改或删除 S3 桶上的 `FSx` 事件通知配置，否则会阻止更新的文件和目录元数据自动导入文件系统。

当 f FSx or Lustre 更新链接的 S3 数据存储库上已更改的文件列表时，即使该文件已被写入锁定，它也会用更新的版本覆盖本地文件。

FSx for Lustre 会尽最大努力更新您的文件系统。 FSx for Lustre 在以下情况下无法更新文件系统：
+ 如果 FSx Lustre 没有权限打开已更改或新的 S3 对象。在这种情况下， FSx for Lustre 会跳过物体并继续。DRA 生命周期状态不受影响。
+ 如果 FSx for Lustre 没有存储桶级别的权限，例如。`GetBucketAcl`这将导致数据存储库生命周期状态变为**错误配置**。有关更多信息，请参阅 [数据存储库关联生命周期状态](dra-lifecycles.md)。
+ 如果链接的 S3 桶上的 `FSx` 事件通知配置已删除或更改。这将导致数据存储库生命周期状态变为**错误配置**。有关更多信息，请参阅 [数据存储库关联生命周期状态](dra-lifecycles.md)。

我们建议您[开启 CloudWatch 日志记录功能](cw-event-logging.md#manage-logging)，以记录任何无法自动导入的文件或目录的信息。日志中的警告和错误包含有关失败原因的信息。有关更多信息，请参阅 [数据存储库事件日志](data-repo-event-logs.md)。

## 先决条件
<a name="auto-import-prereqs-dra"></a>

Lustre 需要满足以下条件才能自动从链接的 S3 存储桶中导入新的、更改的或已删除的文件： FSx 
+ 文件系统及其链接的 S3 桶位于相同的 AWS 区域。
+ S3 桶没有配置错误的**生命周期状态**。有关更多信息，请参阅 [数据存储库关联生命周期状态](dra-lifecycles.md)。
+ 您的账户拥有所需的权限，才能在链接的 S3 桶上配置和接收事件通知。

## 支持的文件更改类型
<a name="file-change-support-dra"></a>

FSx for Lustre 支持导入链接的 S3 存储桶中发生的文件和目录的以下更改：
+ 对文件内容的更改。
+ 对文件或目录元数据的更改。
+ 对符号链接目标或元数据的更改。
+ 文件和目录的删除。如果您在链接的 S3 存储桶中删除与文件系统中的目录相对应的对象（即密钥名称以斜杠结尾的对象），for Lustre 仅在文件系统上的相应目录 FSx 为空时才会将其删除。

## 更新导入设置
<a name="manage-autoimport-dra"></a>

在创建数据存储库关联时，您可以为链接的 S3 桶设置文件系统的导入设置。有关更多信息，请参阅 [创建指向 S3 桶的链接](create-linked-dra.md)。

您还可以随时更新导入设置，包括导入策略。有关更多信息，请参阅 [更新数据存储库关联设置](update-dra-settings.md)。

## 监控自动导入
<a name="monitoring-autoimport"></a>

如果您的 S3 存储桶中的更改速率超过自动导入可以处理这些更改的速率，则导入到 for Lustre 文件系统的相应元数据更改将被延迟。 FSx 如果发生这种情况，您可以使用 `AgeOfOldestQueuedMessage` 指标来监控等待自动导入处理的较早更改的期限。有关该指标的更多信息，请参阅[FSx for Lustre S3 存储库指标](fs-metrics.md#auto-import-export-metrics)。

如果元数据更改导入的延迟超过 14 天（使用 `AgeOfOldestQueuedMessage` 指标衡量），则 S3 桶中尚未被自动导入处理的更改不会导入文件系统。此外，您的数据存储库关联生命周期被标记为**错误配置**，并且自动导入停止。如果您启用了自动导出，则自动导出会继续监视您的 FSx for Lustre 文件系统是否有更改。但是，其他更改不会从您 FSx 的 for Lustre 文件系统同步到 S3。

要将您的数据存储库关联从**错误配置**生命周期状态恢复为**可用**生命周期状态，您必须更新您的数据存储库关联。您可以使用 [update-data-repository-association](https://docs.aws.amazon.com/cli/latest/reference/fsx/update-data-repository-association.html)CLI 命令（或相应的 [UpdateDataRepositoryAssociation](https://docs.aws.amazon.com/fsx/latest/APIReference/API_UpdateDataRepositoryAssociation.html)API 操作）更新您的数据存储库关联。您唯一需要的请求参数是您要更新的数据存储库关联的 `AssociationID`。

在数据存储库关联生命周期状态更改为**可用**后，自动导入（和自动导出，如果已启用）将重新启动。重新启动后，自动导出会继续将文件系统更改同步到 S3。要将 S3 中未导入或来自数据存储库关联配置错误状态时的新对象和已更改对象的元数据与 for Lustre 文件系统的元数据同步，请运行[导入数据存储库](import-data-repo-task-dra.md)任务。 FSx 导入数据存储库任务不会将 S3 存储桶中的删除内容与 for Lustre 文件系统中的删除内容同步。 FSx 如果您要将 S3 与文件系统完全同步（包括删除内容），您必须重新创建文件系统。

为确保元数据更改的导入延迟不超过 14 天，我们建议您对 `AgeOfOldestQueuedMessage` 指标设置警报，并在 `AgeOfOldestQueuedMessage` 指标超过警报阈值时减少 S3 桶中的活动。对于连接到 S3 存储桶的 for Lustre 文件系统，单个分片持续从 S3 发送尽可能多的可能更改，而 for Lustre 文件系统上仅运行自动导入，则自动导入可以在 14 天内处理 7 小时积压的 S3 更改。 FSx FSx 

此外，通过单个 S3 操作，您可以生成的更改要多于自动导入在 14 天内处理的更改。这些类型的操作包括但不限于到 S3 的 AWS Snowball 上传和大规模删除。如果您对 S3 存储桶进行了大规模更改，并希望与 for Lustre 文件系统同步，为了防止自动导入更改超过 14 天，则应删除您的文件系统，并在 S3 更改完成后重新创建它。 FSx 

如果您的`AgeOfOldestQueuedMessage`指标在增长，请查看您的 S3 存储桶`GetRequests``PutRequests``PostRequests`、、和`DeleteRequests`指标，以了解是否会导致发送到自动导入的更改 and/or 数量增加。有关可用 S3 指标的信息，请参阅*《Amazon S3 用户指南》*中的[监控 Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/monitoring-overview.html)。

有关所有可用的 Lustre 指标 FSx 的列表，请参阅[使用 Amazon CloudWatch 监控](monitoring-cloudwatch.md)。

# 使用数据存储库任务导入更改
<a name="import-data-repo-task-dra"></a>

导入数据存储库任务会导入 S3 数据存储库中新对象或已更改对象的元数据，从而为 S3 数据存储库中的任何新对象创建新的文件或目录列表。对于数据存储库中已更改的任何对象，相应的文件或目录列表都将使用新的元数据进行更新。不对已从数据存储库中删除的对象采取任何操作。

使用以下过程通过 Amazon FSx 控制台和 CLI 导入元数据更改。请注意，您可以将一个数据存储库任务用于多个任务 DRAs。

## 导入元数据更改（控制台）
<a name="create-import-data-repo-task-dra-console"></a>

1. 打开亚马逊 FSx 控制台，网址为[https://console.aws.amazon.com/fsx/](https://console.aws.amazon.com/fsx/)。

1. 在导航窗格上，选择**文件系统**，然后选择您的 Lustre 文件系统。

1. 选择**数据存储库**选项卡。

1. 在**数据存储库关联**窗格中，选择您要为其创建导入任务的数据存储库关联。

1. 从**操作**菜单中选择**运行任务**。如果文件系统未链接到数据存储库，则此选项不可用。**创建导入数据存储库任务**页面会显示。

1. （可选）通过在**要导入的数据存储库路径**中提供目录或文件的路径，最多指定从链接的 S3 桶中导入 32 个目录或文件。
**注意**  
如果您提供的路径无效，则任务失败。

1. （可选）在**完成报告**下选择**启用**，以便在任务完成后生成任务完成报告。*任务完成报告*提供有关任务处理的、符合**报告范围**中范围的文件的详细信息。要指定 Amazon FSx 提交报告的位置，请在链接的 S3 数据存储库中为**报告路径输入相对路径**。

1. 选择**创建**。

   **文件系统**页面顶部的通知会显示您刚刚创建的任务正在进行中。

要查看任务状态和详细信息，请在文件系统的**数据存储库**选项卡中向下滚动到**数据存储库任务**窗格。默认排序顺序在列表前面显示最近的任务。

要从此页面查看任务摘要，请选择您刚刚创建的任务的**任务 ID**。任务的**摘要**页面会显示。

## 导入元数据更改（CLI）
<a name="create-import-data-repo-task-dra-cli"></a>
+ 使用 [https://docs.aws.amazon.com/cli/latest/reference/fsx/create-data-repository-task.html](https://docs.aws.amazon.com/cli/latest/reference/fsx/create-data-repository-task.html)CLI 命令在 for Lustre 文件系统上导入元数据更改。 FSx 相应的 API 操作是 [https://docs.aws.amazon.com/fsx/latest/APIReference/API_CreateDataRepositoryTask.html](https://docs.aws.amazon.com/fsx/latest/APIReference/API_CreateDataRepositoryTask.html)。

  ```
  $ aws fsx create-data-repository-task \
      --file-system-id fs-0123456789abcdef0 \
      --type IMPORT_METADATA_FROM_REPOSITORY \
      --paths s3://bucketname1/dir1/path1 \
      --report Enabled=true,Path=s3://bucketname1/dir1/path1,Format=REPORT_CSV_20191124,Scope=FAILED_FILES_ONLY
  ```

  成功创建数据存储库任务后，Amazon FSx 会以 JSON 格式返回任务描述。

创建旨在从链接的数据存储库导入元数据的任务后，您可以检查导入数据存储库任务的状态。有关如何查看数据存储库任务的更多信息，请参阅[访问数据存储库任务](view-data-repo-tasks.md)。

# 将文件预加载到文件系统
<a name="preload-file-contents-hsm-dra"></a>

您可以选择性地将单个文件或目录的内容预加载到文件系统中。

## 使用 HSM 命令导入文件
<a name="preload-hsm"></a>

首次访问文件时，Amazon 会从您的 Amazon S3 数据存储库中 FSx 复制数据。由于这种方法，文件的初始读取或写入会导致少量延迟。如果您的应用程序对这种延迟很敏感，并且您知道应用程序需要访问哪些文件或目录，您可以选择性预加载单个文件或目录的内容。您可以使用 `hsm_restore` 命令完成此操作，如下所示。

您可以使用 `hsm_action` 命令（随 `lfs` 用户实用程序发出），验证文件内容是否已加载到文件系统。返回值 `NOOP` 表示文件已成功加载。从挂载文件系统的计算实例中运行以下命令。*path/to/file*替换为要预加载到文件系统的文件路径。

```
sudo lfs hsm_restore path/to/file
sudo lfs hsm_action path/to/file
```

您可以使用以下命令预加载整个文件系统或文件系统中的整个目录。（尾部 & 符号使命令作为后台进程运行。） 如果您请求同时预加载多个文件，Amazon 会并行 FSx 加载您的 Amazon S3 数据存储库中的文件。如果文件已经加载到文件系统，则 `hsm_restore` 命令不会重新加载它。

```
nohup find local/directory -type f -print0 | xargs -0 -n 1 -P 8 sudo lfs hsm_restore &
```

**注意**  
如果链接的 S3 桶大于文件系统，您应该能将所有文件元数据导入文件系统。但是，您只能加载文件系统的剩余存储空间所能容纳的实际文件数据。如果在文件系统上没有剩余存储空间的情况下尝试访问文件数据，您会收到错误消息。如果发生这种情况，您可以根据需要增加存储容量。有关更多信息，请参阅 [管理存储容量](managing-storage-capacity.md)。

## 验证步骤
<a name="preload-validation"></a>

您可以运行以下列出的 bash 脚本，以帮助您发现处于已归档（已释放）状态的文件或对象数量。

为提升脚本的性能，尤其是在包含大量文件的文件系统中，CPU 线程会根据 `/proc/cpuproc` 文件自动确定。也就是说，使用 vCPU 数量更高的 Amazon EC2 实例，性能将得到提升。

1. 设置 bash 脚本。

   ```
   #!/bin/bash
   
   # Check if a directory argument is provided
   if [ $# -ne 1 ]; then
       echo "Usage: $0 /path/to/lustre/mount"
       exit 1
   fi
   
   # Set the root directory from the argument
   ROOT_DIR="$1"
   
   # Check if the provided directory exists
   if [ ! -d "$ROOT_DIR" ]; then
       echo "Error: Directory $ROOT_DIR does not exist."
       exit 1
   fi
   
   # Automatically detect number of CPUs and set threads
   if command -v nproc &> /dev/null; then
       THREADS=$(nproc)
   elif [ -f /proc/cpuinfo ]; then
       THREADS=$(grep -c ^processor /proc/cpuinfo)
   else
       echo "Unable to determine number of CPUs. Defaulting to 1 thread."
       THREADS=1
   fi
   
   # Output file
   OUTPUT_FILE="released_objects_$(date +%Y%m%d_%H%M%S).txt"
   
   echo "Searching in $ROOT_DIR for all released objects using $THREADS threads"
   echo "This may take a while depending on the size of the filesystem..."
   
   # Find all released files in the specified lustre directory using parallel
   # If you  get false positives for file names/paths that include the word 'released',
   # you can grep 'released exists archived' instead of just 'released'
   time sudo lfs find "$ROOT_DIR" -type f | \
   parallel --will-cite -j "$THREADS" -n 1000 "sudo lfs hsm_state {} | grep released" > "$OUTPUT_FILE"
   
   echo "Search complete. Released objects are listed in $OUTPUT_FILE"
   echo "Total number of released objects: $(wc -l <"$OUTPUT_FILE")"
   ```

1. 使脚本成为可执行文件：

   ```
   $ chmod +x find_lustre_released_files.sh
   ```

1. 运行脚本，如以下示例所示：

   ```
   $ ./find_lustre_released_files.sh /fsxl/sample
   Searching in /fsxl/sample for all released objects using 16 threads
   This may take a while depending on the size of the filesystem...
   real 0m9.906s
   user 0m1.502s
   sys 0m5.653s
   Search complete. Released objects are listed in released_objects_20241121_184537.txt
   Total number of released objects: 30000
   ```

如果存在已释放的对象，则对所需目录执行批量恢复，以便将文件从 S3 导入 FSx For Lustre，如下例所示：

```
$ DIR=/path/to/lustre/mount
$ nohup find $DIR -type f -print0 | xargs -0 -n 1 -P 8 sudo lfs hsm_restore &
```

请注意，如果存在数百万个文件，则 `hsm_restore` 需要较长时间。