Ext4 开启 project quota

简介: # quota 介绍 ## project quota 介绍 quota 子系统用于限制磁盘的使用量。 从限制的主体进行分类,quota 包含 user quota、group quota 与 project quota 三部分。顾名思义,user quota、group quota 限制的主体分别是 user、user group,而 project quota 限制的主体则是

quota 介绍

project quota 介绍

quota 子系统用于限制磁盘的使用量。

从限制的主体进行分类,quota 包含 user quota、group quota 与 project quota 三部分。顾名思义,user quota、group quota 限制的主体分别是 user、user group,而 project quota 限制的主体则是 project id。当一个目录下的所有子目录和文件拥有相同的 project id 时,就可以限制一个目录下总的磁盘使用量。

quota 子系统其实是一项“古老”的特性,user quota 与 group quota 早在 Linux v2.6 就开始支持,而 project quota 则来得相对晚一些。project quota 特性最初来源于 XFS,Linux v4.5 开始 ext4 才正式支持 project quota。

quota 配额

quota 从限制的对象进行分类,包括 block quota 与 inode quota 两部分。

限制的类型又包含 softlimit 与 hardlimit 两类,其中 hardlimit 是不可超越的,即 inode/block 分配过程中若当前占用的 inode/block 数量超过 hardlimit,那么分配过程就会失败。

softlimit 是可以暂时超越的,inode/block 分配过程中若当前占用的 inode/block 数量超过 softlimit 但是尚未超过 hardlimit,那么只会打印 warnning 信息,但是分配过程并不会失败。

但是系统不能长时间超过 softlimit,系统可以超过 softlimit 的最长时间称为 grace time,在第一次超过 softlimit 的时候开始计时,在 grace time 时间以内,尽管当前占用的 inode/block 数量超过 softlimit,但是分配过程不会失败;而如果 grace time 时间以后,当前占用的 inode/block 数量仍然没有降到 softlimit 以下,此时分配过程就会失败。

grace time 参数是 filesystem wide 统一的,即同一个文件系统(磁盘分区)共用同一份 grace time 参数。

注意
测试的时候,root 用户具有 CAP_SYS_RESOURCE 权限,因而不受 hardlimit 限制。

使用步骤

1 格式化文件系统

mkfs 格式化文件系统时打开 "project,quota" 特性:

mkfs.ext4 -O project,quota <device>

或者对现有的文件系统打开 "project,quota" 特性:

tune2fs -O project,quota <device>

2 开启/关闭 prjquota 限制

quota 子系统实际上实现有两种功能:
1) accounting,即统计各个 project id 分组的 inode/block 使用量;
2) limit,即在 accounting 的基础上,对各个 project id 分组的 inode/block 使用量上限进行限制。

格式化文件系统时打开 "project,quota" 特性,实际上只是开启 accounting 功能,使用默认参数挂载文件系统时,只是开启 accounting 功能,limit 功能并没有开启。此时需要使用 quotaon 手动开启 limit 功能,或者使用 prjquota 挂载参数自动开启 limit 功能。

2.1 查看 quota 状态

使用 quotaon -Ppv 来查看文件系统 accounting/limit 这两种功能的开启情况。

例如在 limit 功能开启前:

# print quota state
quotaon -Ppv <mntpoint>

输出如下:

project quota on /mnt (/dev/vdb) is on (accounting)

表示 accounting on, limit off。

使用 quotaon 手动开启 limit 功能:

# turning quota on 
quotaon -P <mntpoint>

此时 quota 的状态变为:

# print quota state
quotaon -Ppv <mntpoint>

输出如下:

project quota on /mnt (/dev/vdb) is on (enforced)

表示 accounting on, limit on。

2.2 quotaon 开启

使用默认参数挂载文件系统时,只是开启 accounting 功能,limit 功能并没有开启,需要通过 quotaon 手动开启:

quotaon -P <mntpoint>

2.3 prjquota 挂载参数开启

使用 "prjquota" 参数挂载文件系统时,默认自动打开 project quota 限制功能。

mount -o prjquota <device> <mntpoint>

2.4 quotaoff 关闭

使用 quotaoff 关闭 project quota 限制功能。

quotaoff -P <mntpoint>

3 project id

3.1 设置 project id

使用 chattr -p 设置文件或目录的 project id

chattr -p <projectid> <file|directory>

但是此时在目录下创建的子文件或子目录并不会继承父目录的 project id,需要使用 chattr +P 开启目录的继承 project id 的特性:

chattr +P <file|directory>

或者直接使用以下命令同时设置 project id 和开启继承特性:

chattr +P -p <projectid> <file|directory>

3.2 查看 project id

使用 lsattr -p 获取文件的 projec id:

lsattr -p 

4 prjquota 配额

4.1 edquota 设置配额

使用 edquota 设置特定 project id 的配额:

edquota -P -f <mntpoint> <projectid>

执行 edquota 命令会进入一个 vim 界面,此时用户可以设置 inode/block 的 soft/hard limit。

例如:

edquota -P -f /dev/vdb 124

输出如下:

Disk quotas for project 124 (pid 124):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vdb                          4          0          0          2        0        0                         0          0          0          0        0        0

4.2 setquota 设置配额

也可以使用 setquota 设置特定 project id 的配额:

setquota -P <projectid> <block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> <mntpoint>

4.3 repquota 查看配额

使用 repquota 查看所有 project id 的配额:

repquota -P <mntpoint>
相关文章
创建asm disk 磁盘组出错! ORA-15018 And ORA-15107 (Doc ID 2678808.1)
ORA-15018: diskgroup cannot be created ORA-15107: missing or invalid ASM disk name
131 0
|
6月前
|
SQL
How To Resize An ASM Disk? (Doc ID 470209.1)
1) Please backup the database(s) contained inside the associated diskgroup. 2) Then shutdown the databases contained inside the associated diskgroup. 3) Dismount the associated diskgroup to verify no client database connections are accessing this specific diskgroup: SQL> alter diskgroup <diskgro
46 2
|
6月前
|
监控 Kubernetes 应用服务中间件
【最佳实践】使用CloudLens排查文件/目录数超限问题(STAT_LIMIT_ALARM, DIR_EXCEED_LIMIT_ALARM)
本文主要介绍如何使用CloudLens for SLS定位和解决iLogtail日常使用中的常见问题之一:包括STAT_LIMIT_ALARM, DIR_EXCEED_LIMIT_ALARM等诊断错误的文件/目录数超限问题,。
481 0
【最佳实践】使用CloudLens排查文件/目录数超限问题(STAT_LIMIT_ALARM, DIR_EXCEED_LIMIT_ALARM)
|
文字识别 前端开发 Oracle
|
Oracle 关系型数据库 数据库