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>
相关文章
|
监控 调度 开发工具
IO神器blktrace使用介绍
## 前言 1. blktrace的作者正是block io的maintainer,开发此工具,可以更好的追踪IO的过程。 2. blktrace 结合btt可以统计一个IO是在调度队列停留的时间长,还是在硬件上消耗的时间长,利用这个工具可以协助分析和优化问题。 ## blktrace的原理 一个I/O请求的处理过程,可以梳理为这样一张简单的图: ![](http://image
22424 0
|
存储 固态存储 Linux
BLOCK 层这么多参数都是什么意思?!
每个 request queue 会维护一个 struct queue_limits 结构来描述对应的块设备的硬件参数,这些参数描述了硬件存储单元的组织方式,会影响 block layer 的很多行为,其中部分参数在 `/sys/block//queue/` 下导出 ```c struct request_queue { struct queue_limits limits; ... } `
5347 1
|
存储 数据安全/隐私保护
RPMB说明与使用(Replay Protected Memory Block)
RPMB说明与使用(Replay Protected Memory Block)
5721 0
|
弹性计算 调度 容器
在Kubernetes集群中通过LocalVolume Provisioner使用本地盘
介绍 阿里云在部分ECS类型中提供了本地盘配置,本地盘具有低时延、高随机IOPS、高吞吐量和高性价比的优势,在一些对性能要求很高的应用中有很大优势。 在Kubernetes系统中使用本地盘可以通过HostPath、LocalVolume等类型的PV使用: HostPath: 卷本身不带有调度信息,如果想对每个pod固定在某个节点上,就需要对pod配置nodeSelector等调度信息; LocalVolume: 卷本身包含了调度信息,使用这个卷的pod会被固定在特定的节点上,这样可以很好的保证数据的连续性。
6521 0
|
10月前
|
运维 安全 Ubuntu
掌控磁盘空间的艺术(Linux文件系统配额完全入门指南)
本文介绍Linux文件系统配额(Quota)的配置与管理,帮助管理员限制用户磁盘空间和文件数量,防止资源滥用。涵盖启用配额、设置软硬限制、常用命令及最佳实践,适用于主流Linux发行版,提升系统稳定性与安全性。
|
监控 Java 网络性能优化
容器内存可观测性新视角:WorkingSet 与 PageCache 监控
本文介绍了 Kubernetes 中的容器工作内存(WorkingSet)概念,它用于表示容器内存的实时使用量,尤其是活跃内存。
58042 140
容器内存可观测性新视角:WorkingSet 与 PageCache 监控
|
资源调度 算法 Linux
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
4465 0
|
NoSQL 程序员 Linux
轻踩一下就崩溃吗——踩内存案例分析
踩内存问题分析成本较高,尤其是低概率问题困难更大。本文详细分析并还原了两个由于动态库全局符号介入机制(it's a feature, not a bug)触发的踩内存案例。
|
Linux Shell Docker
如何在Docker容器中使用巨页(大页)
在linux环境下常规页面大小是4K,常规巨页大小有两种一种是2MB,一种是1GB。巨页的好处是:减少硬件tlb miss,如此在连续内存访问场景下可以得到较大的性能提升。
5970 0