檔案系統配額

Google Cloud Managed Lustre 檔案系統支援使用者、群組和專案配額,方便管理員管理儲存空間用量,確保資源分配公平。本文說明如何設定、查看及管理這些配額。

什麼是檔案系統配額?

在 Managed Lustre 中,您可以設定配額,限制使用者、群組或專案在檔案系統中可使用的磁碟空間量和檔案數量。

配額適用於不同實體:

  • 使用者配額會限制個別非根使用者消耗的儲存空間。
  • 群組配額會限制特定群組中所有非根成員的儲存空間用量。
  • 專案配額會限制與特定專案 ID 相關聯的檔案和目錄所耗用的儲存空間。這個專案 ID 是 Lustre 檔案系統 ID,使用 lfs project 定義,並非您的Google Cloud 專案 ID。詳情請參閱「設定專案配額」。

配額是針對下列兩種資源類型設定:

  • 區塊限制是指可使用的磁碟空間量上限。
  • Inode 限制是指可建立的檔案和目錄數量上限。

每種資源類型可有兩層限制:

  • 軟性限制是配額門檻,超出門檻時會觸發可設定的寬限期。在寬限期內,使用者、群組或專案可暫時超出軟性限制,最多可超出硬性限制 (如有),讓他們有時間減少用量,以免遭到封鎖。寬限期結束後,如果用量仍超過軟性限制,系統就會強制執行軟性限制,將其視為硬性限制,並封鎖所有新的寫入作業,直到磁碟空間或 inode 數量低於軟性限制為止。

    預設的寬限期為一週。

  • 硬性限制是指絕對上限。達到這個上限後,任何後續寫入作業都會失敗,並傳回「Disk quota exceeded」(超過磁碟配額) 錯誤。

管理使用者和群組

Lustre 會依據用戶端的 POSIX 屬性,取得使用者和群組名稱與 ID。

用戶端發出檔案系統要求時,會將本機 UID 和 GID 傳送至 Lustre 伺服器。伺服器會使用這些 POSIX 屬性,強制執行標準檔案權限並追蹤配額用量。

如要在多使用者環境中維持一致的行為,所有掛接 Lustre 檔案系統的用戶端都必須同步處理 UID 和 GID 對應,通常是透過 LDAP 或 NIS 等集中式服務管理。

根使用者不受配額限制。使用 sudo 執行的指令也會略過配額檢查。

事前準備

如要管理 Lustre 配額,您需要:

  • 用戶端可存取有效的 Google Cloud Managed Lustre 檔案系統。
  • sudo 或用戶端系統的 Root 權限,才能執行 lfs 指令。

設定配額

使用 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)、KB (K)、MB (M)、GB (G) 或 TB (T) 為單位指定。預設單位為 KB。
  • -i-I 分別是 inode 用量的軟性限制和硬性限制。軟性限制應小於硬性限制。
  • MOUNT_DIR 是 Managed Lustre 檔案系統的掛接點。

請注意,您無法在建立配額的同時設定寬限期。軟性限制的預設寬限期為一週。如要更新寬限期,請參閱「設定寬限期」。

範例

設定使用者配額

user1 設定軟性區塊限制 100 GB、硬性區塊限制 120 GB、軟性 inode 限制 10,000 和硬性 inode 限制 12,000:user1/mnt/lustre

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

設定群組配額

在「/mnt/lustre」上為「groupA」設定 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 的目錄或檔案路徑。只能指定一個路徑或檔案。

    如需其他標記和資訊,請從用戶端執行 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。這項指令會覆寫指定使用者、群組或專案的先前設定。

設定寬限期

寬限期是指使用者、群組或專案超過軟性限制後,軟性限制變成硬性限制前的時間長度。根據預設,這個值為一週。寬限期適用於所有使用者、群組或專案,無法針對特定 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/lustre 上查看 user1 的配額:

sudo lfs quota -u user1 /mnt/lustre

請注意,如要查看其他使用者的配額和用量,必須使用 sudo 執行指令。

輸出內容如下:

  • Filesystem:Lustre 掛接點。
  • kbytes:目前以 KB 為單位的磁碟用量。
  • bquota:以 KB 為單位的軟性封鎖限制。
  • blimit:硬性封鎖限制 (以 KB 為單位)。
  • bgrace:超過軟性限制後,剩餘的寬限期。星號 (*) 表示超出軟性限制。
  • files:使用的 inode 數量。
  • iquota:軟性 inode 限制。
  • ilimit:硬性節點限制。
  • 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 配額時,請注意下列常見問題:

  • 授權快取授權快取是 Lustre 的一項功能,可讓用戶端從物件儲存目標 (OST) 接收儲存空間區塊做為「授權」,用於寫入資料。如果用戶端已取得這項快取授權,即使資料仍在用戶端的本機快取中,且尚未實際寫入磁碟,用戶端仍可立即傳回寫入作業的成功訊息給使用者。這項最佳化功能可盡量縮短延遲時間。

    授予的快取可能會導致配額超出上限。因為授權的快取允許用戶端繼續將資料寫入快取,即使伺服器端配額已用盡,使用者仍可能超出硬性限制。

  • 專案 ID 指派錯誤:如要使用專案配額,必須使用 lfs project -spr 為目錄和檔案正確指派專案 ID。如果省略 -r,表示專案 ID 不會套用至現有檔案和子目錄。如果省略 -s,稍後建立的新檔案和目錄就不會沿用專案 ID。

  • 多個配額和「最嚴格者勝出」:使用者可能同時受到使用者配額、一或多個群組配額,以及一或多個專案配額的限制。Lustre 會強制執行最嚴格的限制。 也就是說,使用者可能擁有大量個人配額,但如果專案目錄中的檔案超出專案配額,就會受到限制。

  • 略過根使用者配額root 使用者的寫入作業會略過配額強制執行。 即使為其他使用者設定配額,管理工作仍可能填滿檔案系統。

  • fallocate 不會遵守配額:使用者可以透過 fallocate 在檔案系統上保留超過硬性限制的空間。