当前位置:首页>Linux>Linux服务器磁盘占用分析和清理

Linux服务器磁盘占用分析和清理

  • 2026-08-21 10:07:09
Linux服务器磁盘占用分析和清理

最近发现自己服务器的磁盘占用比例升到了70%以上,为了清理和之后维护,我理了下一些 linux 运维中可以用到的常用命令。

记录下来,给之后做个备忘录,也希望能帮到大家。

话不多说,直接上代码

一、问题分析与诊断

1. 查看整体磁盘使用情况

# 查看所有挂载点的磁盘使用情况
df -h

# 以更易读的方式显示,按使用率排序
df -hT | sort -k6 -rh

# 查看inode使用情况(有时文件数太多也会导致问题)
df -i

2. 定位大目录

# 查看根目录下各文件夹大小
sudo du -sh /* 2>/dev/null | sort -rh | head -20

# 深入分析特定目录
sudo du -sh /var/* 2>/dev/null | sort -rh | head -10
sudo du -sh /home/* 2>/dev/null | sort -rh | head -10
sudo du -sh /usr/* 2>/dev/null | sort -rh | head -10

3. 使用ncdu(更直观的工具)

# 安装ncdu
sudo apt-get install ncdu  # Debian/Ubuntu
sudo yum install ncdu      # CentOS/RHEL

# 使用ncdu扫描目录
sudo ncdu /

二、常见高磁盘占用原因及处理

1. 日志文件过大

# 查看日志目录大小
sudo du -sh /var/log

# 查看具体大日志文件
sudo find /var/log -type f -name "*.log" -size +100M -exec ls -lh {} \;

# 清理方法:
# a) 清空日志文件(注意:确认日志可清理)
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/kern.log

# b) 使用logrotate管理日志
sudo logrotate -f /etc/logrotate.conf

# c) 删除旧日志
sudo find /var/log -type f -name "*.log.*" -mtime +7 -delete
sudo find /var/log -type f -name "*.gz" -mtime +30 -delete

2. 未清理的软件包缓存

# Debian/Ubuntu系统
sudo apt-get clean           # 清理所有软件包缓存
sudo apt-get autoclean       # 清理旧版本软件包缓存
sudo apt-get autoremove      # 删除不需要的依赖

# CentOS/RHEL系统
sudo yum clean all           # 清理所有yum缓存
sudo dnf clean all           # Fedora/CentOS 8+

# 查看缓存大小
sudo du -sh /var/cache/apt/archives  # Debian/Ubuntu
sudo du -sh /var/cache/yum           # CentOS/RHEL

3. 系统临时文件

# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*

# 注意:有些程序可能正在使用临时文件,建议重启后清理

4. Docker占用(如果使用)

# 查看Docker磁盘使用
docker system df

# 清理无用的Docker资源
docker system prune -a

# 清理特定资源
docker volume prune    # 清理未使用的卷
docker image prune     # 清理未使用的镜像

5. 用户文件和历史记录

# 清理用户缓存
rm -rf ~/.cache/*

# 清理下载目录
rm -rf ~/Downloads/*

# 查看隐藏文件夹大小
du -sh ~/.* | sort -rh | head -10

三、深度分析与定位

1. 查找大文件

# 查找大于100MB的文件
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh

# 查找最近修改的大文件
sudo find / -type f -size +50M -mtime -7 -exec ls -lh {} \; 2>/dev/null

# 查找空文件和空目录
sudo find / -type f -empty
sudo find / -type d -empty

2. 检查系统备份和快照

# 检查是否有系统备份
sudo find / -type f -name "*backup*" -size +100M 2>/dev/null
sudo find / -type f -name "*.tar" -o -name "*.tar.gz" -o -name "*.tgz" -size +100M 2>/dev/null

3. 检查邮件系统(如果启用)

# 查看邮件队列大小
sudo du -sh /var/spool/mail
sudo du -sh /var/mail

四、自动化维护脚本

创建清理脚本 /usr/local/bin/disk-cleanup.sh

#!/bin/bash

echo"=== 磁盘清理开始 ==="
echo"当前磁盘使用情况:"
df -h /

echo -e "\n=== 清理APT缓存 ==="
apt-get clean
apt-get autoclean

echo -e "\n=== 清理日志文件 ==="
find /var/log -type f -name "*.log.*" -mtime +7 -delete
find /var/log -type f -name "*.gz" -mtime +30 -delete

echo -e "\n=== 清理临时文件 ==="
rm -rf /tmp/* 2>/dev/null

echo -e "\n=== 清理后的磁盘情况 ==="
df -h /

echo"=== 磁盘清理完成 ==="

给脚本执行权限:

sudo chmod +x /usr/local/bin/disk-cleanup.sh

五、预防措施

1. 设置日志轮转

编辑 /etc/logrotate.conf

# 设置日志保留周期
weekly
rotate 4
create
compress

2. 监控磁盘使用

添加定时任务(crontab):

# 每天检查磁盘使用率
0 2 * * * /usr/local/bin/disk-cleanup.sh >> /var/log/disk-cleanup.log

# 每周发送磁盘使用报告
0 9 * * 1 df -h | mail -s "Weekly Disk Usage Report" admin@example.com

3. 使用监控工具

# 安装监控工具
sudo apt-get install htop iotop iftop  # Debian/Ubuntu
sudo yum install htop iotop iftop      # CentOS/RHEL

# 实时监控
sudo iotop      # 查看磁盘IO
sudo htop       # 查看进程资源使用

六、安全注意事项

  1. 谨慎删除:删除前确认文件是否重要
  2. 备份重要数据:操作前备份关键配置文件
  3. 使用truncate而非rm:对于日志文件,使用truncate更安全
  4. 检查隐藏进程:有些恶意软件会占用磁盘
# 检查异常进程
ps auxf | grep -E '(miner|crypto|malware)'

七、定期维护建议

  1. 每日检查

    • 使用 df -h 查看磁盘使用
    • 检查 /var/log 目录大小
  2. 每周维护

    • 清理软件包缓存
    • 检查大文件
    • 更新系统
  3. 每月深度清理

    • 审核用户文件
    • 清理旧备份
    • 检查日志轮转配置

建议建立定期维护计划,预防磁盘空间问题再次发生。

最新文章

随机文章