磁盘明明没满,写入却报 No space left?先查这三处
df 显示还有空间,写入却报 No space left on device,很多人第一反应是删文件腾空间。但“磁盘满了”有三种不同的满:空间满、inode 满、保留块挡路,删文件不一定管用,按下面三处顺序查。
第一处:是不是被删除却没释放的文件占着空间
rm 删掉的文件,如果还有进程拿着句柄不放,空间不会释放,df 看到的已用空间不会下降。用 lsof | grep deleted 找出来,重启那个进程或让它关闭句柄,空间立刻回来。日志文件尤其常见:直接 rm 日志不如先 truncate,echo > /var/log/app.log 这样清零不断句柄。
第二处:是不是 inode 用完了
小文件特别多的目录(缓存、session、临时文件)会先把 inode 耗尽:df -h 看空间还剩不少,df -i 一看 inode 已用 100%,新建文件照样失败。df -i 确认后,清理小文件碎片目录才是正解,扩容磁盘一点用都没有。
第三处:是不是保留块在挡路
ext4 默认给 root 预留 5% 的空间,普通用户写满到 95% 就报 No space left,df 却显示还剩 5%。这是保护机制不是故障:确认是保留块问题后,可以用 tune2fs -m 1 把预留比例调小,但生产盘别直接调到 0,留一点给 root 应急。
一句话总结:报 No space left 先分清是“删了没释放”“inode 满了”还是“保留块挡路”——lsof 查 deleted、df -i 查 inode、tune2fs 查预留比例,对症下药,别只会删文件。
- 点赞
- 收藏
- 关注作者
评论(0)