暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

磁盘空间难清理的困境

IT那活儿 2021-12-29
910

点击上方“IT那活儿”,关注后了解更多精彩内容!!

问题现象

如果有一天,服务器磁盘空间占用满了,会觉得这是个小问题,对大多数运维人来讲,这得确是个小问题。
如果有一天,突然发现,服务器磁盘空间占用满了,却迟迟清理不了,也许就不是个小问题了。
这一天来了,df命令统计到服务器根分区100%了,告警中…

环境描述

操作系统:Red Hat Enterprise Linux 7.6
业务系统:xxx业务系统

问题处理

No.1 常规操作

磁盘空间占用满,一般清理步骤,使用du命令查询磁盘空间下的磁盘空间占用大小,运气好的话就找到了,大多数情况下运气都挺好的。
-- 命令示例如下:
du -skh /* #查看根目录下目录大小;
du -scmx .[!.]* * 2>/dev/null | sort -n #查看隐藏文件大小。

No.2 幸运一击

偶尔情况下,排查下服务器是否存在已经被删除但是还存在被其他进程访问的文件。这些文件已经从文件系统树中删除(或者更恰当地说,取消链接),但是由于一个或多个进程仍然打开它们,它们占用的磁盘空间无法回收。
-- 命令示例如下:
# lsof / | grep -i deleted
--此方式查询到结果文件会带有[deleted]标签,如图所示:
这种情况下,需要重启被标记删除文件所依赖的相关进程服务就可以恢复。
示例中只需要重启php服务或kill掉相关php进程即可。
极端情况下,重启主机(危险操作)也可以。

No.3 灵机一动

-- 有种排查方法,排查下服务器上是否存在稀疏文件:
稀疏文件的文件大小使用ls和df命令查询时是不一样,在排查磁盘占用过程中使用ls命令查看文件大小是存在一些误区的。
稀疏文件在Linux文件系统中比较常见,NTFS、HFS+文件系统都支持稀疏文件系统。稀疏文件通过仅存储空洞的元数据而不使用实际磁盘块来有效地使用存储。稀疏文件是存储空洞的元数据集合成的一个文件,稀疏文件的实际数据大小与本身定义的文件大小是不一致的。
-- 示例如下:
第一列是实际使用的磁盘空间。这个文件实际上消耗了 12Gb 的空间。
第二个大小列给出文件元数据大小。此文件的元数据报告定义它是一个 24Gb 文件。
稀疏文件大小查看方式:#ls -lsh spacefile [稀疏文件名]
注意:稀疏文件的实际数据大小才会被df命令统计到磁盘空间占用比例

No.4 思如泉涌

-- 还有一种排查办法,排查是否有[Mounted-Over]的现象。
[Mounted-Over]是指当前挂载点上包含挂载分区之前的数据。
如果挂载点在挂载分区之前包含数据,那么df命令是可以统计到分区挂载之前的数据占用空间的。
例如,如果目录中/mnt/test包含大文件,然后在其目录上挂载了 NFS 文件系统/mnt/test,df命令会统计/mnt/test目录中之前的大文件及之后挂载的NFS文件系统空间。
在生产环境中在无法判断问题根源的情况下,不能贸然就卸载/mnt/test挂载点,可以通过将可疑文件系统绑定挂载到不同目录来验证生产中分区挂载点下是否有隐藏数据。
-- 命令示例如下:
$ mkdir /tmp/root_chk$ mount --bind / /tmp/root_chk$ du -h /tmp/root_chk/mnt/test
-- 示例如下:
例如,从以下开始,我们看到 df 命令统计 /tmp 正在使用 3.1G 的分配空间,但 du 仅统计为11M。
现在我们运行上面的bind命令,发现/tmp/mnt目录下隐藏着文件作为挂载点。这些文件存在于 /tmp 文件系统中,但是一旦另一个文件系统分区使用该目录为挂载点,这些文件就对 du 命令的文件系统扫描功能不可见。
注意:此方法应仅用于查看挂载点下占用的空间。 尝试删除 --bind 挂载挂载中的文件可能会导致文件系统损坏。 要删除文件,请卸载必要的文件系统或在救援模式下执行操作。

处理总结

在处理磁盘空间占用问题的过程中,遇到的一些问题,有些可能是文件系统自身特性导致的,但有时候是人为原因造成文件系统出现如此异常的情况,操作处理的规范性,才能有助于减少后期维护成本,提高运维工作效率。
但针对处理磁盘空间占满的技术问题上,在没有头绪的情况下,需要从不同角度、不同思路去尝试解决下,必然会有不一样的发现。前人方法多,但学习的同时不要限制自己的思维。

本 文 原 创 来 源:IT那活儿微信公众号(上海新炬王翦团队)


文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论