LHIDC

`No space left on device` 报错怎么处理?磁盘和 inode 都要看

No space left on device 可能是磁盘容量满,也可能是 inode 用尽。本文按容量、inode、小文件、日志和数据库场景说明如何判断与处理。

`No space left on device` 的字面意思是设备没有空间,但在 Linux 里它不只指磁盘容量。inode 用尽、临时目录满、日志分区满、容器卷满,都可能出现同样报错。处理前必须先确认是哪一种“没有空间”。

先做两个检查

df -h

看容量是否用满。

df -i

看 inode 是否用满。inode 是文件数量资源,大量小文件会把它耗尽。

容量满和 inode 满的区别

检查结果说明常见来源
`Use%` 100%容量满大日志、备份包、数据库、上传文件
`IUse%` 100%inode 满session、缓存、小图、邮件队列、临时文件
容量和 inode 都正常可能是特定挂载点或权限问题临时目录、容器卷、只读文件系统

找出大量小文件

不要一开始扫全盘,可以先从 `/var`、网站目录或缓存目录查:

find /var -xdev -type f | awk -F/ '{print "/"$2"/"$3}' | sort | uniq -c | sort -nr | head

这条命令用于粗略定位文件数量最多的目录。生产服务器上大范围 find 会产生 IO 压力,建议缩小范围,必要时放到业务低峰期执行。

不同场景的处理方式

日志过大,可以确认后截断或轮转;缓存过多,应优先使用应用自带清理机制;session 文件过多,要考虑在线用户;数据库写入失败,不能直接删除数据库文件。

普通日志截断示例:

truncate -s 0 /path/to/logfile

如果是大量旧 session 或缓存文件,要尽量按时间条件清理,而不是无差别删除。例如只清理多天前的临时文件,避免影响当前请求。

日志里会看到什么

系统或应用日志可能出现无法创建临时文件、无法写入日志、数据库写入失败、上传失败等信息:

journalctl -n 100 --no-pager

Web 服务和数据库日志也要一起看,因为报错可能先在应用层出现。比如 PHP 上传失败、Nginx 无法写临时文件、MySQL 无法写 binlog,都可能最终指向空间问题。

错误操作提醒

不要看到这个报错就删除整个 `/var/log` 或数据库目录。不要忽略 inode。不要在没有备份的情况下清理上传目录和业务数据。不要把可疑大文件全部归类为垃圾文件,先确认来源。

如果空间不足已经导致数据库异常,先减少写入压力,保留日志,再评估恢复。用户能处理普通日志、缓存和旧备份;涉及数据库损坏、文件系统只读或系统无法启动时,应让服务商协助。

上一篇 SSH 提示 `Connection timed out` 怎么处理?网络、防火墙和安全组排查 下一篇 Linux 服务器突然变慢,应该先看哪些指标

LHIDC 产品中心

继续查看可购买的海外服务器产品

文章用于辅助选型,最终价格、库存与配置请以产品详情页和下单页面展示为准。

查看产品 查看方案