linux“消失”的磁盘空间
Posted 龙叔运维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux“消失”的磁盘空间相关的知识,希望对你有一定的参考价值。
作为运维,磁盘使用率这种监控应该是再熟悉不过的了。
常见处理方法也很简单,登录服务器清理下下历史数据,释放空间就可以了。
然而,有时问题也并不那么容易解决QAQ。
有时会发现df查看的磁盘使用空间和用du列出来的使用空间对不上,导致不知如何清理空间,本文会详细讲解出现这种情况的原因和处理方法。
1、文件删除后空间未释放
这是因为文件删除后,如果还有进程在使用这个文件,这个文件只会将其标注为delete状态,并不会真正释放空间。出现这种情况较多的一般是日志文件(所以按天分日志很重要,不要一直写一个日志文件)。
只有把所有使用这个文件的进程杀掉,这个文件才会真正被删除,空间也才会释放。
如当前根目录空间使用率是88%,我们发现真实使用的并没有这么多,就可以看看是不是有根目录下的delete状态的大文件
第一步:找到处于delete状态的较大的文件,以及使用进程
lsof |grep -i delete |sort -nrk7 |head |awk 'BEGINprint "file-size","PID","system"print $7/1024/1024"M",$2,$9' | column -t
第二步:
评估后杀掉进程
kill -9 5645
这时在此df查看 可以看到空间已经被释放出来了
2、已有文件的目录被当做挂载点,导致文件不可见
挂载分区,是需要一个已有目录作为挂载点的。
正常应该是要新增一个目录,或者找一个空目录去作为挂载点。
但偶尔也会出现用已有目录作为挂载点,并且目录下本身就有文件的情况,这个时候进行挂载分区,目录下原本的那些文件就不可见了。也就相当于这部分磁盘空间 “丢失”。
如下面这种情况:
已有目录 /work,且下面有一个1.9G的文件,当前根目录使用了13G。
这时候我们用 /work 目录作为挂载点进行分区挂载,挂载后可以看到原本的/work 目录下的文件已经不可见了,而根目录依然是使用了13G,就像是丢失了1.9G的磁盘空间。
这里有个知识点:
将两个文件系统挂载在一个目录下,linux就会将最近一次挂载的文件系统可见,之前的文件系统将被遮盖,东西还在,但是看不到。
可以用 monut | grep "目录名" 查看当前这个目录可见的文件系统是哪一个。
出现这种情况,一般将挂载的分区先umount,然后对原有的文件系统中的文件进行处理之后,再重新挂载上就好了,如下:
umount /work 卸载/work 目录挂载的分区
将/work 下面文件删除
mount /dev/vda3 /work 重新挂载分区
这个时候再看,根目录使用空间变为了11G,空间被释放了
欢迎关注我的公众号:龙叔运维
持续分享运维经验
以上是关于linux“消失”的磁盘空间的主要内容,如果未能解决你的问题,请参考以下文章