CentOS 7 磁盘配额实验:EXT4 用户/组限额与 XFS Project Quota
1. 服务介绍
Linux 磁盘配额(Quota)用于限制普通用户、用户组或指定目录可以占用的磁盘容量和文件数量。它常用于教学服务器、共享文件服务器、邮件服务器和虚拟主机,避免单个账号写满分区并影响其他用户。
本实验先在独立磁盘上完成 EXT4 用户配额和组配额,再介绍 CentOS 7 默认 XFS 文件系统的用户、组和 Project Quota。实验同时验证软限制、硬限制、宽限期和超限写入结果。
2. 准备运行环境
• 操作系统:CentOS 7.x。
• 操作账号:root或具备sudo权限的管理员。
• 实验磁盘:新增 2 GB 磁盘,示例设备为/dev/sdb。
• EXT4 挂载点:/mnt/mountpoint。
• 测试用户:student;测试组:students。
• XFS 示例挂载点:/home。
先确认设备名称,避免格式化系统盘:
lsblk -f fdisk -l findmnt /> 下文假定新分区为/dev/sdb1。旧截图使用/dev/sdb直接格式化整块磁盘,仅用于展示原实验过程;实际操作推荐创建分区后使用/dev/sdb1。
3. 相关知识与注意事项
3.1 Quota 限制对象
• 用户配额:按 UID 限制单个用户。
• 组配额:按 GID 限制用户组。
• Project Quota:XFS 按目录树限制空间,不依赖目录内文件所属用户。
3.2 容量、文件数和宽限期
•blocks:已使用磁盘容量。
•inodes:已创建文件和目录数量。
•soft:软限制;超过后进入宽限期。
•hard:硬限制;达到后立即拒绝继续写入。
•grace time:超过软限制后允许继续使用的时间。
3.3 文件系统差异
• EXT3/EXT4 使用usrquota、grpquota、quotacheck、quotaon、edquota和repquota。
• XFS 使用uquota/usrquota、gquota/grpquota、pquota/prjquota与xfs_quota。
• XFS 的grpquota与prjquota不应同时配置在同一挂载点。
• Quota 只对挂载点所在文件系统生效;给根目录设置配额不会自动限制其他独立分区。
•root通常不受普通用户配额限制,必须切换到测试用户验证。
• 不要对块设备执行chmod 777。测试目录只授予所需用户或组权限。
4. EXT4 用户与组磁盘配额实验
4.1 创建测试用户和组
groupadd students useradd -g students student passwd student id student4.2 添加磁盘并创建分区
在虚拟机中添加 2 GB 磁盘,然后确认系统识别出/dev/sdb。
fdisk /dev/sdb # 依次输入 n、p、1,接受默认起止扇区,最后输入 w partprobe /dev/sdb lsblk /dev/sdb4.3 格式化并挂载文件系统
CentOS 7 支持 EXT4,推荐使用:
mkfs.ext4 /dev/sdb1 mkdir -p /mnt/mountpoint mount /dev/sdb1 /mnt/mountpoint旧实验截图使用mkfs.ext3 /dev/sdb,命令输出如下。若已经创建/dev/sdb1,不要再格式化/dev/sdb,否则会覆盖分区表。
4.4 配置开机挂载和 Quota 参数
先获取 UUID:
blkid /dev/sdb1 cp -a /etc/fstab /etc/fstab.bak.$(date +%F-%H%M%S)在/etc/fstab添加一行:
UUID=<替换为实际UUID> /mnt/mountpoint ext4 defaults,usrquota,grpquota 0 2无需重启,重新挂载并检查:
mount -o remount /mnt/mountpoint findmnt -no SOURCE,FSTYPE,OPTIONS /mnt/mountpoint df -hT /mnt/mountpoint4.5 安装并初始化 Quota
yum -y install quota quotacheck -cugm /mnt/mountpoint ls -l /mnt/mountpoint/aquota.user /mnt/mountpoint/aquota.group quotaon -vug /mnt/mountpoint4.6 配置 student 用户限制
交互式配置:
edquota -u student示例把容量软限制设为 5000 KiB、硬限制设为 10000 KiB,同时把文件数软限制设为 5000、硬限制设为 10000。
也可以用非交互命令完成同样配置:
setquota -u student 5000 10000 5000 10000 /mnt/mountpoint为测试用户准备目录,只授予需要的权限:
mkdir -p /mnt/mountpoint/student chown student:students /mnt/mountpoint/student chmod 700 /mnt/mountpoint/student quotaon -vug /mnt/mountpoint4.7 查看配额并验证超限写入
管理员查看整个文件系统:
repquota -augv quota -uvs student quotaon -p /mnt/mountpoint切换到student,写入超过 10 MiB 硬限制的文件:
su - student dd if=/dev/zero of=/mnt/mountpoint/student/quota-test.img bs=1M count=11 status=progress ls -lh /mnt/mountpoint/student/quota-test.img quota -s exit达到硬限制时应出现Disk quota exceeded,文件最终大小不会超过硬限制。
5. XFS Quota 配置
CentOS 7 默认常用 XFS。以下示例假定/home是独立 XFS 文件系统。
5.1 用户和组配额
/etc/fstab示例:
/dev/mapper/centos-home /home xfs defaults,usrquota,grpquota 0 0重新挂载并检查状态:
umount /home mount -a xfs_quota -x -c 'state' /home xfs_quota -x -c 'report -ubih' /home xfs_quota -x -c 'report -gbih' /home设置用户、组和宽限期:
xfs_quota -x -c 'limit -u bsoft=250M bhard=300M isoft=5000 ihard=6000 student' /home xfs_quota -x -c 'limit -g bsoft=950M bhard=1G students' /home xfs_quota -x -c 'timer -u -b 14days' /home xfs_quota -x -c 'report -ugibh' /home5.2 Project Quota 限制目录
使用 Project Quota 时,把/etc/fstab中grpquota改为prjquota:
/dev/mapper/centos-home /home xfs defaults,usrquota,prjquota 0 0配置 Project ID 与目录:
mkdir -p /home/myquota echo '11:/home/myquota' >> /etc/projects echo 'myquotaproject:11' >> /etc/projid xfs_quota -x -c 'project -s myquotaproject' /home xfs_quota -x -c 'limit -p bsoft=450M bhard=500M myquotaproject' /home xfs_quota -x -c 'report -pbih' /home验证目录硬限制:
dd if=/dev/zero of=/home/myquota/quota-test.img bs=1M count=510 status=progress xfs_quota -x -c 'report -pbh' /home达到 500 MiB 后应出现No space left on device或配额超限提示。
5.3 临时禁用、恢复和彻底关闭
# 暂停强制限制,但继续统计 xfs_quota -x -c 'disable -up' /home xfs_quota -x -c 'state' /home # 恢复强制限制 xfs_quota -x -c 'enable -up' /home # 完全关闭后,必须重新挂载才能再次启用 xfs_quota -x -c 'off -up' /home umount /home mount -a日常维护优先使用disable/enable;off/remove会影响现有配额元数据,不应在未备份时执行。
6. 验证结果
6.1 EXT4 检查命令
findmnt -no SOURCE,FSTYPE,OPTIONS /mnt/mountpoint quotaon -p /mnt/mountpoint repquota -ugv /mnt/mountpoint quota -uvs student ls -lh /mnt/mountpoint/aquota.* journalctl -k --no-pager | grep -i quota | tail -n 306.2 XFS 检查命令
findmnt -no SOURCE,FSTYPE,OPTIONS /home xfs_quota -x -c 'state' /home xfs_quota -x -c 'report -ugpibh' /home判断配置成功需要同时满足:挂载参数包含对应 quota 选项、统计状态为Accounting: ON、强制状态为Enforcement: ON、报告中出现目标用户或 Project,并且测试用户写入到硬限制时被拒绝。
7. 常见问题与回退
7.1 `quotacheck` 提示设备忙
先停止使用挂载点的程序,再使用-m允许在已挂载文件系统上检查;生产环境建议安排维护窗口后卸载检查。
fuser -vm /mnt/mountpoint quotacheck -cugm /mnt/mountpoint7.2 配额参数未生效
grep -v '^#' /etc/fstab mount -o remount /mnt/mountpoint findmnt -no OPTIONS /mnt/mountpoint若仍无usrquota或grpquota,检查设备、挂载点和文件系统类型是否写错。
7.3 回退 EXT4 实验
quotaoff -vug /mnt/mountpoint rm -f /mnt/mountpoint/student/quota-test.img umount /mnt/mountpoint # 恢复 /etc/fstab 备份后执行 mount -a不要直接删除aquota.user和aquota.group;先执行quotaoff,确认无需保留限制数据后再处理。