Linux中限制用户目录磁盘用量需按UID或Project ID设配额:ext4用usrquota对用户全局限容,XFS用prjquota可精准绑定目录;二者均需挂载选项启用、初始化数据库、设置硬限并验证。

Linux 运维中限制特定用户在指定目录的磁盘用量,不能直接“按路径”设配额,必须通过绑定用户身份(UID)或项目标识(Project ID)实现。关键在于:配额控制粒度是用户、组或 project,不是目录本身;而目录只是挂载点或归属载体。实际操作分两类主流路径——普通 ext4 文件系统用 usrquota + 用户级配额,XFS 文件系统推荐 prjquota + 目录绑定 project ID。
ext4 等传统文件系统:靠用户归属目录实现“逻辑隔离”
若目标目录(如 /var/www/user1)只由 user1 拥有且不与其他用户混用,可将该目录设为 user1 的主目录或专属工作区,再对其 UID 设硬限制:
- 确保挂载选项含 usrquota:编辑 /etc/fstab,例如 /dev/sdb1 /var xfs defaults,usrquota 0 0(XFS)或 /dev/sda2 /var ext4 defaults,usrquota 0 2(ext4),然后 mount -o remount /var
- 初始化数据库:quotacheck -cvmu /var(生成 aquota.user)
- 启用配额:quotaon /var
- 设置 user1 硬限 5GB:setquota -u user1 5242880 5242880 0 0 /var(单位 KB,软硬限一致即无宽限期)
- 验证:quota -u user1 -h 查看是否显示 hard 为 5.0G
⚠️ 注意:此方式下 user1 在整个 /var 分区下的所有文件(不限于 /var/www/user1)都计入配额。需靠权限管理(如 chown user1:user1 /var/www/user1 && chmod 700)防止越界写入。
XFS 文件系统:用 prjquota 真正绑定目录
这是唯一能“精准锁定某目录”的方法,不依赖用户归属,而是给目录分配唯一 Project ID 并配额:
- 挂载时启用 prjquota(非 usrquota):/dev/sdb1 /data xfs defaults,prjquota 0 0 → mount -o remount /data
- 为目录设定 project ID:xfs_io -c 'projid 101' /data/web-user1(ID 全局唯一,建议用三位以上数字)
- 扫描并初始化 project 配额库:xfs_quota -x -c 'scan -p' /data
- 设置 project 101 的硬限 3GB:xfs_quota -x -c 'limit -p bhard=3g 101' /data
- 验证:xfs_quota -x -c 'report -p -h' /data,确认 projid 101 的 hard 列为 3.0G
✅ 效果:只要文件落在 /data/web-user1 下(无论属主是谁),都计入 project 101 配额;user1 写其他目录则完全不受影响。
验证与排障要点
配额生效后,超限写入会报错 “Disk quota exceeded”,但需注意:
- 用户新建文件时才触发检查,已存在的超限文件不会自动清理
- XFS 的 xfs_quota 命令必须加 -x 进入 expert 模式才能执行 limit/report
- ext4 系统若改用 edquota -u user1 编辑,blocks 行第二列填硬限值(KB),第一列为软限(可设为同值)
- 测试前清空缓存:sync && echo 3 > /proc/sys/vm/drop_caches,避免缓存掩盖配额效果











