先确认内核支持及文件系统挂载时启用usrquota/grpquota选项,再用sudo quota -u $user检查用户配额;若报错则需sudo quotacheck -cug /home创建数据库,最后sudo quotaon /home启用配额。

如何快速确认当前用户是否启用了磁盘配额
没启用配额,后面所有操作都白搭。先看内核是否支持、文件系统是否挂载了配额选项,再查用户有没有被分配限额。
- 运行
mount | grep "quota",确认目标分区(比如/home)挂载时带了usrquota或grpquota - 检查
/etc/fstab对应行是否包含usrquota(用户级)或grpquota(组级),没有就加进去,然后sudo mount -o remount /home - 用
sudo quota -u $USER查当前用户——如果报错user not known to quota system,说明还没初始化配额数据库,得先跑sudo quotacheck -cug /home
quotacheck 为什么总报 “No Filesystem mounted” 或跳过扫描
常见于路径写错、挂载点未识别、或配额数据库已存在但损坏。它不报错也不生效,其实是静默失败。
-
quotacheck的路径参数必须是**挂载点**(如/home),不是设备名(如/dev/sda2)或任意目录 - 加
-v参数看详细输出:sudo quotacheck -vucg /home,能明确看到哪些文件系统被跳过、为什么 - 如果提示
quotacheck: Cannot stat() mounted device,大概率是/proc/mounts和实际挂载状态不一致,重启或重新挂载该分区更可靠 - 首次运行必须带
-c(创建新数据库),否则只校验已有数据;-u和-g要按需选,别全加——没开组配额却加-g会报错
setquota 设置后不生效?检查这几个硬性条件
setquota 是命令行设限的主力,但它不会自动触发警告或拒绝写入,生效依赖后台 quotaon 和内核配额模块正常工作。
- 执行前必须确保配额已开启:
sudo quotaon /home,否则setquota写入的值不会被内核读取 - 参数顺序固定:
setquota -u <username><soft-blocks><hard-blocks><soft-inodes><hard-inodes><filesystem></filesystem></hard-inodes></soft-inodes></hard-blocks></soft-blocks></username>,少一个或顺序错就静默失败 - 软限制(soft)和硬限制(hard)单位都是 KB,不是 MB 或 GB;inode 限制是数量,不是文件大小
- 设置后立即生效,但已有超额数据不会被清理——
quota -u $USER显示的 “used” 是实时统计值,不是上次检查快照
普通用户看不到自己的配额使用情况?权限和工具链问题
用户执行 quota 报 Permission denied 或返回空,通常不是权限不够,而是配额数据库不可读或没生成。
-
/aquota.user(或/quota.user)必须位于挂载点根目录下,且权限为600,属主是root;普通用户靠内核接口查,不直接读这个文件 - 用户端命令依赖
rpc.rquotad(NFS 场景)或本地quota工具链,debian/ubuntu 默认装了,centos/RHEL 可能需要装quota包 - 如果
quota -u $USER返回空但sudo repquota -a能看到数据,说明配额数据库存在但用户态工具没连上内核接口——重试sudo quotaon /home通常解决
配额不是一设就稳,quotacheck 需定期运行(比如 daily cron),而 quotaon 在每次重启后都要手动或通过 /etc/rc.local 补开——这点最容易被忽略。