ストレージ問題のトラブルシューティング - FSx Lustre 用

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

ストレージ問題のトラブルシューティング

場合によっては、ファイルシステムのストレージの問題が発生することがあります。問題は、lfs migrate コマンドなどの lfs コマンドを使用してトラブルシューティングできます。

ストレージターゲットにスペースがないことによる書き込みエラー

ファイルシステムストレージレイアウト で説明されているように、lfs df -h コマンドを使用して、ファイルシステムのストレージ使用量を確認できます。filesystem_summary フィールドには、ファイルシステムのストレージ使用量の合計が報告されます。

ファイルシステムのディスク使用率が 100% の場合は、ファイルシステムのストレージ容量を増やすことを検討してください。詳細については、「ストレージ容量の管理」を参照してください。

ファイルシステムのストレージ使用量が 100% ではなく、それでも書き込みエラーが発生すると、書き込み先のファイルがいっぱいOSTの にストライプ化される場合があります。

実行するアクション

  • の多くOSTsがいっぱいの場合は、ファイルシステムのストレージ容量を増やします。の不均衡なストレージ OSTs セクションのアクションに従ってOSTs、 でストレージの不均衡を確認します。

  • OSTs がいっぱいでない場合は、すべてのクライアントインスタンスに次のチューニングを適用して、クライアントのダーティページバッファサイズを調整します。

    sudo lctl set_param osc.*.max_dirty_mb=64

の不均衡なストレージ OSTs

Amazon FSx for Lustre は、新しいファイルストライプを 全体に均等に分散しますOSTs。ただし、I / O パターンまたはファイルストレージレイアウトが原因で、ファイルシステムのバランスが崩れる可能性があります。その結果、一部のストレージターゲットが満杯になり、他のストレージターゲットは比較的空のままになる可能性があります。

lfs migrate コマンドを使用して、ファイルまたはディレクトリをより完全な から少ない に移動しますOSTs。lfs migrate コマンドは、ブロックモードでも非ブロックモードでも使用できます。

  • ブロックモードは、lfs migrate コマンドのデフォルトモードです。ブロックモードで実行すると、lfs migrate はデータの移行前にまずファイルおよびディレクトリのグループロックを取得してファイルへの変更を防ぎ、移行が完了するとロックを解除します。ブロックモードは、他のプロセスがファイルを変更できないようにすることで、これらのプロセスによって移行が中断されるのを防ぎます。このモードの欠点は、アプリケーションがファイルを変更できないようにすると、アプリケーションに遅延やエラーが発生する可能性があることです。

  • 非ブロックモードは、lfs migrate コマンドで -n オプションを指定すると有効になります。非ブロックモードで lfs migrate を実行すると、他のプロセスでも移行中のファイルを変更できます。lfs migrate がファイルの移行を完了する前にプロセスがファイルを変更した場合、lfs migrate はそのファイルの移行に失敗し、ファイルは元のストライプレイアウトのままになります。

このコマンドはアプリケーションに干渉する可能性が低いため、非ブロックモードを使用することをお勧めします。

実行するアクション

  1. 比較的大きなクライアントインスタンス (Amazon EC2c5n.4xlargeインスタンスタイプなど) を起動して、ファイルシステムにマウントします。

  2. 非ブロックモードスクリプトまたはブロックモードスクリプトを実行する前に、各クライアントインスタンスで次のコマンドを実行し、プロセスを高速化します。

    sudo lctl set_param 'mdc.*.max_rpcs_in_flight=60' sudo lctl set_param 'mdc.*.max_mod_rpcs_in_flight=59'
  3. スクリーンセッションを開始し、非ブロックモードスクリプトまたはブロックモードスクリプトを実行します。スプリクト内の変数は必ず適切なものに変更してください。

    • 非ブロックモードスクリプト

      #!/bin/bash # UNCOMMENT THE FOLLOWING LINES: # # TRY_COUNT=0 # MAX_MIGRATE_ATTEMPTS=100 # OSTS="fsname-OST0000_UUID" # DIR_OR_FILE_MIGRATED="/mnt/subdir/" # BATCH_SIZE=10 # PARALLEL_JOBS=16 # up to max-procs processes, set to 16 if client is c5n.4xlarge with 16 vcpu # LUSTRE_STRIPING_CONFIG="-E 100M -c 1 -E 10G -c 8 -E 100G -c 16 -E -1 -c 32" # should be consistent with the existing striping setup # if [ -z "$TRY_COUNT" -o -z "$MAX_MIGRATE_ATTEMPTS" -o -z "$OSTS" -o -z "$DIR_OR_FILE_MIGRATED" -o -z "$BATCH_SIZE" -o -z "$PARALLEL_JOBS" -o -z "$LUSTRE_STRIPING_CONFIG" ]; then echo "Some variables are not set." exit 1 fi echo "lfs migrate starts" while true; do output=$(sudo lfs find ! -L released --ost $OSTS --print0 $DIR_OR_FILE_MIGRATED | shuf -z | /bin/xargs -0 -P $PARALLEL_JOBS -n $BATCH_SIZE sudo lfs migrate -n $LUSTRE_STRIPING_CONFIG 2>&1) if [[ $? -eq 0 ]]; then echo "lfs migrate succeeds for $DIR_OR_FILE_MIGRATED at the $TRY_COUNT attempt, exiting." exit 0 elif [[ $? -eq 123 ]]; then echo "WARN: Target data objects are not located on these OSTs. Skipping lfs migrate" exit 1 else echo "lfs migrate fails for $DIR_OR_FILE_MIGRATED at the $TRY_COUNT attempt, retrying..." if (( ++TRY_COUNT >= MAX_MIGRATE_ATTEMPTS )); then echo "WARN: Exceeds max retry attempt. Skipping lfs migrate for $DIR_OR_FILE_MIGRATED. Failed with the following error" echo $output exit 1 fi fi done
    • ブロックモードスクリプト

      • の値を の値OSTSに置き換えますOSTs。

      • nproc に整数値を指定し、同時に実行する max-procs プロセスの数を設定します。例えば、Amazon EC2c5n.4xlargeインスタンスタイプには 16 個の があるためvCPUs、 に 16 (または < 16 の値) を使用できますnproc

      • mnt_dir_path にマウントディレクトリパスを指定します。

      # find all OSTs with usage above a certain threshold; for example, greater than or equal to 85% full for OST in $(lfs df -h |egrep '( 8[5-9]| 9[0-9]|100)%'|cut -d' ' -f1); do echo ${OST};done|tr '\012' ',' # customer can also just pass OST values directly to OSTS variable OSTS='dzfevbmv-OST0000_UUID,dzfevbmv-OST0002_UUID,dzfevbmv-OST0004_UUID,dzfevbmv-OST0005_UUID,dzfevbmv-OST0006_UUID,dzfevbmv-OST0008_UUID' nproc=<Run up to max-procs processes if client is c5n.4xlarge with 16 vcpu, this value can be set to 16> mnt_dir_path=<mount dir, e.g. '/my_mnt'> lfs find ${mnt_dir_path} --ost ${OSTS}| xargs -P ${nproc} -n2 lfs migrate -E 100M -c 1 -E 10G -c 8 -E 100G -c 16 -E -1 -c 32

Notes (メモ)

  • ファイルシステムの読み取りパフォーマンスに影響が出ることに気付いた場合は、ctrl-c または kill -9 を使用していつでも移行を中止できます。スレッドの数を (nproc 値) を小さい数 (8 など) まで減らしたら、ファイルの移行を再開します。

  • lfs migrate コマンドを実行すると、クライアントワークロードによっても開かれているファイルで失敗します。エラーをスローして次のファイルに移動します。したがって、アクセスされているファイルがたくさんある場合、スクリプトはファイルを移行させることができず、移行の進行が非常に遅くなるという形でそれが反映される可能性があります。

  • 次のいずれかの方法を使用してOST使用状況をモニタリングできます。

    • クライアントマウントOSTで、次のコマンドを実行してOST使用状況をモニタリングし、使用状況が 85% を超える を見つけます。

      lfs df -h |egrep '( 8[5-9]| 9[1-9]|100)%'
    • Amazon CloudWatch メトリクス をチェックしOST FreeDataStorageCapacity、 をチェックしますMinimum。スクリプトが 85% を超える満杯OSTsであることが判明した場合、メトリクスが 15% に近づいたら、 ctrl-cまたは を使用して移行をkill -9停止します。

  • また、新しいファイルが複数のストレージターゲットにストライプされるように、ファイルシステムまたはディレクトリのストライプ設定を変更することを検討することもできます。詳細については、「ファイルシステム内のデータのストライピング」を参照してください。