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

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

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

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

割り当てはさまざまなエンティティに適用されます。

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

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

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

各リソースタイプには、次の 2 つの上限レベルがあります。

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

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

  • ハードリミットは絶対最大値を定義します。この上限に達すると、それ以降の書き込みオペレーションは失敗し、「ディスク割り当て超過」エラーが返されます。

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

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

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

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

ルートユーザーは割り当ての対象外です。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 でユーザーを指定します。
  • -g は、グループをグループ名または GID で指定します。
  • -p は、プロジェクト ID でプロジェクトを指定します。
  • UGP は、特定の割り当てが設定されていないユーザー、グループ、プロジェクトのデフォルトの割り当てを設定します。
  • UGP_VALUE は、ユーザー名、グループ名、UID、GID、プロジェクト ID です。デフォルトのユーザー、グループ、プロジェクトの割り当てを指定する場合は、この値を省略します。
  • -b-B は、ブロック使用量のソフト制限とハード制限です。ソフト上限はハード上限より小さくする必要があります。値は、バイト(B)、キロバイト(K)、メガバイト(M)、ギガバイト(G)、テラバイト(T)で指定できます。デフォルトの単位はキロバイトです。
  • -i-I は、inode 使用量のソフト制限とハード制限です。ソフト上限はハード上限より小さくする必要があります。
  • MOUNT_DIR は、マネージド 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 を継承します。
    • -r は、プロジェクト ID をすべての子ディレクトリとファイルに再帰的に適用します。
    • -p は、指定されたファイルまたはディレクトリに指定されたプロジェクト 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

割り当てを削除する

割り当てを削除するには、ソフトリミットとハードリミットを 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 ユーザーの書き込みは割り当ての適用をバイパスします。これにより、他のユーザーに割り当てが設定されている場合でも、ファイル システムが管理タスクでいっぱいになる可能性があります。

  • fallocate が割り当てを尊重しない: ユーザーは fallocate を使用して、ハード上限を超えるファイル システムの容量を予約できます。