• linux磁盘已满,查看那个目录文件最占磁盘空间并解决没有内存不耗费资源删除


    df -Th查看磁盘空间占用情况

    [root@IntelRC-Nginx-N023 ~]# df -Th
    Filesystem                  Type      Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root     xfs        40G   35G  5.4G  87% /
    devtmpfs                    devtmpfs  3.8G     0  3.8G   0% /dev
    tmpfs                       tmpfs     3.9G   56K  3.9G   1% /dev/shm
    tmpfs                       tmpfs     3.9G  427M  3.4G  11% /run
    tmpfs                       tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/vda1                   xfs       509M  156M  354M  31% /boot
    /dev/mapper/vm_data-lv_data xfs       300G   30G  271G  10% /opt/data
    tmpfs                       tmpfs     779M     0  779M   0% /run/user/0
    

    使用du -sh /* |sort -nr查看那个目录占用空间大

    [root@IntelRC-Nginx-N023 ~]# du -sh /* |sort -nr
    du: cannot access ‘/proc/256532/task/256532/fd/4’: No such file or directory
    du: cannot access ‘/proc/256532/task/256532/fdinfo/4’: No such file or directory
    du: cannot access ‘/proc/256532/fd/4’: No such file or directory
    du: cannot access ‘/proc/256532/fdinfo/4’: No such file or directory
    395M	/run
    319M	/home
    130M	/boot
    120M	/etc
    74M	/root
    56K	/dev
    33G	/var
    30G	/opt
    20M	/tmp
    1.5G	/usr
    0	/sys
    0	/srv
    0	/sbin
    0	/proc
    0	/mnt
    0	/media
    0	/lib64
    0	/lib
    0	/data
    0	/bin
    

    进一步目录排查

    然后那个目录占用多 再通过du -s /root/* | sort -nr 一层层排查,找到占用文件多的地方

    [root@IntelRC-Nginx-N023 ~]# du -sh /var/* |sort -nr
    425M	/var/opt
    245M	/var/cache
    64M	/var/lib
    29G	/var/adm
    16K	/var/spool
    16K	/var/data
    8.0K	/var/db
    3.8G	/var/log
    0	/var/yp
    0	/var/tmp
    0	/var/run
    0	/var/preserve
    0	/var/nis
    0	/var/mail
    0	/var/lock
    0	/var/local
    0	/var/kerberos
    0	/var/gopher
    0	/var/games
    0	/var/empty
    0	/var/crash
    
    
    [root@IntelRC-Nginx-N023 ~]# du -sh /var/adm/ |sort -nr
    29G	/var/adm/
    

    快速删除大量文件

    假如你要在linux下删除大量文件,比如100万、1000万,像/var/spool/clientmqueue/的mail邮件,/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf *可能就不好使了。 rsync 可以用来清空目录或文件,如下:

    做删除操作前,确认下你要删除那个文件的权限,属主属组, 最好从固态硬盘copy到机械硬盘上留备份

    # 1. 先建立一个空目录
    mkdir /data/blank
    
    # 2. rsync删除目标目录
    rsync --delete-before -d /data/blank/ /var/adm/
    # --delete-before 接收者在传输之前进行删除操作
    
    # 这样目标目录很快就被清空了
    

    为什么rsync能快速删除大文件?

    1rm命令大量调用了lstat64和unlink,可以推测删除每个文件前都从文件系统中做过一次lstat操作。过程:正式删除工作的第一阶段,需要通过getdirentries64调用,分批读取目录(每次大约为4K),在内存中建立rm的文件列表;第二阶段,lstat64确定所有文件的状态;第三阶段,通过unlink执行实际删除。这三个阶段都有比较多的系统调用和文件系统操作。

    2rsync所做的系统调用很少没有针对单个文件做lstat和unlink操作。命令执行前期,rsync开启了一片共享内存,通过mmap方式加载目录信息。只做目录同步,不需要针对单个文件做unlink。另外,在其他人的评测里,rm的上下文切换比较多,会造成System CPU占用较多——对于文件系统的操作,简单增加并发数并不总能提升操作速度。 总结:频繁做减法不如直接从头来过把文件系统的目录与书籍的目录做类比,rm删除内容时,将目录的每一个条目逐个删除(unlink),需要循环重复操作很多次;rsync删除内容时,建立好新的空目录,替换掉老目录,基本没开销。

    rm删除内容时,将目录的每一个条目逐个删除(unlink),需要循环重复操作很多次;rsync删除内容时,建立好新的空目录,替换掉老目录,基本没开销

    rsync与rm删除速度比较
    # 在一台主机上创建5万个空文件后再分别用rsync和rm 进行清理,以下是测试结果
    
    [root@www data1]# mkdir -p /tmp/empty/
    [root@www data1]# mkdir 361way;seq 1 50000 | xargs -I{} touch 361way/file_{}
    [root@www data1]# time rsync  --delete -rlptD /tmp/empty/ /data1/361way/
    real    0m0.149s
    user    0m0.018s
    sys     0m0.091s
    [root@www data1]# seq 1 50000 | xargs -I{} touch 361way/file_{}
    [root@www data1]# time rm -rf 361way/*
    real    0m0.831s
    user    0m0.366s
    sys     0m0.464s
    

    杀掉占用文件进程

    如果以上方法没找到问题所在,那么可以使用以下命令, 看看是否删除掉的文件仍然被进程占用而没有进行实际删除

    lsof |grep deleted
    zabbix_ag    945            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
    zabbix_ag    945            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
    zabbix_ag    946            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
    zabbix_ag    946            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
    zabbix_ag    947            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
    zabbix_ag    947            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
    zabbix_ag    948            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
    zabbix_ag    948            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
    zabbix_ag    949            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
    zabbix_ag    949            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
    zabbix_ag    950            zabbix    1w      REG   
    
  • 相关阅读:
    ohmyzsh 更新失败(omz update error)
    连续变量的贝叶斯定理计算
    linux listen backlog
    linux fastcgi 与 phpfpm的区别
    linux netstat 命令详解
    linux dup与dup2
    DAY 233 python标准库
    DAY 231 Float问题
    DAY 232 python日期和时间
    DAY 234 python时间和日期
  • 原文地址:https://www.cnblogs.com/you-men/p/13952373.html
Copyright © 2020-2023  润新知