

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ファイルシステムへのファイルのプリロード
<a name="preload-file-contents-hsm-dra"></a>

オプションで、個々のファイルまたはディレクトリの内容をファイルシステムに事前ロードできます。

## HSM コマンドを使用したファイルのインポート
<a name="preload-hsm"></a>

Amazon FSx は、ファイルが最初にアクセスされたときに Simple Storage Service (Amazon S3) データリポジトリからデータをコピーします。このアプローチにより、ファイルへの最初の読み取りまたは書き込みにはわずかなレイテンシーが発生します。アプリケーションがこのレイテンシーの影響を受けやすく、アプリケーションがアクセスする必要があるファイルやディレクトリがわかっている場合は、オプションで、個々のファイルまたはディレクトリのコンテンツをプリロードできます。以下のように `hsm_restore` コマンドを実行します。

`hsm_action` コマンド (`lfs` ユーザーユーティリティで発行される) を使用して、ファイルの内容がファイルシステムへのロードが完了したことを確認します。`NOOP` の戻り値は、ファイルが正常にロードされたことを示します。ファイルシステムがマウントされたコンピューティングインスタンスから次のコマンドを実行します。{{パス / 宛先 / ファイル}} ファイルシステムにプリロードするファイルのパスを使用して置き換えます。

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

次のコマンドを使用して、ファイルシステム全体またはファイルシステム内のディレクトリ全体をプリロードできます。(末尾にアンパサンドをつけると、コマンドはバックグラウンドプロセスとして実行されます。) 複数のファイルのプリロードを同時にリクエストすると、Amazon FSx はファイルを Simple Storage Service (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` には時間がかかることに留意してください。