文件系统配额

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

什么是文件系统配额?

在 Managed Lustre 中,您可以设置用户、群组或项目在文件系统中可使用的磁盘空间量和文件数量上限。

配额适用于不同的实体:

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

为以下两种资源类型配置了配额:

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

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

  • 软限制是一种配额阈值,超出该阈值时会触发可配置的宽限期。在宽限期内,用户、群组或项目可以暂时超出软限制,如果存在硬限制,则不得超出硬限制,以便在被阻止之前有时间减少用量。宽限期结束后,如果用量仍高于软限制,系统会将软限制强制执行为硬限制,从而阻止所有新的写入操作,直到磁盘空间或 inode 数量低于软限制为止。

    默认宽限期为一周。

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

管理用户和群组

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)、千字节 (K)、兆字节 (M)、千兆字节 (G) 或太字节 (T) 为单位指定。默认单位为千字节。
  • -i-I 是 inode 使用的软性限制和硬性限制。软限制应小于硬限制。
  • MOUNT_DIR 是受管理的 Lustre 文件系统的装载点。

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

示例

设置用户配额

/mnt/lustre 上的 user1 设置 100 GB 的软块限制、120 GB 的硬块限制、10,000 的软 inode 限制和 12,000 的硬 inode 限制:

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

例如,如需查看 user1/mnt/lustre 上的配额,请运行以下命令:

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

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

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

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

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

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

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