当前位置: 首页 > 科技观察

Linux根分区快满了,这个方法快速定位!_0

时间:2023-03-15 23:53:24 科技观察

在服务器运维过程中,我们经常会遇到这样的情况,收到服务器磁盘空间警告。登录服务器,通过df-Hl查看。与警告信息一致,接下来我们需要找到导致磁盘空间满的目录或文件。如何查找占用空间大的目录或文件?比较笨的方法是在根目录下通过du-hs命令列出各个目录占用的空间。然后用同样的方法继续寻找对应的目录。更高效的方法是使用du的-d参数,即--max-depth,来设置查询的目录深度。随着目录深度的增加,查询到的目录会大量显示。这时候可以使用grep进行过滤。du-h-d2|grep[GT]|sort-nrdu-h--max-depth=2|grep[GT]|sort-nr这样可以以G或T为单位搜索占用磁盘空间大目录,可排序。或者你可以通过find查询。find/-typef-size+1G-execdu-h{}\;从效率上来说,find比du更快更灵活。通过这两种方法,我们可以快速找到占用磁盘空间的罪魁祸首。你觉得有那么简单吗?很多时候,你会发现通过find或者du查找了半天,你会发现总占用空间和df占用的磁盘空间相差很大,比如上面两张图。通过df查看,磁盘使用了37G,但是在根目录下通过du-hs查看,加起来差不多10G,没有隐藏目录,谁吃光了空间?很明显,有被删除的文件占用了空间,文件被删除了,但是资源并没有释放。之前介绍过一个非常有用的命令:lsof,我们可以通过下面的命令来查看。从lsof+L1的结果可以看出有一个28G左右的大日志文件,删除了,但是没有释放空间。这是一种很常见的情况。对应的解决方法是重启tomcat应用,释放空间。磁盘空间莫名被吃掉?还有一个经常被问到的问题,就是通过df查看的磁盘。会发现Used和Avail的总和不够Size,莫名其妙的被吃掉了一部分。其实这是Linux文件系统的一种安全策略。它会默认为root用户预留5%的磁盘空间以备不时之需。这样可以保证一些关键的应用程序(比如数据库)在硬盘满的时候有一定的余地,不会马上崩溃。我们可以通过tune2fs修改预留空间的比例。tune2fs-m1/dev/vda1通过下图可以看到前后对比。就这样被吃掉的空间都被吐出来了!