Skip to content

登录个人服务器,提示我磁盘已经占用70%多了, 我想有必要分析下哪些文件占用比较多,没用的要清理掉

几个有用的文件大小查看命令

bash
# 只查看一级目录统计的空间占用
alias dud="du -d 1 -h"

# 查看一级和二级目录的占用
alias du1="du -h --max-depth=1 *"
alias duf="du -sh"

cd /
du -sh * 

31G  	var
14G   opt

# 有时候 ISPconfig 开启自动备份,会导致磁盘空间占用过大,请登录 IPSconfig 后台检查

root@jira:/var/backup# du -sh *
1.7G	web10
5.4G	web3
1.7G	web5
784M	web7

首先来到 Jenkins 目录,发现占用最多的是 workspace 目录,达到了6.9G

cd /var/lib/jenkins

workspace 是 Jenkins 的工作目录,当流水线执行 git pull,项目源码就存放在里面,流水线执行完成后没有及时清理

清理Jenkins的workspace

流水线添加清理工作区步骤

stage('清理工作目录') {
  steps {
    cleanWs()
  }
}

或者添加流水线完成钩子

stages {
  // ...
}
post {
    always {
      cleanWs()  
    }
}

清理Docker镜像及日志

默认情况下,docker的日志是在/var/lib/docker/containers/<container_id>/<container_id>-json.log中。

使用 sudo docker info 发现日志驱动是Logging Driver: json-file,也应证了此点。

有些json.log文件很大,记得清除掉。

执行docker images列出本机存在的镜像,最后一列SIZE是镜像大小

强制删除多个镜像 sudo docker rmi --force f439bc73d690 fa440e89e4c2

删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache docker system prune

删除 24 小时前下载的镜像 docker image prune -a --filter "until=24h"

安全起见,这个命令默认不会删除那些未被任何容器引用的数据卷,如果需要同时删除这些数据卷,你需要显式的指定 --volumns 参数。比如你可能想要执行下面的命令: docker system prune --all --force --volumns

使用 ncdu 查看磁盘占用情况

该命令默认会统计当前目录的文件占用情况,并直观的显示出来 我现在要查看整个磁盘个目录的占用情况

cd /
ncdu

删除 journal 日志

# 查看磁盘占用
journalctl --disk-usage

# 清理日志
journalctl --vacuum-size=10M

# 只保留一周的日志
journalctl --vacuum-time=1w

删除系统日志文件

cd /var/log
# 删除 /var/log 下的日志压缩包
rm -rf /var/log/*.gz
# 删除 /var/log 轮转日志
rm -rf /var/log/*.1

最后差不多清理大概10G文件