服务器主机磁盘占用过高会导致系统卡、慢,而且对硬盘也有一定的损伤,更会对服务器的性能有所影响,所以在服务器主机出现磁盘空间报警的时候,需要及时排查磁盘占用率高的原因,并根据原因找到相应的解决方法
在 Windows 系统中,我们可以使用 TreeSize 工具查找一些大文件或者目录,在 linux 系统中,如果没有好的监控排查工具,我们可以使用 linux 的 df、du、find 三个命令来排查磁盘占用率过高的问题。
一、df、du、find 命令简介
df 命令是通过文件系统获取磁盘空间的大小及占用信息,速度很快,会计算操作系统上进程刚刚创建或者删除,还没被进程释放的文件,但是不能统计具体的文件夹的大小,常用的参数是-h,该参数会把磁盘空间按照用户易读的形式输出,通常用 M 来代替兆字节,用 G 替代吉字节。
du 命令是通过逐级进入指定目录的每一个子目录,逐个计算每个文件的大小并相加,最终显示出来,速度慢,用户权限敏感,不会计算没被进程释放的创建或删除的文件。
du 常用的参数有-c(显示所有已列出文件的总大小),-h(输出会按用户易读的格式输出大小,即用 K 替代千字节,用 M 替代兆字节,用 G 替代吉字节),-s(显示每个输出参数的总计),--max-depth(显示的目录层数,超过指定层数的目录后,不显示)。
find 命令用来在指定目录下查找文件,它可以按文件名称(-name)、目录查找(-path)、权限(-perm)、类型(-type)、属主(-user,-nouser)、属组(-group,-nogroup)、大小(-size)、文件新旧(-newer)、时间(-mtime、-atime、-ctime、-cmin)来查找,具体如何使用,可以从命令手册中查询。
使用上面三个命令,可以定位大部分磁盘空间的使用问题。
二、实际使用案例
首先,我们可以使用 df 命令查看磁盘的整体占用情况,如果觉得数据不好读,可以加上-h 参数。
通过上面的输出,可以看出/挂载节点的占用率已经达到了 85%。知道了整体的占用情况之后,接下来需要知道这个挂载点下面每个目录的具体使用情况,此时我们可以使用 du 命令。
默认情况下,du 命令会显示当前目录下的所有文件、目录和子目录的磁盘空间占用情况,所以如果我们直接对根目录使用 du 命令,可能会有大量的目录输出到控制台,不方便定位出具体的大文件夹。
此时我们可以使用 sort 和 head 配合 du 来找出大文件夹。
上面可以看出,根目录有 154458892 个 1204 字节,/home 目录和/usr 目录分别有 95569048 个 1024 字节和 49834880 个 1024 字节,属于比较大的目录。
接下来,主要从这两个目录中来定位大文件夹和大文件。以/home 目录为例,重复使用上面的命令,直到找到大文件。
到/q 目录里面的内容占到了 85857600 个 1024 字节,进入该目录,一个目录很大可能是存在大文件,也可能是小文件很多,我们使用下面命令查找大于 10M(如果没找到可以调小一些)的文件及个数。
sudo find . -type f -size +10M -print -exec wc -l {} \;
使用上面的命令,我们可以看到里面主要包括很多日志文件、下载服务的缓存文件和备份的部署文件,从而我们可以得出结论,影响磁盘空间占用情况的主要是服务日志功能和下载功能,对应的我们可以修改日志输出的配置和下载后及时删除文件缓存来解决。