美文网首页
记录一次Linux服务器磁盘空间占满的修复过程

记录一次Linux服务器磁盘空间占满的修复过程

作者: lconcise | 来源:发表于2020-03-12 22:40 被阅读0次

    问题: Liunx 磁盘空间占满

    1.查找大文件

    通过df,du指令查找到大文件jenkins.log(占用了50G左右)
    相关使用指令:
    df 查看磁盘使用情况,du查看目录大小
    df -h 查看磁盘空间大小

    image.png
    du -sh * 当前目录下文件或目录的大小
    du -h -d 1 显示当前目录下文件大小或目录的大小,并显示当前目录总占用大小
    du -sh * | sort -nr | head 显示前十个占用空间最大的文件或目录
    2.删除大文件

    rm -rf jenkins.log

    删除之后,df看到磁盘空间并没有释放

    lsof | grep deleted 发现有大量刚刚删除文件的进程存在,kill掉进程(或者重启进程或者重启服务器) ok

    到此问题解决。

    但重启进程或者重启服务器可能会有不可预测的问题产生。

    echo " " >/home/jenkins_log/jenkins.log
    

    echo " " >/home/jenkins_log/jenkins.log 清空文件
    这样操作更合适。

    出错原因

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

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

    参考博文:https://www.cnblogs.com/xd502djj/p/6668632.html

    相关文章

      网友评论

          本文标题:记录一次Linux服务器磁盘空间占满的修复过程

          本文链接:https://www.haomeiwen.com/subject/wwnujhtx.html