Linux运维之服务器磁盘空间不足处理,线上服务器磁盘清理

120 阅读2分钟

运维背景

收到告警信息,线上Linux服务器磁盘空间不足,如何处理?

如图所示(执行df -h命令查看服务器磁盘情况)

image.png

清理docker日志

docker system prune命令

命用于清理未被使用的镜像、停止的容器、失效的网络和构建缓存。它会自动删除这些不再使用的资源,以释放磁盘空间

image.png

docker volume prune命令

清理不需要的Docker数据卷。Docker数据卷是用来持久化容器数据的,当容器删除后,数据卷通常不会自动删除,而是继续占用磁盘空间

image.png

docker system prune与 docker volume prune的区别

这里简单理解一下,题主这边的线上环境服务器配置,每一次线上发布更新服务,一般操作是

1 docker stop 停止原容器;

2 docker rm -f删除原容器;

3 docker rmi 删除原镜像;

4 docker build -t 重新构建镜像;

5 docker run 启动步骤4重新构建的镜像;

但是这个过程 步骤1,2,3 原容器虽然被删除了,但是原容器留下的数据卷并没有进行删除,也就是docker volume prune清理的是步骤1,2,3原容器留下的东西

清理业务docker container 日志

进入到docker 容器目录 cd cd /var/lib/docker/containers/ 并查看du -h每个容器的大小

image.png

看下哪个容器目录较大,就cd进入容器删除对应日志,看业务情况而定,后缀*.log.1,.log.2,.log.3等为旧日志

image.png

清理nginx日志

一般的,很少有人会考虑到nginx也会产生日志,但是题主就碰到了,而且占磁盘内存还挺大,如下图

image.png

echo ''> *.nginx.log

这行命令的作用是将‘’这个空字符串,覆盖更新到日志中,覆盖更新到日志中,覆盖更新到日志中;说三遍 怎么来理解,就是比如aa.nginx.log本来有20g,执行命令后,aa.nginx.log的内容会被‘’这个空字符串覆盖更新

image.png

为什么不直接删除日志?

因为nginx还在运行,担心nginx日志直接删除会影响nginx运行;如果停止nginx再删除日志再启用nginx则会影响业务运行;

echo与 echo > 与echo >> 三命令区别

echo是直接在控制台打印输出,如

image.png echo hello > tmp.txt 将hello输出至tmp.txt,如果没有tmp.txt 则会新建一个tmp.txt;会将原来的tmp.txt 文件用hello进行替换

echo hello bbbb >>  tmp.txt 多了个> ,在原tmp.txt文件内容的基础上,继续追加了内容hello bbbb

image.png

其他

其他处理方式持续补充中........