跳到主要内容

linux根分区满了如何处理(查找大文件方法)

TS:linux根分区满了如何处理(查找大文件方法)(du命令查找)

image-20241017061949102

目录

[TOC]

背景

在服务器运维过程中,我们时常会遇到这样的情况,

收到服务器磁盘空间告警:

image-20241017060418780

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

和告警信息一致,接着我们就是要找到导致磁盘空间满的目录或文件。

如果linux根分区使用量达到100%,会造成如下现象:

root不能登录;

系统不能正常启动;

上次这个/var分区被写满了,使用率为100%,重启机器年后进入这个emergency mode

image-20220212101716032

1、通过du命令查找根分区内的大文件

##步骤1
du -sh /* 2>/dev/null | sort -hr | head -5
如果上述命令执行后发现/var/占空间最大,那么在查找/var分区内的大文件,如:

##步骤2
du -sh /var/* 2>/dev/null | sort -hr | head -3

以此类推,最后找到那个大文件,删除或者采取其他措施(移动到替他路径)即可!





#另外:想要对当前目录下的all文件进行排序,可以使用如下命令
$ll -Sh #将当前目录下的文件以从大到小的方式排序
-r, --reverse #逆转
reverse order while sorting
-S sort by file size
-h, --human-readable
with -l, print sizes in human readable format (e.g., 1K 234M 2G)
示例如下:
[root@nsgw-mvno1 ~]# ll -Sh
total 128K
-rw-r--r--. 1 root root 71K Jul 31 2013 install.log
-rw-r--r--. 1 root root 12K Jul 31 2013 install.log.syslog
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Desktop
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Documents
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Downloads
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Music
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Pictures
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Public
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Templates
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Videos
-rw-------. 1 root root 3.4K Jul 31 2013 anaconda-ks.cfg
-rw-r--r-- 1 root root 80 Feb 11 21:47 disk.sh
[root@nsgw-mvno1 ~]# ll -Shr
total 128K
-rw-r--r-- 1 root root 80 Feb 11 21:47 disk.sh
-rw-------. 1 root root 3.4K Jul 31 2013 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Videos
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Templates
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Public
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Pictures
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Music
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Downloads
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Documents
drwxr-xr-x. 2 root root 4.0K Feb 1 2014 Desktop
-rw-r--r--. 1 root root 12K Jul 31 2013 install.log.syslog
-rw-r--r--. 1 root root 71K Jul 31 2013 install.log
[root@nsgw-mvno1 ~]#

注意:接业务报障,一般是因为应用程序配置错误,导致在/var/log目录下会生成很大的日志文件,进而导致/var分区使用了达到100%,这个可以临时将之前的log日志大文件移动到其他路径下,但后期还需要业务侧对应用配置进行优化才行。

扩展1:lsof命令

你以为就这么简单?很多时候,你会发现,通过 find 或 du 查半天,发现所有加起来的占用空间,和 df 看到的磁盘空间占用,相差很大,就比如我上面的两张图。

通过 df 查看,磁盘使用 37G,但是在根目录下通过 du -hs 查看,总共加起来差不多 10G,没有隐藏目录,那空间被谁吃了?

很明显,有空间被已删除文件占用,文件删除了,但是资源没释放

之前介绍过一个很好用的命令:lsof,我们可以通过以下命令去查看:

lsof +L1  

从结果可以看出,有一个 28G 左右的大日志文件,删除了,但是空间没释放,这是很常见的一种情况。

对应的解决方法就是,重启 tomcat 应用,释放空间。

扩展2:磁盘空间莫名被吃?

还有一种经常有人问的问题,就是,通过 df 查看到的磁盘:

会发现,Used 和 Avail 加起来不够 Size,莫名被吃掉一部分

其实这是 Linux 文件系统的一种安全策略,它默认会为 root 用户保留 5% 的磁盘空间,留作紧急情况使用。这样能保证有些关键应用(比如数据库)在硬盘满的时候有点余地,不致于马上就 crash。

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

tune2fs -m 1 /dev/vda1

通过下图可以看到前后对比:

这样被吃掉的空间,就释放出来了!