先把当时的情况摆出来。CentOS 7.9 的 /home 是 xfs,给用户设了软硬限制,xfs_quota 的 report 却显示全部是 0,写超了也不拦,findmnt 里 /home 的挂载选项只有 defaults。
把日志和配置对完,能解释这个现象的基本就这几处。挂载时没带 uquota 或 usrquota,内核根本不统计用户配额。也可能是只在 fstab 里改过,文件系统已经挂载,改动没有生效。
不容易想到的是,配额是在目录上设的项目配额,但挂载选项里少了 prjquota。还有一种情况,xfs_quota 连的是没有加 -x 的普通模式,写操作被拒绝但没报错。
第一件事是看挂载项里到底有没有配额开关
findmnt -no OPTIONS /home
补上用户和项目配额重新挂载
mount -o remount,usrquota,prjquota /home
再往下把 fstab 一并改掉,防止重启回退
sed -i 's#/home xfs defaults#/home xfs defaults,usrquota,prjquota#' /etc/fstab
初始化配额并写入限制
xfs_quota -x -c 'limit -u bsoft=20g bhard=25g test' /home && xfs_quota -c 'report -h' /home
恢复的判定其实很直接。xfs_quota 的 report 能看到用户已用空间,写入超过硬限制时返回 Disk quota exceeded,findmnt 里挂载项带上了 usrquota。
这里还有个坑。XFS 的配额必须在挂载时打开,事后 remount 才能补;配额文件是隐式的,不用像 ext4 那样跑 quotacheck,但 io 统计要跑一段时间才准。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
