先把当时的情况摆出来。df 显示数据盘已经用掉九成六,应用以普通用户运行,写文件直接报 No space left on device,切换到 root 却完全正常。
真正麻烦的地方在于,几个原因的现象几乎一样。文件系统默认给 root 保留了百分之五的块,普通用户可用空间更少。也可能是分区被大量小文件占满,碎片导致找不到连续块。
另外,应用写入的目标目录只对 root 可写。
动手时先确认保留比例
tune2fs -l /dev/vdb1 | grep -i reserved
数据盘把保留比例降到百分之一
tune2fs -m 1 /dev/vdb1
随后核对目录属主和权限
ls -ld /data/app/cache
剩下的就是清理无效缓存释放空间
find /data/app/cache -type f -mtime +3 -delete
当时还开着另一个排查窗口,两边日志对照着看才定位到。
别只看报错消失,验证要多做一步。可用空间增加了约四个百分点,普通用户写入测试文件成功,应用不再报空间不足。
系统盘别把保留块降到零,磁盘满时 root 连日志都写不进去,会连故障现场都留不下来。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。