

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從資料儲存庫匯入變更
<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)。如果您同時請求預先載入多個檔案，FSx for Lustre 會從 Amazon S3 資料儲存庫平行載入檔案。

FSx for Lustre 只會匯入具有 POSIX 相容物件金鑰的 S3 物件。自動匯入和匯入資料儲存庫任務都會匯入 POSIX 中繼資料。如需詳細資訊，請參閱[資料儲存庫的 POSIX 中繼資料支援](posix-metadata-support.md)。

**注意**  
FSx for Lustre 不支援從 S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 儲存類別匯入符號連結 （符號連結） 的中繼資料。可以匯入非符號連結之 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 物件的中繼資料 （也就是說，在 FSx for Lustre 檔案系統上建立具有正確中繼資料的 inode)。不過，若要從檔案系統讀取此資料，您必須先還原 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 物件。不支援將檔案資料直接從 S3Amazon S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 儲存類別中的 Amazon S3 物件匯入 FSx for Lustre。

# 從 S3 儲存貯體自動匯入更新
<a name="autoimport-data-repo-dra"></a>

您可以設定 FSx for Lustre，在從 S3 儲存貯體新增、變更或刪除物件時自動更新檔案系統中的中繼資料。FSx for Lustre 會建立、更新或刪除對應於 S3 中變更的檔案和目錄清單。如果 S3 儲存貯體中變更的物件不再包含其中繼資料，FSx for Lustre 會維護檔案目前的中繼資料值，包括目前的許可。

**注意**  
FSx for Lustre 檔案系統和連結的 S3 儲存貯體必須位於相同的 中 AWS 區域 ，才能自動匯入更新。

您可以在建立資料儲存庫關聯時設定自動匯入，而且您可以隨時使用 FSx 管理主控台 AWS CLI、 或 AWS API 更新自動匯入設定。

**注意**  
您可以在相同的資料儲存庫關聯上設定自動匯入和自動匯出。本主題僅說明自動匯入功能。

**重要**  
如果在 S3 中修改物件並啟用所有自動匯入政策，且自動匯出已停用，則該物件的內容一律會匯入檔案系統中的對應檔案。如果檔案已存在於目標位置，則會覆寫檔案。
如果在檔案系統和 S3 中修改檔案，並啟用所有自動匯入和自動匯出政策，檔案系統中的檔案或 S3 中的物件可能會被另一個覆寫。不保證某個位置的稍後編輯會覆寫另一個位置的較早編輯。如果您在檔案系統和 S3 儲存貯體中修改相同的檔案，您應該確保應用程式層級協調，以防止此類衝突。FSx for Lustre 無法防止多個位置中的寫入衝突。

匯入政策指定您希望 FSx for Lustre 在連結 S3 儲存貯體的內容變更時如何更新檔案系統。資料儲存庫關聯可以有下列其中一個匯入政策：
+ **新增** – FSx for Lustre 只有在將新物件新增至連結的 S3 資料儲存庫時，才會自動更新檔案和目錄中繼資料。
+ **已變更** – FSx for Lustre 只會在變更資料儲存庫中的現有物件時自動更新檔案和目錄中繼資料。
+ **已刪除** – 只有在刪除資料儲存庫中的物件時，FSx for Lustre 才會自動更新檔案和目錄中繼資料。
+ **新增、變更和刪除的任意組合** – 當 S3 資料儲存庫中發生任何指定的動作時，FSx for Lustre 會自動更新檔案和目錄中繼資料。例如，您可以指定在物件新增至 (**新增**) 或從 S3 儲存庫移除 (**刪除**) 時更新檔案系統，但在物件變更時不會更新。
+ **未設定政策** – 從 S3 資料儲存庫新增、變更或刪除物件時，FSx for Lustre 不會更新檔案系統上的檔案和目錄中繼資料。如果您未設定匯入政策，則會針對資料儲存庫關聯停用自動匯入。您仍然可以使用匯入資料儲存庫任務手動匯入中繼資料變更，如中所述[使用資料儲存庫任務匯入變更](import-data-repo-task-dra.md)。

**重要**  
自動匯入不會同步下列 S3 動作與您連結的 FSx for Lustre 檔案系統：  
使用 S3 物件生命週期過期刪除物件
在已啟用版本控制的儲存貯體中永久刪除目前的物件版本
取消刪除已啟用版本控制之儲存貯體中的物件

對於大多數使用案例，我們建議您設定**新增**、**變更**和**刪除**的匯入政策。此政策可確保在連結的 S3 資料儲存庫中進行的所有更新都會自動匯入至您的檔案系統。

當您設定匯入政策，根據連結的 S3 資料儲存庫中的變更來更新檔案系統檔案和目錄中繼資料時，FSx for Lustre 會在連結的 S3 儲存貯體上建立事件通知組態。事件通知組態名為 `FSx`。請勿修改或刪除 S3 儲存貯體上的`FSx`事件通知組態 – 這樣做可防止更新的檔案和目錄中繼資料自動匯入至您的檔案系統。

當 FSx for Lustre 更新在連結的 S3 資料儲存庫上變更的檔案清單時，即使檔案已寫入鎖定，也會以更新版本覆寫本機檔案。

FSx for Lustre 會盡最大努力更新您的檔案系統。在下列情況中，FSx for Lustre 無法更新檔案系統：
+ 如果 FSx for Lustre 沒有開啟已變更或新 S3 物件的許可。在此情況下，FSx for Lustre 會略過物件並繼續。DRA 生命週期狀態不受影響。
+ 如果 FSx for Lustre 沒有儲存貯體層級許可，例如 的 `GetBucketAcl`。這會導致資料儲存庫生命週期狀態變成**設定錯誤**。如需詳細資訊，請參閱[資料儲存庫關聯生命週期狀態](dra-lifecycles.md)。
+ 如果已刪除或變更連結 S3 儲存貯體上的`FSx`事件通知組態。這會導致資料儲存庫生命週期狀態變成**設定錯誤**。如需詳細資訊，請參閱[資料儲存庫關聯生命週期狀態](dra-lifecycles.md)。

建議您[開啟](cw-event-logging.md#manage-logging) CloudWatch Logs 的記錄功能，以記錄無法自動匯入的任何檔案或目錄的相關資訊。日誌中的警告和錯誤包含失敗原因的相關資訊。如需詳細資訊，請參閱[資料儲存庫事件日誌](data-repo-event-logs.md)。

## 先決條件
<a name="auto-import-prereqs-dra"></a>

FSx for Lustre 需要下列條件，才能從連結的 S3 儲存貯體自動匯入新的、已變更或刪除的檔案：
+ 檔案系統及其連結的 S3 儲存貯體位於相同的 中 AWS 區域。
+ S3 儲存貯體沒有設定錯誤的**生命週期狀態**。如需詳細資訊，請參閱[資料儲存庫關聯生命週期狀態](dra-lifecycles.md)。
+ 您的帳戶具有在連結的 S3 儲存貯體上設定和接收事件通知所需的許可。

## 支援的檔案變更類型
<a name="file-change-support-dra"></a>

FSx for Lustre 支援將下列變更匯入至連結 S3 儲存貯體中發生的檔案和目錄：
+ 檔案內容的變更。
+ 檔案或目錄中繼資料的變更。
+ 符號連結目標或中繼資料的變更。
+ 刪除檔案和目錄。如果您刪除連結 S3 儲存貯體中對應至檔案系統中目錄的物件 （亦即金鑰名稱結尾為斜線的物件），則 FSx for Lustre 只會在檔案系統為空時刪除對應的目錄。

## 更新匯入設定
<a name="manage-autoimport-dra"></a>

您可以在建立資料儲存庫關聯時，為連結的 S3 儲存貯體設定檔案系統的匯入設定。如需詳細資訊，請參閱[建立 S3 儲存貯體的連結](create-linked-dra.md)。

您也可以隨時更新匯入設定，包括匯入政策。如需詳細資訊，請參閱[更新資料儲存庫關聯設定](update-dra-settings.md)。

## 監控自動匯入
<a name="monitoring-autoimport"></a>

如果 S3 儲存貯體中的變更率超過自動匯入可以處理這些變更的速率，則會延遲匯入 FSx for Lustre 檔案系統的對應中繼資料變更。如果發生這種情況，您可以使用 `AgeOfOldestQueuedMessage` 指標來監控等待自動匯入處理的最舊變更的存留期。如需此指標的詳細資訊，請參閱 [FSx for Lustre S3 儲存庫指標](fs-metrics.md#auto-import-export-metrics)。

如果匯入中繼資料變更的延遲超過 14 天 （使用 `AgeOfOldestQueuedMessage` 指標測量），則尚未由自動匯入處理之 S3 儲存貯體的變更不會匯入檔案系統。此外，您的資料儲存庫關聯生命週期會標示為 **MISCONFIGURED**，並停止自動匯入。如果您已啟用自動匯出，則自動匯出會繼續監控 FSx for Lustre 檔案系統是否有變更。不過，其他變更不會從 FSx for Lustre 檔案系統同步到 S3。

若要將資料儲存庫關聯從 **MISCONFIGURED** 生命週期狀態傳回**可用**生命週期狀態，您必須更新資料儲存庫關聯。您可以使用 [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 中新物件和已變更物件的中繼資料與未匯入或資料儲存庫關聯處於設定錯誤狀態時的 FSx for Lustre 檔案系統同步，請執行[匯入資料儲存庫任務](import-data-repo-task-dra.md)。匯入資料儲存庫任務不會將 S3 儲存貯體中的刪除與 FSx for Lustre 檔案系統同步。如果您想要將 S3 與檔案系統完全同步 （包括刪除），則必須重新建立檔案系統。

為了確保匯入中繼資料變更的延遲不超過 14 天，我們建議您在`AgeOfOldestQueuedMessage`指標上設定警示，並在指標超過警示閾值時減少 S3 `AgeOfOldestQueuedMessage` 儲存貯體中的活動。對於連接到具有單一碎片的 S3 儲存貯體的 FSx for Lustre 檔案系統，持續從 S3 傳送最大數量的可能變更，且僅在 FSx for Lustre 檔案系統上執行自動匯入，自動匯入可以在 14 天內處理 7 小時的 S3 變更待處理項目。

此外，透過單一 S3 動作，您可以產生比自動匯入在 14 天內處理更多變更。這些動作類型的範例包括但不限於 AWS Snowball 上傳至 S3 和大規模刪除。如果您要與 FSx for Lustre 檔案系統同步的 S3 儲存貯體進行大規模變更，為了防止自動匯入變更超過 14 天，您應該刪除檔案系統，並在 S3 變更完成後重新建立它。

如果您的`AgeOfOldestQueuedMessage`指標正在增長，請檢閱您的 S3 儲存貯體 `GetRequests`、`PostRequests`、 `PutRequests`和 `DeleteRequests` 指標是否有活動變更，這會導致傳送到自動匯入的速率和/或變更數量增加。如需可用 S3 指標的相關資訊，請參閱[《Amazon S3 使用者指南》中的監控](https://docs.aws.amazon.com/AmazonS3/latest/userguide/monitoring-overview.html) *Amazon S3*。

如需所有可用 FSx for Lustre 指標的清單，請參閱 [使用 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. 在 [https://console.aws.amazon.com/fsx/](https://console.aws.amazon.com/fsx/)：// 開啟 Amazon 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 命令在 FSx for Lustre 檔案系統上匯入中繼資料變更。對應的 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 FSx 會從 Amazon S3 資料儲存庫複製資料。由於這種方法，檔案的初始讀取或寫入會產生少量延遲。如果您的應用程式對此延遲敏感，而且您知道應用程式需要存取哪些檔案或目錄，您可以選擇預先載入個別檔案或目錄的內容。您可以使用 `hsm_restore`命令執行此操作，如下所示。

您可以使用 `hsm_action`命令 （由`lfs`使用者公用程式發出） 來驗證檔案的內容是否已完成載入至檔案系統。傳回值 `NOOP`表示檔案已成功載入。從已安裝 檔案系統的運算執行個體執行下列命令。將 *path/to/file* 取代為您預先載入至檔案系統的檔案路徑。

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

您可以使用下列命令，在檔案系統中預先載入整個檔案系統或整個目錄。（結尾的 ampers 並讓命令做為背景程序執行。) 如果您同時請求預先載入多個檔案，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`需要一些時間。