centos目录大小查看与清理

发布于:2025-09-03 ⋅ 阅读:(22) ⋅ 点赞:(0)

1. 快速定位大文件和目录

首先,使用以下命令找出占用空间最大的目录(从根目录开始,但可能需要一些时间):

sudo du -sh /* 2>/dev/null | sort -hr | head -n 20

这个命令会显示根目录下前20个最大的项目。然后您可以逐级深入排查,例如如果发现 /var 很大,就继续检查 /var:

sudo du -sh /var/* 2>/dev/null | sort -hr | head -n 20

更高效的工具

如果系统有 ncdu 工具(推荐安装),可以更直观地分析:

# 安装 ncdu
sudo yum install ncdu

# 扫描根目录
sudo ncdu / --exclude /proc --exclude /sys

在这里插入图片描述

2. 重点检查目标(基于您的环境)

根据您安装的软件,以下目录最可能是"罪魁祸首":

A. Docker 相关

Docker 是常见的磁盘空间杀手,尤其是镜像和容器存储。

# 查看 Docker 占用空间
sudo du -sh /var/lib/docker/

# 详细查看 Docker 各组成部分大小
sudo docker system df

B. Maven 本地仓库

Maven 的本地仓库会缓存所有下载的依赖包,很容易变得非常大。

# 通常位于用户主目录下,Jenkins 用户可能是 /var/lib/jenkins
sudo du -sh ~/.m2/repository/
# 或者
sudo du -sh /var/lib/jenkins/.m2/repository/

C. Jenkins 工作空间和构建记录

Jenkins 会保留每次构建的工作空间和构建记录。

# 检查 Jenkins 工作空间
sudo du -sh /var/lib/jenkins/workspace/

# 检查 Jenkins 构建记录
sudo du -sh /var/lib/jenkins/jobs/*/builds/

D. Node.js 和 Vue 相关

Vue 项目的 node_modules 目录非常庞大,构建过程中也可能产生大量缓存。

# 查找所有 node_modules 目录
sudo find / -name "node_modules" -type d -exec du -sh {} \; 2>/dev/null | sort -hr | head -n 10

# 检查 npm 缓存
sudo du -sh ~/.npm/

E. 系统日志文件

系统和服务日志可能会占用大量空间。

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

# 检查最大的日志文件
sudo find /var/log -type f -name "*.log" -exec du -h {} \; 2>/dev/null | sort -hr | head -n 10

3. 清理方案

清理 Docker

第 1 步:查询空间情况

# 这个命令非常有用,它会详细列出镜像、容器、卷、缓存等的大小
sudo docker system df

第 2 步:安全清理(推荐)
这些命令会安全地删除未被使用 的资源,不会影响正在运行的容器和其依赖的镜像。

1.删除所有已停止的容器、未被使用的网络和 dangling 镜像(悬空镜像,即未打标签的镜像) :

sudo docker system prune

这是一个最基本的清理命令,非常安全。
2.删除所有未被使用的镜像(而不仅仅是 dangling 镜像) :

sudo docker image prune -a

注意 :这会删除所有没有被任何容器引用的镜像(包括停止的容器)。如果你有多个项目,有些镜像虽然当前没运行,但以后可能会用,需要谨慎。系统会交互式地让你确认。

第 3 步:治本之策(预防措施)

清理之后,需要建立习惯和机制防止空间再次被快速占满。

  • 在 Docker Compose 中运行后自动清理 :

使用

docker-compose down --rmi all

docker-compose down -v

来在停止服务的同时删除相关镜像或卷。

  • 设置 Docker 日志轮转(非常有效) :

Docker 容器日志是另一个“空间杀手”。默认情况下,日志文件会无限增长。通过修改 /etc/docker/daemon.json 文件来限制日志大小和数量:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
  • 修改后需要重启 Docker 服务:
sudo systemctl restart docker

注意 :这只会影响新创建 的容器。对于已存在的容器,你需要重建它们。

  • 定期清理脚本 :

可以创建一个定时任务(Cron Job),例如每周凌晨执行一次安全清理:

# 编辑 cron 任务
sudo crontab -e
# 添加一行
0 3 * * 0 /usr/bin/docker system prune -f
  • 迁移 Docker 数据根目录 :

如果 / 根分区实在太小,可以考虑将 Docker 的默认存储目录 /var/lib/docker
迁移到一个更大的磁盘分区上。这是一个相对复杂的操作,需要停止 Docker 服务后移动整个目录并建立软链接。

3.清理所有内容(包括构建缓存) :

# 这个命令最彻底,会删除所有已停止的容器、所有未被任何容器引用的网络、所有 dangling 和未被引用的镜像、以及构建缓存。
sudo docker system prune -a --volumes

警告 :–volumes 会删除未被使用的命名卷 ,请确保你知道哪些卷是重要的(如数据库数据)。匿名卷通常会被自动清理。

清理 Maven 仓库

# 删除失败的下载和临时文件
find ~/.m2/repository -name "*.lastUpdated" -exec rm -f {} \;

# 清理旧的依赖包(谨慎操作,可能会破坏项目构建)
# 可以手动删除一些明确不再使用的依赖目录

清理 Jenkins

  1. 在 Jenkins 界面中配置"丢弃旧的构建"
  2. 对于不需要的 jobs,可以直接删除其 workspace
# 清理 Jenkins 工作空间(确保相关任务已停止)
sudo rm -rf /var/lib/jenkins/workspace/<job-name>/*

清理 npm 缓存

# 清理 npm 缓存
npm cache clean --force

# 或者直接删除缓存目录
rm -rf ~/.npm/_cacache

清理系统日志

# 清空日志文件(而不是删除,避免影响正在运行的服务)
sudo truncate -s 0 /var/log/some-large-log.log

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

# 删除旧的日志文件
sudo find /var/log -name "*.log.*" -type f -mtime +7 -delete
sudo find /var/log -name "*.gz" -type f -mtime +7 -delete

清理系统包缓存

# 清理 yum 缓存
sudo yum clean all
sudo rm -rf /var/cache/yum

网站公告

今日签到

点亮在社区的每一天
去签到