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
21060 0
|
存储 数据安全/隐私保护
RPMB说明与使用(Replay Protected Memory Block)
RPMB说明与使用(Replay Protected Memory Block)
4872 0
|
弹性计算 调度 容器
在Kubernetes集群中通过LocalVolume Provisioner使用本地盘
介绍 阿里云在部分ECS类型中提供了本地盘配置,本地盘具有低时延、高随机IOPS、高吞吐量和高性价比的优势,在一些对性能要求很高的应用中有很大优势。 在Kubernetes系统中使用本地盘可以通过HostPath、LocalVolume等类型的PV使用: HostPath: 卷本身不带有调度信息,如果想对每个pod固定在某个节点上,就需要对pod配置nodeSelector等调度信息; LocalVolume: 卷本身包含了调度信息,使用这个卷的pod会被固定在特定的节点上,这样可以很好的保证数据的连续性。
6278 0
|
11月前
|
存储 人工智能 固态存储
DeepSeek开源周第五弹之一!3FS:支撑V3/R1模型数据访问的高性能分布式文件系统
3FS是DeepSeek开源的高性能分布式文件系统,专为AI训练和推理任务设计,提供高达6.6 TiB/s的读取吞吐量,支持强一致性保障和通用文件接口,优化AI工作负载。
1593 2
DeepSeek开源周第五弹之一!3FS:支撑V3/R1模型数据访问的高性能分布式文件系统
|
Ubuntu Linux 数据库
【Linux】深入了解Linux磁盘配额:限制用户磁盘空间的利器
【Linux】深入了解Linux磁盘配额:限制用户磁盘空间的利器
|
11月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
运维 监控 容器
一行超长日志引发的 “血案” - Containerd 频繁 OOM 背后的真相
在Sealos公有云中,6月10日北京和广州可用区服务器遭遇突发问题,内存使用率飙升导致服务中断。疑似内存泄露,但升级服务器配置后问题仍重现。排查发现Containerd进程内存占用异常,升级Containerd至1.7.18未解决问题。通过pprof分析和日志检查,发现因`max_container_log_line_size`配置为-1,导致超长日志一次性加载内存。修复该参数为16384后,问题解决。事件强调了默认配置合理性、日志管理、监控和源码理解的重要性。
986 1
一行超长日志引发的 “血案” - Containerd 频繁 OOM 背后的真相
|
存储 缓存 数据管理
ceph存储 一文看懂目录配额(从入门到进阶,内涵完整流程和源码分析)
在Ceph文件系统(CephFS)中,目录配额是一项功能,它允许管理员限制特定目录下可以使用的存储空间总量和/或文件数量。这项功能对于控制资源消耗和防止个别用户或应用程序过度占用共享存储资源特别有用。
1195 1
|
存储 监控 Docker
如何限制docker使用的cpu,内存,存储
如何限制docker使用的cpu,内存,存储
|
存储 Linux
在Linux中,如何在Linux中设置磁盘配额?
在Linux中,如何在Linux中设置磁盘配额?