Linux 用户配额限制与管理方法

1次阅读

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

Linux 用户配额限制与管理方法

如何快速确认当前用户是否启用了磁盘配额

没启用配额,后面所有操作都白搭。先看内核是否支持、文件系统是否挂载了配额选项,再查用户有没有被分配限额。

  • 运行 mount | grep "quota",确认目标分区(比如 /home)挂载时带了 usrquotagrpquota
  • 检查 /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” 是实时统计值,不是上次检查快照

普通用户看不到自己的配额使用情况?权限和工具链问题

用户执行 quotaPermission 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 补开——这点最容易被忽略。

text=ZqhQzanResources