欢迎光临
我们一直在努力

服务器磁盘告警处理全攻略:df -h、du、find、ncdu完整排查流程

服务器磁盘告警处理全攻略:从df -h到du、find、ncdu的完整排查流程

在Linux服务器运维过程中,磁盘空间告警是最常见的问题之一。当磁盘使用率达到阈值时,系统性能会明显下降,甚至导致服务不可用。本文将介绍一套完整的磁盘告警排查流程,从基础的df -h命令开始,逐步深入到du、find和ncdu等工具的使用,帮助运维人员快速定位并解决磁盘空间不足的问题。

一、磁盘告警的初步诊断:df -h命令

当收到磁盘告警通知时,第一步是使用df -h命令查看文件系统的整体使用情况。该命令以人类可读的格式显示各个挂载点的磁盘空间使用情况。

df -h

输出示例:

文件系统        容量  已用  可用  已用% 挂载点
/dev/sda1        100G   95G  5G    95%  /
tmpfs            7.8G  1.2G  6.6G  16%  /dev/shm
/dev/sdb1        500G  300G 200G   60%  /data

重点关注已用百分比接近或超过90%的挂载点。在上面的示例中,根分区/的使用率已经达到95%,需要立即处理。如果发现某个挂载点空间不足,可以进一步使用df -i检查inode使用情况,因为inode耗尽也会导致磁盘告警。

df -i

二、定位大文件目录:du命令的使用

确定需要清理的挂载点后,使用du命令查看该目录下各个子目录的空间占用情况。推荐使用以下命令组合:

du -sh /var/* | sort -rh | head -20

该命令会列出/var目录下所有子目录的总大小,并按从大到小排序,显示前20个。这样可以快速定位占用空间最大的目录。

如果需要更详细的层级信息,可以使用:

du -h --max-depth=2 /var | sort -rh | head -30

对于日志文件较多的目录,如/var/log,可以单独查看:

du -sh /var/log/* | sort -rh | head -10

三、查找特定大文件:find命令实战

当目录层级较深时,使用find命令直接查找超过指定大小的文件会更高效。以下是一些常用的find命令示例:

查找大于100MB的文件:

find / -type f -size +100M -exec ls -lh {} ;

查找最近7天内修改过的大文件:

find /data -type f -size +50M -mtime -7 -exec ls -lh {} ;

查找并删除超过30天的日志文件(谨慎操作):

find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} ;

查找空文件或空目录:

find /data -type f -empty -delete
find /data -type d -empty -delete

注意:使用-exec rm删除文件前,务必先使用不带-delete的find命令确认文件列表,避免误删重要数据。

四、交互式磁盘分析工具:ncdu

对于需要交互式浏览磁盘占用情况的场景,ncdu(NCurses Disk Usage)是一个非常实用的工具。它提供了类似图形界面的交互式界面,可以方便地浏览目录树和文件大小。

安装ncdu:

# Debian/Ubuntu
apt-get install ncdu

# CentOS/RHEL
yum install ncdu

# 使用包管理器直接安装
# 也可以从源码编译安装

使用ncdu扫描目录:

ncdu /

在ncdu界面中,可以使用方向键浏览目录,按d键删除选中的文件或目录,按q键退出。ncdu还支持导出扫描结果:

ncdu -o /tmp/disk_usage.json /

# 之后可以离线查看
ncdu -f /tmp/disk_usage.json

五、清理常见占用空间的文件类型

在定位到占用空间较大的文件后,通常需要清理以下几类文件:

1. 系统日志文件

系统日志通常位于/var/log目录下,包括syslog、messages、auth.log等。可以使用logrotate工具进行日志轮转,或者手动清理:

cat /dev/null > /var/log/syslog
cat /dev/null > /var/log/messages

注意:不要直接删除日志文件,而应使用cat /dev/null >方式清空,否则可能导致进程无法写入日志。

2. 软件包缓存

包管理器会缓存下载的软件包,占用大量空间:

# apt (Debian/Ubuntu)
apt-get clean

# yum (CentOS/RHEL)
yum clean all

# dnf (Fedora)
dnf clean all

3. 临时文件

/tmp目录下的临时文件可以定期清理:

find /tmp -type f -atime +7 -delete

4. 核心转储文件

程序崩溃产生的core dump文件可能非常大,可以查找并删除:

find / -type f -name "core.*" -size +100M -exec ls -lh {} ;

六、预防措施与监控建议

为了避免磁盘告警频繁发生,建议采取以下预防措施:

  • 配置日志轮转策略,定期压缩和清理日志文件
  • 设置磁盘空间监控告警,在达到80%使用率时提前通知
  • 定期使用ncdu或du命令检查磁盘空间使用趋势
  • 对于大文件,考虑使用rsync或scp迁移到其他存储设备
  • 使用cron定时任务自动清理临时文件

示例cron任务,每天凌晨2点清理7天前的临时文件:

0 2 * * * find /tmp -type f -atime +7 -delete

七、总结

磁盘告警处理是Linux运维的基本技能。通过df -h快速定位问题分区,使用du和find查找大文件,配合ncdu进行交互式分析,可以高效地解决磁盘空间不足的问题。同时,建立完善的监控和预防机制,能够减少磁盘告警的发生频率,保障服务器稳定运行。

FAQ

Q1: df -h显示磁盘已满,但du统计的总大小远小于磁盘容量,为什么?

这种情况通常是因为有进程正在写入已删除的文件。文件被删除后,如果仍有进程持有文件句柄,空间不会立即释放。可以使用lsof | grep deleted命令查找此类进程,重启相关进程或服务即可释放空间。

Q2: 如何查找并清理Docker容器产生的磁盘占用?

Docker容器日志和镜像可能占用大量空间。可以使用docker system df查看占用情况,使用docker system prune清理悬空镜像和停止的容器。日志文件通常位于/var/lib/docker/containers/目录下,可以设置日志轮转或限制日志大小。

Q3: ncdu扫描大目录时速度很慢,有什么优化方法?

可以排除不需要扫描的目录,例如:ncdu / --exclude /proc --exclude /sys --exclude /dev。另外,首次扫描后可以使用ncdu -o导出结果,后续使用ncdu -f加载,避免重复扫描。

Q4: 清理磁盘空间后,如何确认空间是否真正释放?

重新运行df -h查看对应挂载点的已用空间是否下降。如果空间没有释放,检查是否有进程仍占用已删除的文件,使用lsof | grep deleted查找并处理。

赞(0) 打赏
未经允许不得转载:云服务器推荐 » 服务器磁盘告警处理全攻略:df -h、du、find、ncdu完整排查流程

评论 抢沙发

更好的WordPress主题

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册