linux centos 磁盘异常占用满了排查和解决
linux centos 磁盘异常占用满了排查和解决
4. 使用交互式工具ncdu (推荐)
安装后扫描更直观(支持排除/home):
bash
sudo apt install ncdu # Debian/Ubuntusudo yum install ncdu # CentOS/RHEL
扫描命令:
bash
sudo ncdu --exclude /home /
-
操作方式:
- 方向键导航,
Enter进入子目录。 -
d删除文件(谨慎使用),g显示大小百分比。
- 方向键导航,
系统层
- 首先查看磁盘使用情况:
# 查看磁盘分区使用情况
df -h
# 查看具体目录大小
du -sh /*
- 查找大文件:
# 查找大于100M的文件
find / -type f -size +100M -exec ls -lh {} \;
# 按大小排序显示前10个最大的文件
find / -type f -exec du -Sh {} + | sort -rh | head -n 10
- 检查日志文件:
# 查看/var/log目录大小
du -sh /var/log/*
# 清理旧日志
sudo find /var/log -type f -name "*.log.*" -delete
sudo find /var/log -type f -name "*.gz" -delete
# 清空大日志文件(不删除文件本身)
sudo truncate -s 0 /var/log/large_log_file.log
- 清理软件包缓存:
# 清理yum缓存
sudo yum clean all
# 删除旧的软件包
sudo package-cleanup --oldkernels --count=2
- 检查并清理临时文件:
# 查看/tmp目录大小
du -sh /tmp
# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
- 检查Docker(如果安装了):
# 查看Docker使用空间
docker system df
# 清理未使用的Docker资源
docker system prune -a
# 清理Docker日志
sudo sh -c 'truncate -s 0 /var/lib/docker/containers/*/*-json.log'
- 检查用户目录:
# 查看home目录下各用户空间占用
du -sh /home/*
# 查找用户目录下的大文件
find /home -type f -size +100M -exec ls -lh {} \;
- 清理系统旧文件:
# 清理旧的core文件
find / -name core -type f -delete
# 清理0字节文件
find / -size 0 -type f -delete
- 检查并清理邮件队列(如果有邮件服务):
# 查看邮件队列目录大小
du -sh /var/spool/mail/
du -sh /var/spool/postfix/
- 检查数据库文件(如果有):
# MySQL数据目录
du -sh /var/lib/mysql/*
# PostgreSQL数据目录
du -sh /var/lib/pgsql/*
清理后:
# 再次检查磁盘使用情况
df -h
# 如果还需要进一步分析
ncdu -x /
docker层
- 首先查看 Docker 系统占用情况:
# 查看 Docker 磁盘使用详情
docker system df -v
# 查看具体目录占用
du -sh /var/lib/docker/*
- 清理未使用的 Docker 资源:
# 清理所有未使用的容器、网络、镜像(包括未被任何容器使用的镜像)和构建缓存
docker system prune -a --volumes
# 仅清理悬空镜像(dangling images)
docker image prune
# 清理未使用的数据卷
docker volume prune
# 清理未使用的网络
docker network prune
- 清理 Docker 日志文件:
# 查找大的日志文件
find /var/lib/docker/containers/ -type f -name "*.log" -exec ls -lh {} \;
# 清空所有容器的日志文件
sudo sh -c 'truncate -s 0 /var/lib/docker/containers/*/*-json.log'
# 或者使用循环清理
for i in $(docker ps -q); do echo "Cleaning logs for $i..."; truncate -s 0 $(docker inspect --format='{{.LogPath}}' $i); done
- 限制容器日志大小:
# 修改 Docker 守护进程配置
sudo vim /etc/docker/daemon.json
# 添加以下内容
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
# 重启 Docker 服务
sudo systemctl restart docker
- 删除指定时间之前的资源:
# 删除24小时前已停止的容器
docker container prune --filter "until=24h"
# 删除24小时前的镜像
docker image prune -a --filter "until=24h"
- 手动删除特定资源:
# 停止所有运行的容器
docker stop $(docker ps -aq)
# 删除所有已停止的容器
docker rm $(docker ps -aq -f status=exited)
# 删除所有未使用的镜像
docker rmi $(docker images -q -f dangling=true)
- 清理构建缓存:
# 清理构建缓存
docker builder prune -a
# 或者指定时间
docker builder prune --filter until=24h
- 查看并删除大文件:
# 查找 Docker 目录下的大文件
find /var/lib/docker -type f -size +100M -exec ls -lh {} \;
# 检查overlay2目录(通常占用最大)
du -sh /var/lib/docker/overlay2/*
- 迁移 Docker 根目录(如果根分区空间不足):
# 停止 Docker 服务
sudo systemctl stop docker
# 创建新目录
sudo mkdir /data/docker
# 编辑 Docker 配置
sudo vim /etc/docker/daemon.json
{
"data-root": "/data/docker"
}
# 复制现有 Docker 目录
sudo rsync -avz /var/lib/docker/ /data/docker
# 重启 Docker 服务
sudo systemctl restart docker
- 设置自动清理:
# 创建定时清理脚本
cat > /etc/cron.daily/docker-cleanup << 'EOF'
#!/bin/bash
docker system prune -af --volumes
find /var/lib/docker/containers/ -type f -name "*.log" -exec truncate -s 0 {} \;
EOF
# 添加执行权限
chmod +x /etc/cron.daily/docker-cleanup
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果