背景
在服务运行过程中,难免会大量产生日志文件与临时文件,在目录用量大于90%时,服务器监测会进行报警。因此,如何定位到这些占用大量硬盘文件的位置并定时清除则尤为重要。
操作步骤
1. 根目录全局查找
df -h
查询到根目录下的各目录用量
[root@11-11-1-11.test-service] df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/docker 50G 40G 44G 90% /home
/dev/sda3 732G 274G 422G 40% /etc/hostname
shm 2.0G 0 2.0G 0% /dev/shm
可以看到/home目录已占用90%以上,故定为到此处为用量报警的原因。
2. 进一步查询
du -h /home --max-depth=1 | sort -hr | head -n
[root@11-11-1-11.test-service ~] du -h /home --max-depth=1 | sort -hr | head -n 10
16G /home/service
16G /home
56M /home/agent
20K /home/amy
16K /home/ops
16K /home/lost+found
可以看到/home/service目录为占用量较大的目录,继续查询其下的用量情况
du -h /home/service/ --max-depth=1 | sort -hr | head -n 10
[root@11-11-1-11.test-service service] du -h /home/service/ --max-depth=1 | sort -hr | head -n 10
16G /home/service/
15G /home/service/var
846M /home/service/app
4.0K /home/service/scripts
4.0K /home/service/common
同样的方式继续向下查询,直到定位到具体文件
[root@11-11-1-11.test-service privacy] du -h /home/service/var/logs/privacy/ --max-depth=1 | sort -hr | head -n 10
13G /home/service/var/logs/privacy/
6.5G /home/service/var/logs/privacy/task
6.5G /home/service/var/logs/privacy/privacy_ts
41M /home/service/var/logs/privacy/http-log
[root@11-11-1-11.test-service privacy] cd task/
[root@11-11-1-11.test-service task] ll
total 6782132
-rw-rw-r-- 1 service service 196480297 Oct 8 23:59 task-2023-10-08.log
-rw-rw-r-- 1 service service 201108677 Oct 9 23:59 task-2023-10-09.log
-rw-rw-r-- 1 service service 206364534 Oct 10 23:59 task-2023-10-10.log
-rw-rw-r-- 1 service service 209198277 Oct 11 23:59 task-2023-10-11.log
-rw-rw-r-- 1 service service 212050054 Oct 12 23:59 task-2023-10-12.log
.
.
.
查到有大量的log文件,这里就是导致用量过大的原因
3. 删除log文件
[root@11-11-1-11.test-service task] rm -f *.log
再次执行查询总量
[root@11-11-1-11.test-service ~] df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/docker 50G 4G 44G 9% /home
/dev/sda3 732G 274G 422G 40% /etc/hostname
shm 2.0G 0 2.0G 0% /dev/shm
至此,/home目录下的用量问题解决
4. 补充
如果我们想只删除目录中大于多少兆的文件,可以参考如下步骤
首先我们先创建两个大文件,一个50M,一个100M
[root@11-11-1-11.test-service /] mkdir test
[root@11-11-1-11.test-service /] cd test/
[root@11-11-1-11.test-service /] dd if=/dev/zero of=test-big1 bs=1M count=0 seek=50
[root@11-11-1-11.test-service /] dd if=/dev/zero of=test-big2 bs=1M count=0 seek=100
查看创建的文件
[root@11-11-1-11.test-service test] ll -h
total 0
-rw-r--r-- 1 root root 50M Nov 7 15:07 test-big1
-rw-r--r-- 1 root root 100M Nov 7 15:07 test-big2
查找大于50M的文件
find /test -type f -size +50M
结果如下
[root@11-11-1-11.test-service test] find /test -type f -size +50M
/test/test-big2
删除大于50M的文件
find /test -type f -size +50M -exec rm -rf {} \;
再执行查询后
[root@11-11-1-11.test-service test] ll -h
total 0
-rw-r--r-- 1 root root 50M Nov 7 15:07 test-big1
至此,大于50M的文件就被我们删除了