admin管理员组

文章数量:1531434

最近在测试的时候总是遇到磁盘空间不足的情况,总结一下磁盘清理的步骤。

解决问题并查找根源:

一、服务空间不足,服务无法部署或服务不可用

二、清理了大日志文件,但是空间还是不足

1、首先是通过df -h命令查看磁盘的使用情况,主演是看Avail(可用)和Use(已用)的占用百分比,如下所示:

df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       50G   43G  4.2G  92% /
tmpfs                  32G     0   32G   0% /dev/shm
/dev/sda1             485M  120M  341M  26% /boot
/dev/mapper/VolGroup-lv_home
                      1.6T  1.4T   60G  96% /home

如果剩余量很大,则暂时可以没必要清理磁盘

还可以通过 find / -type f -size +100M 命令,搜索整个磁盘大于100M的大文件

2、开始查找服务器中的大文件,从根目录开始查找,通过du -h --max-depth=1 或者 du -sh * 命令查看当前目录下哪个子目录占用空间大小,然后一级一级du下去

3、进入到最底层目录查看哪个文件或者日志文件比较大,比如是logs文件夹下saas_user.log占用好几个G,如果是测试日志则可以清理,如果是线上或者数据比较重要的,

则可以清理比较久远的日志文件,如果是某个服务因为服务文件夹中某个文件过大导致服务运行较慢,则可以将对应文件备份到本地或者其他服务器然后删除,重新开启服务。

4、当然也可以用最简便的方法看清理日志文件,比如要定位大于100M的日志文件 find / -type f -size +100M -print

5、如果查找确认之后发现并无占用较大空间的文件,需确认该文件系统挂载点/home目录下是否已被使用并且存在占用空间较大的文件。使用umout  /home卸载挂载点查看。

6、当我们删除了大文件以及占用很大的日志文件后,再次df查看一下占用量仍然是100%,那么就是因为有进程在对已删除文件的读写操作,这类操作是无效的,也正是磁盘空间莫名消失的根本原因。

7、问题所在是:当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间,最后造成磁盘空间占用100%,整个系统无法正常运行。这种情况下,通过df和du命令查找的磁盘空间,两者是无法匹配的,可能df显示磁盘100%,而du查找目录的磁盘容量占用却很小,因此我们可以断定是某个大文件被某些程序占用了,并且这些大文件已经被删除了,但是对应的文件句柄没有被关闭内核无法回收被占用空间。因此我们需要找到这些句柄(进程),通过执行命令 lsof | grep deleted 查看有那些进程 

清理大文件时候记得曾经删除(rm)过这些文件,所以可以断定占空空间的元凶就是这些未被关闭的句柄资源,所以需要kill 掉释放空间。

8、kill 掉进程后可以在查看磁盘空间,解决问题

9、lsof |grep delete

磁盘空间满了的时候,找不到哪里被占用了,执行下上面的代码

10、服务器空间比较少,但是大部分的空间是被日志占用。当我们服务、服务日志无法再删除了之后,如果磁盘空间还是占用比较大。可以看一下linux系统日志。

cd /var/log

linux服务器的各种内核日志、启动日志等系统日志都会打印到 /var/log/message 日志文件中,而且也是占用资源最大的一块。所以可以清除这些日志。

注意:只能删除 message-20190630 这样已经归档的日志,不能删除 message 日志文件,否则可能会造成内核泄露,服务器崩溃!

本文标签: 磁盘服务器Linux