Linuxc盘空间释放解决步骤
问题说明
IDC里的一台服务器的/分区使用率爆满了!已达到100%!经查看发觉有个文件过大(80G),于是在跟有关朋友确认后rm-f果断删掉该文件。并且发觉删掉该文件后,/分区的c盘空间压根没有释放下来linux命令手册,使用率还是100%!这是为何呢??
[root@linux]#df-hFilesystem
缘由剖析:
在Linux系统中,通过rm或则文件管理器删掉文件,只是将它会从文件系统的目录结构上解除链接(unlink),也就是说只是删掉了文件和系统目录结构的链接;假如文件在删掉时是被打开的(有一个进程正在使用该文件,文件被进程锁定或则有进程仍然在向这个文件写数据等)状态,这么进程将一直可以读取该文件,也就是说没有删掉掉文件在读取的状态,所以c盘空间也都会仍然被占用。
一个文件在文件系统中的储存分为两个部份:数据部份和表针部份,表针坐落文件系统的meta-data中linux swap空间释放,数据被删掉后,这个表针就从meta-data中清不仅,而数据部份储存在c盘中,数据对应的表针从meta-data中去除后,文件数据部份占用的空间就可以被覆盖并写入新的内容,之所以出现删掉文件后,空间还没释放,就是由于有进程还在仍然向这个文件写入内容,引起似乎删掉了文件,但文件对应的表针部份因为进程锁定,并未从meta-data中去除,而因为表针并未被删掉,这么系统内核就觉得文件并未被删掉,因而通过df命令查询空间并未释放也就不足为奇了。
解决举措有以下几种
1.通过lsof|grepdeleted命令获取到早已被删掉并且一直被应用程序占用的文件列表,之后kill掉还在占用所删掉文件的进程。须要注意的是:倘若有好多进程都在使用所删掉文件,这么采用第1种方法kill进程就有点麻烦了,但是风险也比较大。由于kill进程是通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。必需要确定不会对运行中的进程导致影响时才会使用,应用程序对这些方法支持的并不好linux swap空间释放,当一个正在使用的文件被截断可能会引起不可预知的问题。
杀掉filebeat进程后c盘空间恢复
2,或停掉或重启使用这个所删掉文件的应用,让OS手动回收c盘空间。
3,也可以重启操作系统,不过这并不是最好的方式
4,对待这些进程不停对文件写日志的操作,要释放文件占用的c盘空间,最好的方式是在线清空这个文件。通过这些方式,c盘空间不但可以马上释放,也可保障进程继续向文件写入日志。
在线清空文件(例如/home/111.log)的形式:
a)#echo"">/home/111.log
b)#cat/dev/null>/home/111.log
c)#>/home/111.log
还有一种c盘空间使用问题的现象:明明使用df-h命令查看c盘空间使用率不算高,还有好多空余空间,并且创建文件或写入数据时仍然报错c盘写满:”nospaceleftondevice”!
通常这些问题都是因为分区目录下deleted删掉后的资源空间没有真正释放下来造成的,具体处理流程如下:
1.先df-lh查看一下c盘使用状况,发觉/data分区下的Used已用空间很大,并且实际查看并没有占用这么大的空间!
2.找到被删掉文件所在的分区,例如/data分区
3.查看被删掉了的所有文件:lsof-n/data|grepdeleted
4.杀害那些文件的delete进程,释放空间:lsof-n/data|grepdeleted|awk‘{print$2}’|xargskill-9
5.接着再运行lsof-n/data|grepdelete,应当就没有结果了。
6.注意:刚杀害deleted进程时,df-h查看/data分区,Used已用空间可能时顿时显示过大,但随着deleted进程杀害,资源日渐释放,/data分区下的Used已用空间会渐渐变小,Avail可用空间会渐渐变大)
大多数文件系统就会保留一部份空间留作紧急情况时用(例如硬碟空间满了),这样能保证有些关键应用(例如数据库)在硬碟满的时侯有点余地,不致于马上就crash,给监控系统和管理员一点时间去察觉。不过有时侯这部份预留的硬碟空间不用的话有点浪费。
在Linux系统中linux空间,ext2、ext3、ext4文件系统上一般会默认预留5%的c盘空间,例如c盘假如是2TB,这就意味着有100GB的空间会被预留出来,这样的话会不会变得有点浪费了。可以通过”tune2fs”命令来改变5%的默认设置,例如只预留2%的空间。并且不建议设成0%,现实环境中这样做不安全。