侧边栏壁纸
博主头像
Adrian博主等级

曙光在头上,不抬起头,便永远只能看见物质的闪光。

  • 累计撰写 108 篇文章
  • 累计创建 67 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

文件删除空间释放问题

Adrian
2021-12-15 / 0 评论 / 0 点赞 / 183 阅读 / 1,284 字
温馨提示:
本文最后更新于 2021-12-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Linux文件删除,但是df之后磁盘空间没有释放

来源 https://www.kancloud.cn/mr_zihan/deploy/2489544

问题描述:

Linux 磁盘空间总是报警,查到到大文件,删除之后,df看到磁盘空间并没有释放。

问题原因:

一般说来不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程一直在向这个文件写数据等等,要理解这个问题,就需要知道Linux下文件的存储机制和存储结构。

一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容。之所以出现删除access_log文件后,空间还没释放,就是因为httpd进程还在一直向这个文件写入内容,导致虽然删除了access_log文件,但文件对应的指针部分由于进程锁定,并未从meta-data中清除,而由于指针并未被删除,那么系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放也就不足为奇了。

查看删除文件绑定的进程

lsof -n| grep deleted

比对进程号,重启应用即可以完成文件的释放。

优雅的释放文件空间

[root@localhost ~]# echo " " >/tmp/xxx.log

通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志,这种方法经常用于在线清理Apache、Tomcat、Nginx等Web服务产生的日志文件。

查找大文件

列举出当前目录所有大于800M的文件

find . -type f -size +800M

第一个方法只用到了一个命令find,它能够帮我们做一些文件查找的操作。它常用的参数有:

  • type:类型。POSIX支持——b:块设备文档、d:目录、c:字符设备文档、P:管道文档、l:符号链接文档、f:普通文档
  • name:按文件名查找。支持*模糊匹配
  • size:文件大小。+表示大于,-表示小于。支持k,M,G单位。
find . -type f -size +800M | xargs ls -lh

第二个方法又进了一步,不仅把大于800M的文件列出来,还进一步对他们分别做了ls -lh操作。这里新出现了一个xargs命令。它的作用就是把管道进来的参数切分成多个部分,分别作为新的参数调用后续的命令。比如这里,xargs管道进来的是找到的所有文件绝对路径,把他们作为ls -lh参数,也就是打印出每个文件的具体信息。

find . -type f -size +800M | xargs du -hm | sort -nr

第三个方法则分别对找出来的数据进行排序。du命令即disk usage,是用来统计文件占用磁盘大小的。sort顾名思义是排序的。具体就不说了,这两个是比较简单的命令。

du -h --max-depth=1
du -hm --max-depth=2 | sort -n
du -hm --max-depth=2 | sort -nr | head -12
0
博主关闭了当前页面的评论