zoukankan      html  css  js  c++  java
  • redhat 系统查看文件系统空间占用 du df

    公司生产中的一台服务器根目录使用过多,需要检查是哪个目录占用,使用du命令对文件和目录磁盘使用的空间的查看

    du -ah --max-depth=1 /

    但是输出结果中容易出一些无法查看的文件,比如/proc /sys 目录,所以我们可以排除指定的目录

    du -ah --max-depth=1 / --exclude="proc"
    或使用 模糊匹配 都行
    du -ah --max-depth=1 / --exclude="*proc*"
    • 扩展内容,想要排除多个文件或文件夹,且只想看到空间大于 G 的结果
    du -ah --max-depth=1 /* 
    --exclude="proc" 
    --exclude="cgroup" 
    --exclude="selinux" 
    --exclude="*bin" 
    --exclude="lib*" 
    --exclude="etc" 
    --exclude="sys" 
    --exclude="boot" 
    --exclude="data*" | grep G
     命令使用
    du 命令选项
    -a或-all 显示目录中个别文件的大小。
    -b或-bytes 显示目录或文件大小时,以byte为单位。
    -c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
    -k或--kilobytes 以KB(1024bytes)为单位输出。
    -m或--megabytes 以MB为单位输出。
    -s或--summarize 仅显示总计,只列出最后加总的值。
    -h或--human-readable 以K,M,G为单位,提高信息的可读性。
    -x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
    -L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
    -S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
    -X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
    --exclude=<目录或文件> 略过指定的目录或文件。
    -D或--dereference-args 显示指定符号链接的源文件大小。
    -H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
    -l或--count-links 重复计算硬件链接的文件。

     #  df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/xvdb1 50G 46G 1.2G 98% /data
    显示已经使用快50G空间了

    可是在/data 下用 du -sh . 只显示使用了19G

    导致这个两个命令查看磁盘容量不一致的原因是,用户删除了大量的文件被删除后,在文件系统目录中已经不可见了,所以du就不会再统计它。然而如果此时还有运行的进程持有这个已经被删除的文件句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,df仍会统计这个被删除的文件。

    可通过 lsof命令查询处于deleted状态的文件,被删除的文件在系统中被标记为deleted。如果系统有大量deleted状态的文件,会导致du和df统计结果不一致。

    # lsof |grep deleted        #在opt目录下执行lsof |grep deleted

    解决方法:

    1、根据lsof列出的pid直接kill相应进程或者重启对应的服务。示例:
    # kill -9 692
    注:如果服务器正在运行业务,kill 会导致进程直接终止,可能会影响到业务,请慎重操作。


    2、重启服务器。

    重启服务器系统会退出现有的进程,开机后重新加载。该过程会释放调用的deleted文件的句柄。

    du -sh *
    df -Th
    显示大小不一样,一般而言,df显示的使用空间要大于du,这是因为:
    当一个文件被删除的时候,在文件系统的目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件。
    查看方法:
    lsof |grep delete
    列出来的这些文件,表示已经删除,但实际上进程还在使用。



  • 相关阅读:
    1. Redis是属于多线程还是单线程?不同版本之间有什么区别?
    揭开操作系统之内存管理的面纱
    《Cython系列》3. 深入Cython(内含Python解释器相关知识以及源码分析)
    《Cython系列》2. 编译并运行Cython代码
    《Cython系列》1. Cython概要
    python执行lua代码
    lua语言(2):闭包、模式匹配、日期、编译、模块
    100个网络基础知识
    str list tuple dict
    基础算法
  • 原文地址:https://www.cnblogs.com/augusite/p/14107980.html
Copyright © 2011-2022 走看看