No space left on device 原因及排查方法
No space left on device 原因及排查方法
1. 概念
- 首先我们要清楚
inode
和block
的概念inode
在格式化创建文件系统的时候诞生,用来存放文件的属性信息,存放着block
的位置,没有文件名,创建一个非空文件占用一个inode
和至少1个block
block
是实际存放数据的位置,block
大小1k
、4k
、8k
,centos 6.x
(分区大于500M
默认是4k
),文件很大的话占用多个block
, 文件非常小的时候1k
block
剩余的空间不能继续使用,所以系统中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
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果