新闻详情

新闻详情

首页 / 资讯中心 / 详情

Linux磁盘配额配置指南:Ext4与XFS完整实操

发布时间:2026/10/1 22:25:13来源:尧图网络
Linux磁盘配额配置指南:Ext4与XFS完整实操
写这篇文章的起因是我上周帮一位客户处理“磁盘写满”的告警。客户这边一台文件服务器/home所在的 ext4 分区被塞满了排查下来是一个开发人员把编译产物、Docker 镜像导出包和几份数据库备份一股脑全丢进了自己的家目录。删数据不难但问题在于如果不加限制这种问题会反复发生。解决办法就是 Linux 磁盘配额Disk Quota。磁盘配额算是 Linux 系统管理里最经典的能力之一但在实际运维中却经常被忽略。不少朋友知道有 quota 这个东西真到用的时候才发现XFS 和 Ext4 两种文件系统上的做法几乎完全不同网上资料又各说各话照着操作容易掉坑。这篇文章我会把 Ext4 和 XFS 的配额配置完整梳理一遍从挂载参数、配额初始化、用户/组/项目配额设置到排查思路全部给到可复制的命令和实操记录。适合正在做 Linux 运维、文件服务器管理或者要给多用户机器统一做存储限额的朋友参考。1. 配额机制的本质XFS 和 Ext4 到底差在哪里1.1 配额管的是什么软限制、硬限制与宽限期配额不是简单地“限一个数”它实际包含三个维度的概念理解清楚再动手后面才不会一脸懵。第一是磁盘容量限额也就是 blocks 这一列限制的是文件实际占用的磁盘块。第二是 inode 限额限制的是文件数量。很多人只盯着容量忘了 inode结果用户写了几十万个 1KB 的小文件容量没超inode 却爆了整个分区连新建目录都做不了。这个坑我踩过后面排查思路里会再提。第三是软限制soft limit、硬限制hard limit和宽限期grace period这套组合。软限制允许用户临时超过但超过的那一刻就开始计算宽限期硬限制是绝对上限到了就拒绝写入。宽限期默认值是 7 天可以自己调整。用生活化的方式理解软限制像是“警告线”到了 10GB 系统会提醒你注意硬限制像是“收费站杆”到了 12GB 直接不放行。如果用户长时间停留在软限制之上宽限期一到哪怕还没到硬限制也会被强制拒绝写入。所以设置配额时软硬限制之间要留出合理的缓冲不能把软限制设得太接近硬限制。1.2 Ext4 与 XFS 配额实现方式对比这两种文件系统都支持配额但实现机制完全不同。Ext4 采用的是“配额文件 扫描数据库”的方式配额数据保存在文件系统根目录下的aquota.user、aquota.group这两个隐藏文件里需要先用quotacheck扫描构建数据库再用quotaon激活。XFS 则完全不同配额信息直接记录在文件系统自身的元数据里没有配额文件也不需要 quotacheck挂载时带上配额选项就生效。用表格说清楚对比项Ext4XFS配额数据存储方式aquota.user / aquota.group 文件文件系统元数据无额外文件是否需要 quotacheck需要用于构建配额数据库不需要也没有这个机制是否需要 quotaon需要不需要挂载即生效配额类型支持用户、组用户、组、项目project常用挂载选项usrquota, grpquotauquota, gquota, pquota主要管理工具edquota, setquota, repquotaxfs_quota这里最关键的区别是 XFS 支持项目配额project quota。项目配额可以按“目录”为单位限制空间而不是按用户或组。比如一台机器上给三个业务团队各划一个目录每个团队限 50GB这正是 XFS 项目配额的典型使用场景。Ext4 的项目配额支持相对较弱实际运维中很少用所以我后面会重点讲 XFS 的项目配额玩法。提示XFS 本身没有 quotacheck 和 quotaon 的概念。如果你在 XFS 文件系统上执行 quotacheck会直接报错“Cannot find filesystem to check”。这不是故障说明你把这套机制用错了文件系统后面排查章节我会展开讲。2. 动手前先做好三件事环境确认与挂载参数2.1 确认文件系统类型与现有挂载选项我见过不少人上来就直接配配额配了半天不生效最后发现目标分区根本不是 ext4 或 XFS而是网络盘或者被 LVM 包了一层。所以第一步一定是确认环境别凭印象用命令说话。# 查看文件系统类型、使用率 df -hT # 查看挂载点对应的设备与挂载选项 findmnt /data mount | grep /data # 查看设备文件系统属性和 UUID blkid /dev/sdb1findmnt和df -hT是我在排查时必用的两条命令前者能直观看出挂载选项里有没有 usrquota 字样后者能确认文件系统类型。比如输出里/data显示为xfs那后面所有步骤都要走 XFS 路线如果显示为ext4就走传统配额文件路线。这里还要多说一句有些发行版默认开启了 systemd 的挂载管理。修改完/etc/fstab之后最好执行systemctl daemon-reload刷新一下挂载单元否则部分系统上 fstab 的变更不会立刻反映到实际挂载中。这个问题在旧资料里很少有人提但现代 Linux 系统上很常见。2.2 修改 /etc/fstab 的正确姿势与注意事项修改挂载参数通常有两种方式一是临时用mount -o remount直接加上配额选项二是改/etc/fstab持久化配置。临时方式适合测试持久化方式才是正式环境的正解。以/data分区为例ext4 的 fstab 配置修改前后对比# 修改前 /dev/sdb1 /data ext4 defaults 0 0 # 修改后增加 usrquota 和 grpquota /dev/sdb1 /data ext4 defaults,usrquota,grpquota 0 0XFS 则在 fstab 中增加对应选项即可/dev/sdb1 /data xfs defaults,uquota,gquota,pquota 0 0改完 fstab 后ext4 大多可以靠 remount 动态生效mount -o remount /data mount | grep /data但这里有一个 XFS 和 Ext4 的显著差异也是很多人踩过坑的地方XFS 的配额选项无法通过 remount 动态加上必须在文件系统初始挂载或者系统启动时生效。也就是说改完 XFS 的 fstab 后remount 大概率不会让配额选项生效最稳妥的办法是计划一个维护窗口重启或者先 umount 再 mount。如果/data上有正在运行的服务不要为了省事直接 umount文件系统被占用时 umount 会失败强行处理可能损坏数据。注意修改 /etc/fstab 之前务必备份最好先把当前内容复制一份。fstab 写错轻则分区挂不上重则系统无法启动。尤其是使用 UUID 的场景设备名变了但 UUID 没变反而更容易排查。3. Ext4 文件系统启用配额完整实操3.1 安装配额工具并确认内核支持Ext4 配额管理依赖系统自带的 quota 工具集里面包含quotacheck、quotaon、edquota、setquota、repquota这些命令。先确认工具是否安装which quotacheck quotaon edquota repquota没有输出就说明没装按发行版安装# Debian / Ubuntu apt install quota -y # RHEL / CentOS / Rocky Linux yum install quota -y # 或新版系统的 dnf dnf install quota -y安装后顺便检查一下内核是否启用了配额支持。绝大多数主流发行版的内核都开了 CONFIG_QUOTA但虚拟机里跑的精简内核有时会裁掉这部分功能zgrep CONFIG_QUOTA /proc/config.gz # 输出 CONFIG_QUOTAy 表示支持如果显示# CONFIG_QUOTA is not set那你得换内核或者换发行版配额功能本身依赖这个内核编译选项。3.2 初始化配额数据库并开启配额功能确认文件系统已经用配额选项挂载后下一步是生成配额数据库。这一步的顺序很重要必须先 quotacheck再 quotaon。quotacheck -cug /data参数含义-c创建配额文件-u扫描用户配额-g扫描组配额。执行成功后在/data根目录下会出现两个隐藏文件ls -l /data/aquota.user /data/aquota.group如果这一步报错“Cannot find filesystem to check”大概率是挂载参数没生效。先回第 2 章确认挂载选项ext4 可以再执行一次mount -o remount /dataXFS 则是另一个故事后面单独讲。数据库生成后激活配额quotaon -ugv /data quotaon -p /dataquotaon -p用来查看当前配额状态能看到 user quota 和 group quota 都处于打开状态就对了。需要说明的是quotacheck 在大型分区上可能跑很久因为它要扫描整个文件系统统计所有文件的所有者。生产环境如果在业务高峰期第一次跑尽量错峰执行。3.3 设置用户配额、组配额与宽限期配额数据库激活后就可以给用户设置限额了。最直观的方式是edquota它会打开一个交互式编辑器edquota -u zhangsan输出大概是这样的Disk quotas for user zhangsan (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/sdb1 0 0 0 0 0 0需要改的就是 blocks 对应的 soft 和 hard 两列单位是 KB。比如要给 zhangsan 设置软限制 10GB、硬限制 12GB把 blocks 的 soft 改成 10485760hard 改成 12582912 就行。inodes 那两列如果不想限制文件数量保持 0 即可。但交互式编辑在批量管理时效率太低我更推荐setquota一条命令搞定setquota -u zhangsan 10240 12288 0 0 /data四个数字依次是软限制块数KB、硬限制块数KB、软限制 inode 数、硬限制 inode 数。所以上面的命令就是 10GB 软限制、12GB 硬限制。组配额同理setquota -g devteam 21474836480 25600000000 0 0 /data提示组配额很适合“一个项目组共用一个共享目录”的场景。单人配额管不住组里相互拷贝文件的情况组配额能从整体上兜底。宽限期默认 7 天可以用edquota -t调整也可以直接用 setquota 的-T参数edquota -t查看用户实际使用量和配额状态quota -u zhangsan repquota -arepquota -a会列出所有启用配额文件系统的完整报告包括用户简单使用情况、软硬限制、宽限期剩余时间是我日常巡检最常用的命令。看到号标记时说明该用户已经超过软限制正在占用宽限期时间。4. XFS 文件系统启用配额完整实操4.1 XFS 配额的工作方式与挂载选项选择XFS 配额的管理哲学和 Ext4 完全不同这里必须先建立正确的认知模型否则后面会一直别扭。XFS 的配额是文件系统原生特性配额计数器直接维护在文件系统元数据里。这意味着没有aquota.user这类配额文件不需要 quotacheck 扫描也不需要 quotaon 激活。配额信息的记录和强制都发生在挂载时指定的选项里。挂载选项有这么几组uquota / usrquota # 用户配额强制 gquota / grpquota # 组配额强制 pquota / prjquota # 项目配额强制 uqnoenforce # 用户配额仅记账不强制 gqnoenforce # 组配额仅记账不强制 pqnoenforce # 项目配额仅记账不强制带 noenforce 后缀的选项是 XFS 很有特色的一点也是我非常推荐的一个部署技巧第一次上线配额时先只记账不强制跑几天看看真实使用量再决定软硬限制怎么定最后改成强制模式。直接上强制模式容易误伤正常业务这个思路在 Ext4 上也能用但 XFS 支持得更干净。挂载参数生效后用state子命令确认xfs_quota -x -c state /data输出会显示 user quota、group quota、project quota 各自的 accounting 和 enforcement 状态。这里要再次强调关键差异XFS 的配额选项不能在 remount 时动态加上。实测下来无论你怎么用mount -o remount折腾挂载参数XFS 的 quota 选项都不会生效必须重启或将文件系统 umount 后重新挂载。4.2 用 xfs_quota 设置用户与组配额XFS 的所有配额管理都通过xfs_quota这个工具完成。-x表示进入专家模式-c后面跟具体的配额命令。给用户设置限额# 用户配额软限制 10GB硬限制 12GB xfs_quota -x -c limit -u bsoft10g bhard12g zhangsan /data给组设置限额xfs_quota -x -c limit -g bsoft30g bhard35g devteam /data查看使用情况xfs_quota -x -c report -h -u /data xfs_quota -x -c report -h -g /data-h是 human-readable输出会显示成 G/M 这样的单位。report输出的列和 repquota 类似能看到每用户的 blocks 使用量、软硬限制和宽限期状态。这里注意一下XFS 调整默认宽限期用的是timer子命令语法是xfs_quota -x -c timer -u -b 7d /data但不同版本细节略有差异。我在生产上更习惯直接用setquota -T设置用户的 grace period语法更统一后面给参考。# 把 zhangsan 的宽限期设为 7 天 setquota -T -u zhangsan 7days 7days /data4.3 项目配额按目录限额的正确玩法项目配额project quota是 XFS 的王牌功能也是它和 Ext4 相比最有优势的地方。场景非常典型一台文件服务器/data下按客户或业务划分目录每个目录限额独立。用户配额管的是“某个用户写多少”项目配额管的是“某个目录树总共放多少”。以/data/website_a这个目录为例给它分配项目 ID 1001限额 50GB。第一步是编辑两个配置文件# /etc/projects 文件定义项目 ID 与目录的映射 echo 1001:/data/website_a /etc/projects # /etc/projid 文件定义项目名称与 ID 的映射 echo website_a:1001 /etc/projid第二步是“初始化”项目目录这一步很多人会漏。必须用project -s给目录打上项目 ID 标记xfs_quota -x -c project -s website_a /data执行后/data/website_a目录及其下的文件会被统一标记为项目 ID 1001。新创建的文件会自动继承父目录的项目 ID所以业务方后续正常写文件、建子目录都不需要额外操作。第三步才轮到设置配额xfs_quota -x -c limit -p bsoft50g bhard55g website_a /data查看项目配额用量xfs_quota -x -c report -h -p /data项目配额有个很实用的细节它不影响文件的权限和属主目录还是那些用户在用只是写入数据时会额外检查项目 ID 的配额。也就是说一个用户既可以在项目 A 里写 30GB又可以在项目 B 里写 30GB两个项目独立统计互不影响。注意用 mv、rsync、tar 等方式迁移文件时项目 ID 可能不会被正确继承导致统计错位。如果发现某个目录的配额使用量明显不符合预期用xfs_quota -x -c project -c website_a /data重新校准目录树的项目标记即可。另外早期版本的 mkfs.xfs 默认不带项目配额特性碰到pquota挂载报错时用xfs_info /data检查是否支持必要时备份数据后用新版 mkfs.xfs 重新格式化。5. 常见问题排查与运维心得5.1 遇到最多的五个问题配额配置本身不难难的是出了问题快速定位。我整理了实际运维中遇到频率最高的五个问题直接做成速查表问题现象可能原因解决思路quotacheck 报 Cannot find filesystem to check在 XFS 上执行了 quotacheck或 ext4 未以配额选项挂载确认文件系统类型XFS 不要用 quotacheckext4 先确认挂载参数配额不生效用户仍能超限写入挂载参数没生效XFS 只是 remount 过mount 确认参数XFS 需要重启或 umount 后挂载quotaon 报错 quota on /data failed没有先执行 quotacheck 生成配额文件先 quotacheck -cug再 quotaon用户收到 Disk quota exceeded超过硬限制或软限制宽限期已耗尽用 repquota / xfs_quota report 查看确认是否误伤业务修改 fstab 后系统无法正常挂载fstab 参数写错、设备名或 UUID 不匹配启动到单用户模式或救援盘修正 fstab务必先备份除了这张表XFS 项目配额还有一个容易碰到的问题项目目录统计不到新写入的数据或者统计值一直不变。这多半是数据是通过 NFS 或直接对底层目录操作写入的绕过了项目初始化标记。我当时的处理办法是确认写入路径都经过/data下的项目目录跑一次project -s重新标记整个目录树再配合report -p观察数值是否变化。5.2 我的几条实操建议配额功能本身不难配难的是配得合理、管得长久。结合这几年在文件服务器、业务主机上的实际操作说几条我自己沉淀下来的经验。第一先记账后执法。XFS 的 noenforce 选项和 Ext4 的只记不发模式都是好工具。首次上线配额时先用两周时间摸清每个用户或目录的真实使用量再根据数据定软硬限制。我见过太多人一上来就拍脑袋定个 10GB结果业务正常写 15GB第二天全线告警非常尴尬。第二配额值要留缓冲。软硬限制之间至少留 15%-20% 的差距。宽限期是按天算的软限制到了之后用户需要时间清理空间或者申请扩容。如果软硬限制只差 1GB用户一个晚上写点文件就撞上硬限制等于没给宽限期。第三巡检脚本比人工查看可靠。配额和磁盘告警一样需要定期看用 cron 把 repquota 或 xfs_quota report 的结果汇总发到邮箱比等用户报障再处理主动得多。我常用的裁剪版命令是直接把用量超过 80% 的用户过滤出来repquota -a | awk $3 0 { if ($3/$4 0.8) print }第四别忽略 inode 配额。小文件写爆 inode 的问题在日志系统、缓存目录上非常常见而且一旦 inode 耗尽整个分区无法创建新文件影响的不是一个用户而是所有依赖该分区的服务。给用户设置容量配额的同时顺手把 inode 软硬限制一起设上损失不了多少维护成本。第五生产环境变更先演练。配额的生效、失效、扩容流程最好在测试机上完整走一遍尤其是 XFS 这种需要重启才能启用配额的文件系统。我踩过的坑是在线上服务器改完 fstab 后以为 remount 就能生效结果配额一直没起作用白跑一趟维护窗口。后来经验是XFS 的配额变更一律按“改 fstab 计划重启”处理测试环境先验证重启后配额确认生效再上生产。最后再分享一个经验配额最怕的其实不是技术问题而是“限错了对象”。给用户配配额之前先搞清楚这块盘是给谁用的、业务峰值是多少、有没有临时大文件目录。多租户目录用 XFS 项目配额用户家目录用 Ext4 用户配额加组配额兜底大部分场景都能覆盖。配额配置完成之后第一时间用配额工具复查一遍确认 enforcement 状态已经打开再通知团队开始正式使用这才是靠谱的上线节奏。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

复合材料空气耦合超声单侧检测:COMSOL仿真关键参数与规律分析 2026/10/1 23:12:35

复合材料空气耦合超声单侧检测:COMSOL仿真关键参数与规律分析

我第一次在空气耦合超声实验台上看到信号时,几乎以为探头坏了——探头都快贴到碳纤维板上了,示波器上却只有一根近乎平直的基线。这不是设备故障,而是空气和复合材料之间的声阻抗差异大到了令人绝望的地步。后来我把这套问题搬进COMSOL做空气…

阅读更多 →
新版向日葵本地凭据存储分析与密码提取安全审计 2026/10/1 23:12:35

新版向日葵本地凭据存储分析与密码提取安全审计

1. 项目概述:向日葵新版密码抓取的真正含义远程控制软件在运维和日常支持里几乎是刚需,向日葵则是国内被聊得最多的一款。我这次盯上它,不是想搞什么黑产操作,而是因为在一次合规授权的外围安全审计中,客户点名要求验证…

阅读更多 →
JMeter环境搭建与配置实战:JDK版本、JVM内存与常见报错全解析 2026/10/1 23:12:08

JMeter环境搭建与配置实战:JDK版本、JVM内存与常见报错全解析

JMeter环境搭好,后面的性能测试才跑得起来。这句话我每次带新人都会先说一遍,原因很简单:性能测试工具不像普通软件,不是下载完双击就能直接用,JMeter底层是纯Java程序,从JDK版本到内存分配,再到…

阅读更多 →
中文大模型行业落地全流程:选型、LoRA微调、vLLM部署与避坑实践 2026/10/1 23:11:41

中文大模型行业落地全流程:选型、LoRA微调、vLLM部署与避坑实践

简介:面向人工智能应用开发者与行业技术决策者,聚焦中文大语言模型向行业落地的核心环节,涵盖指令数据、安全对齐数据与说明文档,适用于构建公司级或行业级大模型应用场景。包内共8个文件,包含三个jsonl与三个json格式…

阅读更多 →
生产者-消费者模式与并行任务调度:从BlockingQueue到虚拟线程的工程实践 2026/10/1 23:11:34

生产者-消费者模式与并行任务调度:从BlockingQueue到虚拟线程的工程实践

我想先把这次做的东西说清楚——这个项目围绕的是生产者-消费者模式、并行任务调度,以及一个经常被忽略的细节:更简洁的注释和每项改进的详细解释。我自己维护过一套高吞吐的通知推送组件,早期代码就是“能跑就行”的水平,队列选型…

阅读更多 →
C++类模板从入门到工程实践:实例化、特化与常见陷阱 2026/10/1 23:11:34

C++类模板从入门到工程实践:实例化、特化与常见陷阱

学 C 的人,几乎没有不碰类模板(template)的。STL 容器、智能指针、标准库算法,随便拉一个出来都是类模板或函数模板的产物。但我发现一个现象:很多人能看懂 vector、unique_ptr的用法,一转身要自己定义一个…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉