Linux创建文件、上传数据或写日志时提示 Disk quota exceeded,并不一定是磁盘空间已经用完。文件系统可能仍有大量空闲空间,但当前用户、组或项目已经达到块数或inode配额。
先确认报错路径所在的文件系统与配额类型,不能看到df有空间就盲目删除系统文件。

先确认空间和inode是否真的耗尽
对报错路径执行:
df -h /srv/app/data
df -i /srv/app/data
findmnt -no TARGET,SOURCE,FSTYPE,OPTIONS /srv/app/data
df -h 检查数据块,df -i 检查inode。两者都充足而写入仍返回配额错误时,应继续查看用户、组或项目配额。
查询当前用户的配额
普通用户可查看自己的额度,管理员可以指定用户:
quota -s
sudo quota -vs appuser
id appuser
输出中的soft是软限制,hard是硬限制,grace表示超过软限制后剩余的宽限期。硬限制不能继续突破,软限制在宽限期结束后也会阻止写入。
查看整个文件系统的配额报告
ext4等使用Linux quota工具的文件系统可执行:
sudo repquota -as
sudo repquota -ugs /srv
XFS还可能启用用户、组或项目配额:
sudo xfs_quota -x -c 'state' /srv
sudo xfs_quota -x -c 'report -h' /srv
命令应针对报错路径所在挂载点,检查根分区无法代表独立数据盘。
区分块配额与inode配额
大量小文件可能先耗尽inode配额,单个大文件则更容易触发块配额。定位占用时可用:
sudo du -xhd1 /srv/app | sort -h
sudo find /srv/app -xdev -type f -user appuser | wc -l
扫描大目录会产生I/O压力,生产服务器应降低优先级并避开业务高峰。不要直接对整个根目录运行无边界的find。
安全释放或迁移占用
先处理可确认的缓存、旧构建产物、过期备份和已归档日志。删除仍被进程打开的文件后,空间可能不会立即释放,可检查:
sudo lsof +L1
需要保留的数据应迁移到容量充足且配额正确的文件系统。清理前要确认备份和保留策略,不能用批量删除掩盖持续增长的问题。
调整配额前核对业务边界
管理员可使用 edquota 或 setquota 修改额度,但应先记录原值和用户归属:
sudo edquota -u appuser
sudo repquota -us /srv
需要演练配额、日志轮转或多租户目录时,可以在 萤光云 或 LightNode 创建隔离测试机。提高额度前要确认文件系统仍有整体容量,不能把用户限制改成宿主机磁盘耗尽。
修复后怎样验收
重新检查配额并执行最小写入测试:
sudo -u appuser sh -c 'touch /srv/app/data/.quota-test && rm /srv/app/data/.quota-test'
sudo quota -vs appuser
df -h /srv/app/data
df -i /srv/app/data
验收标准是目标用户可以写入,块数和inode均未达到硬限制,宽限期状态清晰,文件系统仍保留足够余量。
FAQ
df显示有空间为什么仍然报错? df反映文件系统整体容量,用户、组或项目配额可以在整体空间用完前阻止特定主体继续写入。
关闭quota能立即解决吗? 可能解除限制,但会破坏多租户资源边界,不应作为生产环境的首选方案。
温馨提示
调整配额属于资源策略变更,应记录修改人、原值和新值。先找出增长来源,再决定清理、迁移还是扩额。


