linux-磁盘空间满了,报 “no space left”

简介

在Linux服务运维过程中,磁盘空间告警,一般都是比较常见的告警。如果磁盘满了,一般系统日志都会有no space left的告警。但是出现告警,有可能有好几种情况。

几种情况分析

情况1:数据、日志等大文件将磁盘占满了。

处理:一般数据的增加都是有一定的趋势的,而且服务器一般都有对应的监控,如果是突然增长一般是日志文件造成的,可以先tail查看一下日志文件,是否有程序一直在报出大量的错误导致。如果有可以先关闭程序,清理一下日志,然后在启动。如果是数据造成的,就赶紧扩容了。

情况2:df查看磁盘空间已经满了,但是找不到占用磁盘空间的文件在哪里。手动 du -sh /* 进行统计,发现没用使用那么多的磁盘空间。

处理:这种情况,一般是在清理文件的时候,直接rm ,但是程序还在使用原来文件的句柄,导致磁盘空间不会释放。

查看被删除文件,但是句柄还被占用的程序:

lsof -n | grep delete

# 列名称

COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME

...

optest 7787 7799 Composito opcai 23u REG 0,23 144 637 /dev/shm/.org.chromium.Chromium.gwZDcZ (deleted)

optest 7787 7799 Composito opcai 24u REG 0,23 144 586 /dev/shm/.org.chromium.Chromium.nidu2H (deleted)

optest 7787 7799 Composito opcai 43r REG 0,23 1048576 1061 /dev/shm/.org.chromium.Chromium.CgIJvs (deleted)

optest 7787 7800 Composito opcai 23u REG 0,23 144 637 /dev/shm/.org.chromium.Chromium.gwZDcZ (deleted)

optest 7787 7800 Composito opcai 24u REG 0,23 144 586 /dev/shm/.org.chromium.Chromium.nidu2H (deleted)

optest 7787 7800 Composito opcai 43r REG 0,23 1048576 1061 /dev/shm/.org.chromium.Chromium.CgIJvs (deleted)

optest 7787 7804 TaskSched opcai 23u REG 0,23 144 637 /dev/shm/.org.chromium.Chromium.gwZDcZ (deleted)

optest 7787 7804 TaskSched opcai 24u REG 0,23 144 586 /dev/shm/.org.chromium.Chromium.nidu2H (deleted)

optest 7787 7804 TaskSched opcai 43r REG 0,23 1048576 1061 /dev/shm/.org.chromium.Chromium.CgIJvs (deleted)

...

查找到以 (deleted) 结尾的就是已经被删除的文件,SIZE那列就是显示句柄的大小,单位是byte,第一列就是程序名称,第二列就是PID,这时候根据PID重启一下程序就可以释放空间了。

注意:在清理文件的时候,不确定日志文件是否还在被使用,可以使用echo > logfile.log将文件内容清空,就可以马上释放磁盘空间。

情况3:df 查看磁盘空间空闲还有,但是还是一直报no space left。

处理:这个就要赶紧先排查一下是否是inode使用完了,太多的小文件,会占用大量的inode。inode多少是在格式化的时候已经固定了。处理方法,就是清理掉这些没用的小文件,如果是程序用到的数据文件,就让程序员修改程序了,尽量不要产生太多的小文件。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200507A0Q2OG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券