Linux 提示 No space left on device 使用 du 和 lsof 排查原因
du
df 显示确实磁盘空间已满
这种情况下最快速的解决办法就是:
1.进入根目录
du -h --max-depth=1|grep G|sort -n 找不到结果还可以把 grep G 换成 grep M
此时得到
2.6G ./opt
3.8G ./var
5.2G ./usr
5.5G ./soft
18G .
进入 /opt,再次执行 du -h --max-depth=1|grep G|sort -n
得知是 lampp 的日志占了 1.2G
经过多次处理,最终处理完,结果为:
1.1G ./var
1.2G ./opt
5.2G ./usr
5.5G ./soft
14G .
瞬间减少了4G (/usr和/soft并未处理)
PS: 若报错,可去除 –max-depth 参数
lsof
前两天,一个设备根目录下的 2T 空间被占满,使用 du,发现所有文件大小只有几百兆而已。那么 2T 的空间被谁占用了?
随即想到,可能文件已经删掉了,但某进程打开的文件句柄还在,导致资源未释放。lsof | more
可查看打开的文件句柄及文件大小
只查看输出第 8 列 SIZE 和第 10 列 NAME,倒序排列
# lsof -n | awk '{print $8,$10}' | sort -nr | more
示意图:
或用如下命令:
lsof -s | awk '$5 == "REG"' | sort -n -r -k 7,7 | head -n 25
示意图:
快速定位至占用进程,重启进程,释放资源即可。