文件系统配额

Google Cloud Managed Lustre 文件系统支持用户、群组和项目配额,让管理员能够管理存储空间消耗并确保公平分配资源。本文档介绍了如何配置、查看和管理这些配额。

什么是文件系统配额?

借助 Managed Lustre 中的配额,您可以针对用户、群组或项目在文件系统内消耗的磁盘空间量和文件数量设置限制。

配额适用于不同的实体:

  • 用户配额 限制单个非根用户消耗的存储空间。
  • 群组配额 限制特定群组的所有非根成员消耗的存储空间。
  • 项目配额 限制与特定项目 ID 相关联的文件和目录消耗的存储空间。此项目 ID 是 Lustre 文件 系统标识符,使用 lfs project 定义,而不是您的 Google Cloud 项目 ID。如需了解详情,请参阅 设置项目配额

配额针对两种资源类型进行配置:

  • 块限制 是对可使用的磁盘空间量的限制。
  • Inode 限制 是对可创建的文件和目录数量的限制。

每种资源类型都可以有两个级别的限制:

  • 软限制 是一种配额阈值,超出该阈值时会触发可配置的宽限期。在此宽限期内,用户、群组或项目可以暂时超出软限制(如果存在硬限制,则最多超出硬限制),以便有时间减少用量,避免被屏蔽。宽限期结束后,如果用量仍高于软限制,则软限制将作为硬限制强制执行,从而屏蔽所有新写入操作,直到磁盘空间或 inode 计数降至软限制以下为止。

    默认情况下,宽限期为一周。

  • 硬限制 定义了绝对上限。如果达到此限制,任何进一步的写入操作都会失败,并返回“磁盘配额超出”错误。

管理用户和群组

Lustre 依赖于客户端的 POSIX 属性来获取用户和群组名称及 ID。

当客户端发出文件系统请求时,它会将本地 UID 和 GID 发送到 Lustre 服务器。服务器使用这些 POSIX 属性来强制执行标准文件权限并跟踪配额用量。

为了在多用户环境中保持一致的行为,所有装载 Lustre 文件系统的客户端都必须具有同步的 UID 和 GID 映射,这些映射通常通过 LDAP 或 NIS 等集中式服务进行管理。

根用户不受配额限制。使用 sudo 运行的命令也会绕过配额检查。

准备工作

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

  • 客户端访问处于活跃状态的 Google Cloud Managed Lustre 文件系统。
  • 客户端系统上的 sudo 或根权限,以便执行 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 指定用户。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 文件系统的装载点。

请注意,您无法在创建配额的同时配置宽限期。软限制的默认宽限期为一周。如需更新 宽限期,请参阅配置宽限期

示例

设置用户配额

/mnt/lustre 上的 user1 设置软块限制为 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/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。
    • -p 指示命令在指定的文件或目录上设置给定的项目 ID。
    • -r 将项目 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/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. 在 Google Cloud 控制台中,前往 监控 > Metrics Explorer 页面。

    转到 Metrics Explorer

  2. 选择指标 字段中,搜索并选择 Lustre 配额实体 资源。

  3. 选择要查看的特定配额指标(例如配额已用字节数配额硬限制 Inode )。

  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 配额时,请注意以下常见问题:

  • 授予的缓存授予的缓存是 Lustre 的一项功能,它允许客户端从对象存储目标 (OST) 接收存储块作为“授予”,以便写入数据。当客户端拥有此授予的缓存时,即使数据仍在客户端的本地缓存中,并且在数据实际写入磁盘之前,它也可以立即向用户返回写入操作的成功消息。这是一种性能优化,可最大限度地减少延迟。

    授予的缓存可能会导致配额超出。由于授予的缓存允许客户端继续将数据写入其缓存,即使其服务器端配额在此期间已用尽,因此用户可能会超出其硬限制。

  • 项目 ID 分配不正确:如需使项目配额正常运行,必须使用 lfs project -spr 为目录 和文件正确分配项目 ID。 忽略 -r 意味着项目 ID 不会应用于现有文件和子目录。忽略 -s 意味着稍后创建的新文件和目录不会继承项目 ID。

  • 多个配额和“最严格的配额优先” :用户可以同时受到用户配额、一个或多个群组配额以及一个或多个项目配额的限制。Lustre 会强制执行这些限制中最严格的限制。 这意味着,用户可能拥有较大的个人配额,但会受到该项目目录中文件的较小项目配额的限制。

  • 根用户配额绕过root 用户的写入操作会绕过配额强制执行。 即使为其他用户设置了配额,这也可能导致文件系统被管理任务填满。

  • fallocate 不遵守配额 :用户可以使用 fallocate 在文件系统上预留超出硬限制的空间。