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

最新文章

  1. CodeForces 261B Maxim and Restaurant 解法汇总
  2. 关于ThinkPHP在BAE上URL的rewrite问题
  3. android 给空白包签名
  4. C#:Oracle数据库带参PLSQL语句的正确性验证
  5. 一篇让Java程序猿随时可以翻看的Oracle总结
  6. Java网页数据采集器[上篇-数据采集]【转载】
  7. thinkphp中的HTTP类实现下载
  8. swift实现ios类似微信输入框跟随键盘弹出的效果
  9. 利用JSP编程技术实现一个简单的购物车程序
  10. Block 再学习 !
  11. pythoncharm 中解决启动server时出现 “django.core.exceptions.ImproperlyConfigured: Requested setting DEBUG, but settings are not configured”的错误
  12. 【NOIP 2017】宝藏
  13. dbForge Studio for MySQL V8.0 Enterprise
  14. Vitrual Box设置linux网络连接到外网
  15. ES6class
  16. X.509证书及CeritificationPath及PKCS
  17. DXP 板层
  18. (转)azkaban job参数说明
  19. 共享内存shm*(生产者和消费者)
  20. git reset和git revert

热门文章

  1. Error: Module did not self-register报错解决
  2. Golang搭建接口测试框架
  3. Go path/filepath包
  4. Flutter 开发从 0 到 1(四)ListView 下拉加载和加载更多
  5. 联赛模拟测试12 B. trade
  6. 多测师讲解python _string_高级讲师肖sir
  7. rs232转以太网
  8. 【人人都懂密码学】一篇最易懂的Java密码学入门教程
  9. keccak和sha3的区别
  10. Selenium之自动化常遇问题