注意

本文档适用于 Ceph 开发版本。

CephFS 配额

CephFS允许在文件系统的任何目录上设置配额。配额可以限制该目录层次结构中该点下存储的字节数字节或文件数量存储在该目录层次结构中的数量。 stored beneath that point in the directory hierarchy.

与CephFS中的大多数其他事物一样,配额使用虚拟扩展属性进行配置:

  • ceph.quota.max_files-- 文件限制

  • ceph.quota.max_bytes-- 字节限制

如果扩展属性出现在目录上,这意味着该目录配置了配额。如果它们不存在,则该目录未设置配额(尽管父目录可能已配置)。

要设置配额,请使用值在CephFS目录上设置扩展属性:

setfattr -n ceph.quota.max_bytes -v 100000000 /some/dir     # 100 MB
setfattr -n ceph.quota.max_files -v 10000 /some/dir         # 10,000 files

ceph.quota.max_bytes也可以使用人类友好的单位设置:

setfattr -n ceph.quota.max_bytes -v 100K /some/dir          # 100 KiB
setfattr -n ceph.quota.max_bytes -v 5Gi /some/dir           # 5 GiB

Note

即使输入SI单位,值也将严格转换为IEC单位,例如1K转换为1024字节。

要查看配额限制:

$ getfattr -n ceph.quota.max_bytes /some/dir
# file: dir1/
ceph.quota.max_bytes="100000000"
$
$ getfattr -n ceph.quota.max_files /some/dir
# file: dir1/
ceph.quota.max_files="10000"

Note

运行getfattr /some/dir -d -m -对于CephFS目录将打印没有任何CephFS扩展属性。这是因为CephFS内核和FUSE客户端隐藏了此信息listxattr(2)系统调用。相反,可以通过运行getfattr /some/dir -n ceph.<some-xattr>.

来查看特定的CephFS扩展属性。0.

要删除或禁用配额,请删除相应的扩展属性或将值设置为

$ setfattr -x ceph.quota.max_bytes /some/dir
$ getfattr /some/dir -n ceph.quota.max_bytes
/some/dir/: ceph.quota.max_bytes: No such attribute
$
$ setfattr -x ceph.quota.max_files /some/dir
$ getfattr /some/dir/ -n ceph.quota.max_files
/some/dir/: ceph.quota.max_files: No such attribute

通过将值设置为零来删除:

$ setfattr -n ceph.quota.max_bytes -v 0 /some/dir
$ getfattr /some/dir -n ceph.quota.max_bytes
/some/dir/: ceph.quota.max_bytes: No such attribute
$
$ setfattr -n ceph.quota.max_files -v 0 /some/dir
$ getfattr /some/dir/ -n ceph.quota.max_files
/some/dir/: ceph.quota.max_files: No such attribute

空间使用报告和CephFS配额

当CephFS挂载的根目录上设置了配额时,空间使用报告工具(如df)报告的CephFS可用空间基于配额限制。也就是说,available space = quota limit - used space instead of available space = total space - used space.

此行为可以通过在ceph.conf:

client quota df = false

限制

  1. 的客户端部分设置以下选项来禁用。CephFS配额依赖于挂载文件系统的客户端的配合,在达到限制时停止写入者。修改或对抗性客户端无法被阻止写入所需的所有数据。在客户端完全不受信任的环境中,不应依赖配额来防止填满系统。

  2. Quotas are imprecise.在达到配额限制后,正在写入文件系统的进程将在短时间内被停止。它们不可避免地会被允许在配置的限制之上写入一些数据。它们能够超出配额的程度主要取决于时间,而不是数据量。一般来说,在越过配置限制后的10秒内,写入者将被停止。

  3. Quotas在内核客户端4.17及以上版本中实现。Quotas由用户空间客户端(libcephfs,ceph-fuse)支持。Linux内核客户端>= 4.17支持CephFS配额,但仅限于mimic+集群。内核客户端(即使是最新版本)将无法处理旧集群上的配额,即使它们可能能够设置配额扩展属性。

  4. 当与基于路径的挂载限制一起使用时,必须仔细配置配额。客户端需要能够访问配置配额的目录inode才能执行它们。如果客户端根据MDS功能对特定路径(例如,/home/user)进行了限制,并且他们在无法访问的祖先目录(例如,/home)上配置了配额,则客户端不会执行它。在使用基于路径的访问限制时,请确保在客户端受限的目录(例如,/home/user)上配置配额或在其嵌套内容下配置。

    对于内核客户端,它需要能够访问配置配额的目录inode的父级才能执行它们。如果目录路径(例如,/home/volumes/group)上配置了配额,则kclient需要能够访问父级(例如,/home/volumes).

    创建此类用户的示例命令如下:

    $ ceph auth get-or-create client.guest mds 'allow r path=/home/volumes, allow rw path=/home/volumes/group' mgr 'allow rw' osd 'allow rw tag cephfs metadata=*' mon 'allow r'
    

    See also: https://tracker.ceph.com/issues/55090

  5. 已删除或更改的快照文件数据不计入配额。 See also: http://tracker.ceph.com/issues/24284

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.