df也找不到的消失的磁盘空间

        作为运维,磁盘使用率这种监控应该是再熟悉不过的了。

        常见处理方法也很简单,登录服务器清理下下历史数据,释放空间就可以了。

        然而,有时问题也并不那么容易解决QAQ。

        有时会发现df查看的磁盘使用空间和用du列出来的使用空间对不上,导致不知如何清理空间,本文会详细讲解出现这种情况的原因和处理方法。

1、文件删除后空间未释放

        这是因为文件删除后,如果还有进程在使用这个文件,这个文件只会将其标注为delete状态,并不会真正释放空间。出现这种情况较多的一般是日志文件(所以按天分日志很重要,不要一直写一个日志文件)。

        只有把所有使用这个文件的进程杀掉,这个文件才会真正被删除,空间也才会释放。

        如当前根目录空间使用率是88%,我们发现真实使用的并没有这么多,就可以看看是不是有根目录下的delete状态的大文件

        第一步:找到处于delete状态的较大的文件,以及使用进程

lsof  |grep -i  delete  |sort -nrk7 |head |awk 'BEGIN{print "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,空间被释放了

 以上内容转自 龙叔运维  仅作笔记之用  侵权必删

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值