普通用户的根目录(如 /home/username)本身不是独立文件系统,不能直接设配额;必须将整个 /home 分区单独挂载为 ext4 或 xfs,并在该分区启用 usrquota/gquota(ext4)或 uquota/gquota/prjquota(xfs),再通过 edquota 或 xfs_quota 为用户、组或项目设置块/ inode 限额。

普通用户的根目录(如 /home/username)本身不是独立文件系统,不能直接设配额。真正可行的做法是:把整个 /home 分区单独挂载,并在该分区启用配额,再为各用户设置空间上限。迁移 + 配额需分两步走——先安全迁移 /home 到新分区,再在其上配置配额策略。
一、将 /home 迁移到独立 XFS 分区(推荐)
假设你有一块空盘 /dev/sdb1,准备格式化为 XFS 并挂载为 /home:
- 格式化:
sudo mkfs.xfs -f /dev/sdb1 - 临时挂载测试:
sudo mkdir -p /mnt/temp_home && sudo mount /dev/sdb1 /mnt/temp_home,确认读写正常 - 停用当前用户会话,复制数据:
sudo rsync -avAXH --exclude='/*/.cache' /home/ /mnt/temp_home/ - 卸载旧
/home(确保无进程占用):sudo umount /home;然后挂载新分区:sudo mount /dev/sdb1 /home - 更新
/etc/fstab,添加永久挂载项(含配额选项):/dev/sdb1 /home xfs defaults,uquota,gquota,prjquota 0 0 - 重挂载生效:
sudo mount -o remount /home
二、在新 /home 分区启用并配置 XFS 配额
XFS 不需要手动建 aquota.* 文件,但必须按类型初始化:
- 确认挂载参数已生效:
mount | grep home应含uquota,gquota,prjquota - 首次扫描建立用户/组/项目数据库:
xfs_quota -x -c 'scan -u' /home、'scan -g' /home、'scan -p' /home - 为用户 alice 设硬上限 5 GB:
xfs_quota -x -c 'limit -u bhard=5g alice' /home - 为组 devs 设总用量上限 20 GB:
xfs_quota -x -c 'limit -g bhard=20g devs' /home - 验证:
xfs_quota -x -c 'report -u -h' /home或report -g -h
三、注意事项与常见避坑点
配额只对普通用户生效,root 不受限制;超限写入会直接报 Disk quota exceeded 错误:
- 不要试图给单个用户主目录(如
/home/alice)单独挂载——它只是子目录,配额必须绑定 UID/GID/Project ID - 若原
/home在根分区(/),迁移前务必备份、单用户模式操作,避免系统无法登录 - XFS 的
prjquota可用于限制特定子目录(如/home/shared),需用xfs_io -c 'projid 101' /home/shared手动指定 ID 后再scan -p和limit -p - 宽限期(grace period)在 XFS 中默认关闭,硬限即刻生效;如需软限+宽限,得用
soft=+btimer=组合,但多数生产环境直接用硬限更稳妥











