Linux分区快满了,若干方法快速定位

"当遇到Linux服务器磁盘空间不足时,可以使用`df`和`du`命令来查找占用空间的目录和文件。通过`du -sh *`或`du -d 2 | grep [GT] | sort -nr`可以找到大容量的目录,而`find -type f -size +1G -exec du -h {}
摘要由CSDN通过智能技术生成

在服务器过程中,我们常常会收到关于服务器磁盘满了的警告
服务器磁盘容量不足

可登录服务器,通过df -Hl查看

[root@192.168.0.1]# df -Hl
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0G     0  4.0G   0% /dev
tmpfs           4.0G  4.1k  4.0G   1% /dev/shm
tmpfs           4.0G  623k  4.0G   1% /run
tmpfs           4.0G     0  4.0G   0% /sys/fs/cgroup
/dev/vda1       317G  281G   23G  93% /
tmpfs           792M     0  792M   0% /run/user/1002
tmpfs           792M     0  792M   0% /run/user/0

和告警信息一致,接着我们就是要找到导致磁盘空间满的目录或文件
那么如何找到占用空间大的目录或文件?
一种比较笨的方法是,在根目录下,通过du -sh ./*命令,列出各目录所占空间大小

[root@192.168.0.1 wwwroot]# du -sh ./*
4.0K	./oas
231G	./aby
4.0K	./aby2
1.6G	./keji.cn
4.0K	./dao
280M	./rvice
584M	./hu
4.0K	./kf
4.0K	./obk_
252K	./www.keji.cn
252K	./www.keji.com
20K	./www.jian.com

之后用同样的方法继续在对应目录下去查找
如果在相对高效一点的方法是通过du的-d参数,或–max-depth,设置查询的目录深度,目录深度增加,所查询的目录,展示出来会很多,这个时候可以通过grep进行过滤

du -h --max-depth=2|grep [GT] |sort -nr  

执行结果如下:

[root@192.168.0.1 wwwroot]# du -h -d 2|grep [GT] |sort -nr  
233G	.
231G	./bay/public
231G	./bay
7.1M	./bayxibao.keji.cn/ThinkPHP
1.6G	./bayxibao.keji.cn
1.5G	./bayxibao.keji.cn/Uploads

通过这样,可以搜索出以G或者T为单位的占用磁盘空间的大号目录,并排序撒~~
再或者可以通过find来查询

find / -type f -size +1G -exec du -h {} \;  

执行结果如下:

[root@192.168.0.1 wwwroot]# find / -type f -size +1G -exec du -h {} \;  
0	/proc/kcore
find: ‘/proc/8743/task/8743/fdinfo/6’: No such file or directory
find: ‘/proc/8743/fdinfo/5’: No such file or directory
1.2G	/www/wwwlogs/bay.keji.cn.log
1.1G	/www/server/data/mysql-bin.000026

从效率上来说,find要比du要更快速、灵活
通过这两种方法,我们可以以最快的效率找到磁盘占用最大的文件
其实事实上并没有这么简单?很多时候,通过find或du查半天,发现所有加起来的占用空间,和df看到的磁盘空间占用,相差很大,就比如我上面的两个命令执行结果。
通过df查看,磁盘使用281G,但是在根目录下通过du -hs 查看,总共加起来差不多10G,没有隐藏目录,那空间被谁吃了?
很明显,有空间被已删除文件占用,文件删除了,但是资源没释放。
目前还知道一个比较好用的命令:lsof,我们可以通过以下命令去查看。

lsof

从执行结果可以看出,有一个28G左右的大日志文件,删除了,但是空间没释放,这是很常见的一种情况,对应的解决方法就是,重启服务器应用,释放空间。
还有一种经常有人问的问题,就是通过df查看到的磁盘。

[root@izwz94hpdgvnev3dhdpzc3z ~]# df -hl
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.7G     0  3.7G   0% /dev
tmpfs           3.7G  4.0K  3.7G   1% /dev/shm
tmpfs           3.7G  608K  3.7G   1% /run
tmpfs           3.7G     0  3.7G   0% /sys/fs/cgroup
/dev/vda1       296G  262G   22G  93% /
tmpfs           756M     0  756M   0% /run/user/1002
tmpfs           756M     0  756M   0% /run/user/0

会发现,Used和Avail加起来不够Size,莫名被吃掉一部分
其实这是Linux文件系统的一种安全策略,它默认会为root用户保留5%的磁盘空间,留作紧急情况使用。这样能保证有些关键应用(比如数据库)在硬盘满的时候有点余地,不至于马上就 crash

我们可以通过tune2fs修改预留空间的比例

tune2fs -m 1 /dev/vda1 

完成后被吃掉的空间,就吐出来了~~~~~~~~

下班~不卷了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值