ファイル システムの割り当て

Google Cloud Managed Lustre ファイル システムは、ユーザー、グループ、プロジェクトの割り当てをサポートしているため、管理者はストレージの使用量を管理し、リソースの公平な割り当てを確保できます。このドキュメントでは、これらの割り当てを構成、表示、管理する方法について説明します。

ファイル システムの割り当てとは

Managed Lustre の割り当てを使用すると、ユーザー、グループ、プロジェクトがファイル システム内で使用できるディスク容量とファイル数の上限を設定できます。

割り当ては、次のエンティティに適用されます。

  • ユーザー割り当て は、個々の root 以外のユーザーが使用するストレージを制限します。
  • グループ割り当て は、特定のグループの root 以外のメンバー全員が使用するストレージを制限します。
  • プロジェクト割り当て は、特定のプロジェクト ID に関連付けられたファイルとディレクトリが使用するストレージを制限します。このプロジェクト ID は、Lustre ファイル システム識別子であり、lfs projectを使用して定義されており、プロジェクト ID ではありません。Google Cloud 詳細については、 プロジェクト割り当てを設定するをご覧ください。

割り当ては、次の 2 つのリソースタイプに対して構成されます。

  • ブロックの上限 は、使用できるディスク容量の上限です。
  • Inode の上限 は、作成できるファイルとディレクトリの数の上限です。

各リソースタイプには、次の 2 つのレベルの上限を設定できます。

  • ソフトリミット は、超過すると構成可能な猶予期間がトリガーされる割り当てしきい値です。この猶予期間中、ユーザー、グループ、プロジェクトは、ハードリミットが存在する場合はハードリミットまで、ソフトリミットを一時的に超過できます。これにより、ブロックされる前に使用量を減らすことができます。猶予期間が終了しても使用量がソフトリミットを超えている場合、ソフトリミットはハードリミットとして適用され、ディスク容量または inode 数がソフトリミットを下回るまで、新しい書き込みはすべてブロックされます。

    デフォルトでは、猶予期間は 1 週間です。

  • ハードリミット は、絶対最大値を定義します。この上限に達すると、以降の書き込みオペレーションはすべて失敗し、「Disk quota exceeded」エラーが返されます。

ユーザーとグループの管理

Lustre は、ユーザー名とグループ名、ID にクライアントの POSIX 属性を使用します。

クライアントがファイル システム リクエストを行うと、ローカル UID と GID が Lustre サーバーに送信されます。サーバーはこれらの POSIX 属性を使用して、標準のファイル権限を適用し、割り当ての使用量を追跡します。

マルチユーザー環境で一貫した動作を実現するには、Lustre ファイル システムをマウントするすべてのクライアントで、UID と GID のマッピングを同期する必要があります。通常、これは LDAP や NIS などの集中型サービスを通じて管理されます。

root ユーザーには割り当ては適用されません。sudo で実行されるコマンドも、割り当てチェックをバイパスします。

始める前に

Lustre の割り当てを管理するには、次のものが必要です。

  • アクティブな Google Cloud Managed Lustre ファイル システムへのクライアント アクセス。
  • クライアント システムでの lfs コマンドを実行するための sudo または root 権限。

割り当てを設定する

lfs setquota コマンドを使用して、ブロックと inode の上限を構成します。ブロックの上限のみ、inode の上限のみ、またはその両方を指定できます。同様に、ハードリミット、ソフトリミット、またはその両方を指定できます。

sudo lfs setquota -u | g | p | U | G | P UGP_VALUE \
      -b SOFT_BLOCK_LIMIT -B HARD_BLOCK_LIMIT \
      -i SOFT_INODE_LIMIT -I HARD_INODE_LIMIT \
      MOUNT_DIR

ここで

  • -u は、ユーザー名または UID でユーザーを指定します。Lustre は、クライアントの POSIX 属性を使用してユーザー名を解決します。
  • -g は、グループ名または GID でグループを指定します。Lustre は、クライアントの POSIX 属性を使用してグループ名を解決します。
  • -p は、プロジェクト名またはプロジェクト ID でプロジェクトを指定します。プロジェクト名を指定する場合は、クライアントの /etc/projid などのマッピング ファイルを使用してプロジェクト ID にマッピングする必要があります。
  • UGP は、特定の割り当てが設定されていないユーザー、グループ、プロジェクトのデフォルトの割り当てを設定します。
  • UGP_VALUE は、ユーザー名、グループ名、プロジェクト名、UID、GID、または プロジェクト ID です。ID は 04294967295 の整数にする必要があります。 デフォルトのユーザー、グループ、プロジェクトの割り当てを指定する場合は、この値を省略します。
  • -b-B は、それぞれブロック使用量のソフトリミットとハードリミットです。ソフトリミットはハードリミットより小さくする必要があります。値は、バイト(B)、キロバイト(K)、メガバイト(M)、ギガバイト(G)、テラバイト(T)で指定できます。デフォルトの単位はキロバイトです。
  • -i-I は、inode 使用量のソフトリミットとハードリミットです。ソフトリミットはハードリミットより小さくする必要があります。
  • MOUNT_DIR は、Managed Lustre ファイル システムのマウント ポイントです。

割り当ての作成と同時に猶予期間を構成することはできません。ソフトリミットのデフォルトの猶予期間は 1 週間です。猶予期間を更新するには、猶予期間を構成するをご覧ください。

ユーザー割り当てを設定する

/mnt/lustreuser1 に、ソフトブロックの上限を 100 GB、ハードブロックの上限を 120 GB、ソフト inode の上限を 10,000、ハード inode の上限を 12,000 に設定します。

sudo lfs setquota -u user1 -b 100G -B 120G -i 10000 -I 12000 /mnt/lustre

グループ割り当てを設定する

/mnt/lustregroupA に、ハードブロックの上限を 50 TB に設定します。

sudo lfs setquota -g groupA -B 50T /mnt/lustre

プロジェクト割り当てを設定する

プロジェクト割り当てでは、ディレクトリとファイルをプロジェクト ID に関連付けるための追加の手順が必要です。

  1. lfs project コマンドを使用して、プロジェクト ID を割り当てます。この ID は、プロジェクトを識別する任意の整数です。

    sudo lfs project -spr LFS_PROJECT_ID PATH/TO/DIR/OR/FILE
    

    ここで

    • -s は継承を設定します。これにより、指定したディレクトリに作成された新しいファイルとディレクトリはプロジェクト ID を継承します。
    • -p は、指定したファイルまたはディレクトリに指定されたプロジェクト ID を設定するようにコマンドに指示します。
    • -r は、プロジェクト ID をすべての子ディレクトリとファイルに再帰的に適用します。
    • PATH/TO/DIR/OR/FILE は、プロジェクト ID を設定するディレクトリまたはファイルのパスです。指定できるパスまたはファイルは 1 つだけです。

    その他のフラグと情報については、クライアントから man lfs project を実行してください。

    たとえば、プロジェクト 101/mnt/lustre/my-project とそのすべての子(新規と既存)に割り当てるには、次のようにします。

    sudo lfs project -spr 101 /mnt/lustre/my-project
    
  2. lfs setquota を使用して割り当てを設定します。

    sudo lfs setquota -p LFS_PROJECT_ID \
      -b SOFT_BLOCK_LIMIT -B HARD_BLOCK_LIMIT \
      -i SOFT_INODE_LIMIT -I HARD_INODE_LIMIT \
      MOUNT_DIR
    

デフォルトの割り当てを設定する

特定の割り当て設定のないすべてのユーザーに、ハードブロックの上限を 50 TB に設定します。

sudo lfs setquota -U -B 50T /mnt/lustre

割り当てを変更する

既存の割り当てを変更するには、新しい値を指定して lfs setquota を再度実行します。このコマンドは、指定したユーザー、グループ、プロジェクトの以前の設定を上書きします。

猶予期間を構成する

猶予期間は、ソフトリミットがハードリミットとして機能する前に、ユーザー、グループ、プロジェクトがソフトリミットを超過できる期間を定義します。デフォルトでは、この値は 1 週間です。 猶予期間は、すべてのユーザー、グループ、プロジェクトに設定されます。特定の ID に設定することはできません。

猶予期間を更新するには、lfs setquota -t コマンドを使用します。

sudo lfs setquota -t -u | g | p \
  -b BLOCK_GRACE_PERIOD -i INODE_GRACE_PERIOD \
  MOUNT_DIR

ここで

  • -u は、猶予期間をユーザー割り当てに適用します。
  • -g は、猶予期間をグループ割り当てに適用します。
  • -p は、猶予期間をプロジェクト割り当てに適用します。
  • -b-i は、それぞれブロックと inode の猶予期間を指定します。デフォルトの単位は秒です。XwXdXhXmXs(週、日、時間、分、秒)の形式で他の単位を使用できます。いずれか一方または両方の割り当てタイプの上限を設定できます。

    時間値の代わりに 'notify' を指定すると、ソフトリミットを超過した場合に lfs quota の出力にアスタリスクが表示されます。ハードリミットに達するまで、'notify' が指定されている場合でも新しい書き込みは ブロックされません。

たとえば、すべてのユーザー割り当てに 7 日間のブロック猶予期間を設定するには、次のようにします。

sudo lfs setquota -t -u -b 7d /mnt/lustre

プロジェクト割り当てに 24 時間の inode 猶予期間を設定するには、次のようにします。

sudo lfs setquota -t -p -i 24h /mnt/lustre

ブロックのソフトリミットを超過したときに通知するには、次のようにします。

sudo lfs setquota -t -u -b 'notify' /mnt/lustre

既存の割り当てを表示する

lfs quota コマンドは、現在のユーザーの使用量と上限を表示します。

lfs quota MOUNT_DIR

オプションの一覧については、クライアントから man lfs quota を実行してください。

たとえば、/mnt/lustreuser1 の割り当てを表示するには、次のようにします。

sudo lfs quota -u user1 /mnt/lustre

別のユーザーの割り当てと使用量を表示するには、sudo でコマンドを実行する必要があります。

出力は次のようになります。

  • Filesystem: Lustre マウント ポイント。
  • kbytes: 現在のディスク使用量(キロバイト)。
  • bquota: ソフトブロックの上限(キロバイト)。
  • blimit: ハードブロックの上限(キロバイト)。
  • bgrace: ブロックのソフトリミットを超過した場合の残りの猶予期間。アスタリスク(*)は、ソフトリミットを超過していることを示します。
  • files: 使用されている inode の数。
  • iquota: ソフト inode の上限。
  • ilimit: ハード inode の上限。
  • igrace: inode のソフトリミットを超過した場合の残りの猶予期間。アスタリスク(*)は、ソフトリミットを超過していることを示します。

すべてのユーザー割り当てに構成されている猶予期間を表示するには、次のようにします。

lfs quota -t -u /mnt/lustre

Cloud Monitoring で割り当てをモニタリングする

クライアントで lfs quota コマンドを使用するだけでなく、Cloud Monitoring を使用してファイル システムの割り当ての使用量と上限を表示することもできます。これにより、コンソールからユーザー、グループ、プロジェクトごとのストレージ使用量をモニタリングできます。Google Cloud

割り当て指標は、モニタリング対象リソースのLustre 割り当てエンティティ に関連付けられています。使用可能な指標は次のとおりです。

  • バイト: 使用済みバイト数、ソフトリミット、ハードリミット。
  • Inode: 使用済み inode、ソフトリミット、ハードリミット。

これらの指標を表示するには、次の手順を行います。

  1. コンソールで、[**モニタリング**] > [**Metrics Explorer**] ページに移動します。 Google Cloud

    Metrics Explorer に移動

  2. [指標を選択] フィールドで、Lustre Quota Entity リソースを検索して選択します。

  3. 表示する特定の割り当て指標(Quota Used BytesQuota Hard Limit Inodes など)を選択します。

  4. 必要に応じて、[フィルタ] オプションを使用して、accounting_type ラベル(usergroupproject など)または id ラベル(特定の UID、GID、プロジェクト ID など)でフィルタして、特定のエンティティを表示します。

割り当てを削除する

割り当てを削除するには、ソフトリミットとハードリミットを 0 に設定します。

sudo lfs setquota -u | g | p | U | G | P UGP_VALUE -b 0 -B 0 -i 0 -I 0 MOUNT_DIR

たとえば、user1 のブロックと inode の割り当てを削除するには、次のようにします。

sudo lfs setquota -u user1 -b 0 -B 0 -i 0 -I 0 /mnt/lustre

デフォルトのプロジェクト ブロックの上限を削除するには、次のようにします。

sudo lfs setquota -P -b 0 -B 0 /mnt/lustre

一般的な問題

Lustre の割り当てを使用する場合は、次の一般的な問題に注意してください。

  • 許可されたキャッシュ: 許可されたキャッシュは、クライアントがデータを書き込むために、オブジェクト ストレージ ターゲット(OST)からストレージ ブロックを「許可」として受け取ることができる Lustre の機能です。クライアントにこの許可されたキャッシュがある場合、データがクライアントのローカル キャッシュにまだ存在し、データがディスクに物理的に書き込まれる前であっても、書き込みオペレーションの成功メッセージをユーザーにすぐに返すことができます。これは、レイテンシを最小限に抑えるパフォーマンスの最適化です。

    許可されたキャッシュにより、割り当て超過の可能性が生じます。許可されたキャッシュを使用すると、サーバー側の割り当てがその間に使い果たされた場合でも、クライアントはキャッシュにデータを書き込み続けることができるため、ユーザーがハードリミットを超える可能性があります。

  • プロジェクト ID の割り当てが正しくない: プロジェクト割り当てが機能するには、ディレクトリ とファイルにlfs project -sprを使用してプロジェクト ID を正しく割り当てる必要があります。 -r を省略すると、プロジェクト ID は既存のファイルとサブディレクトリに適用されません。-s を省略すると、後で作成された新しいファイルとディレクトリはプロジェクト ID を継承しません。

  • 複数の割り当てと「最も制限の厳しいものが優先」: ユーザーには、ユーザー割り当て、1 つ以上のグループ割り当て、1 つ以上のプロジェクト割り当てが同時に適用される可能性があります。Lustre は、これらの上限のうち最も制限の厳しいものを適用します。 つまり、ユーザーの個人割り当てが大きくても、そのプロジェクトのディレクトリ内のファイルに対して、より小さいプロジェクト割り当てによって制限される可能性があります。

  • root ユーザーの割り当てバイパス: root ユーザーの書き込みは、割り当ての適用をバイパスします。 これにより、他のユーザーに割り当てが設定されている場合でも、管理タスクによってファイル システムが満杯になる可能性があります。

  • fallocate は割り当てを尊重しない: ユーザーは fallocate を使用して、ハードリミットを超えるファイル システムの領域を予約できます。