No space left on device 原因及排查方法
No space left on device 原因及排查方法
1. 概念
- 首先我们要清楚
inode和block的概念inode在格式化创建文件系统的时候诞生,用来存放文件的属性信息,存放着block的位置,没有文件名,创建一个非空文件占用一个inode和至少1个blockblock是实际存放数据的位置,block大小1k、4k、8k,centos 6.x(分区大于500M默认是4k),文件很大的话占用多个block, 文件非常小的时候1kblock剩余的空间不能继续使用,所以系统中block消耗更快
结论
磁盘满了就分为,inode满了,block满了,以及一种特殊的情况
2. 文件删除原理
- 硬链接数为0(所有硬链接均被删除)
- 进程调用数为0(没有进程在调度文件)
3. 原因分析
硬链接数为0,进程调度数不为0
4. 解决方案
1. 查看是否是block满了
-
查看所有block使用情况
df -h -
查找大文件
du -sh /usr/* | grep G -
删除大文件(按照实际情况)
rm -f /usr/local/bin/1g -
再次查看所有block使用情况
df -h -
未解决继续看第二步
2. 查看是否
inode满了(df -h发现还有空间) -
查看
inode使用情况df -i -
如果小文件太多,采用
a.txt、b.txt一批一批的删(按照实际情况)rm -f *.txt -
查找系统中 目录大小大于
1M(目录一般大小为4K,所以目录要是大了那么文件必然很多)find / -size +4k -type d |xargs ls -ldhi -
再次查看
inode使用情况df -i -
未解决继续看第三步
3. 查看是不是文件被占用一直没被彻底删除(特殊原因)
这种情况往往是容易被忽略,也是让人郁闷的,因为你会发现
df -h明明已经有空间了,但是就是放不进去东西。
-
显示出系统中被打开的文件
lsof | grep deleted显示结果
结果: 第一列 软件/服务的名称 第八列 文件的大小 第10列 文件的名字 第11列 标记(硬链接数为0 进程调用数不为零 就会有 delete) -
重启对应的服务 释放磁盘空间(按照实际情况)
-
杀掉占用空间的服务
kill -9 <pid>/etc/init.d/rsyslog restart -
再次查看所有
block使用情况df -h
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Nuri Alfred - Deertech
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果