因为当时没截图,我直接在结果图上画了个100%。
今天真是惊到我了,阿里云上的某个服务器磁盘使用达到了100%。
我说jenkins打包怎么失败了呢!jenkins将打包好的镜像上传至harbor,但harbor所在服务器满了,也就存不上,打包也就失败了。
我在网上找了一些方法,比如使用df -h查看文件系统磁盘使用情况。
发现overlay的占用是最多的,使用了95G之多,而不是上图显示的13G。
同样是网上找方法,但没解决我的问题。
网上的方法说,是因为docker的容器产生的日志占用了空间,并给出如下脚本,用于删除这些日志:
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
echo "======== end clean docker containers logs ========"
脚本确实好用,也删除了一个日志文件。没错就是一个,也没占多大地方。
可是于事无补!我只能寻求其它方法。
我最需要了解的每个目录的大小,以此找到占用空间大的,删除之。
网上说使用【ll -h】这个命令。但这个命令只能显示文件的大小,而不是磁盘空间的大小。
开始我把这两个概念搞混了(还是linux不熟)。在linux中,文件大小不是占用磁盘空间大小。
文件大小要么小于等于4kb,要么是4kb的整数倍。如下图所示:
所以大招来啦!有一个命令可以显示当前文件夹下所有文件和文件夹的实际磁盘空间大小:
du -sh *
其中du是一个命令,代表disk usage。
-s表示summarize,它会让du
只显示每个参数所占用的总大小,而不是每个子目录的大小。
-h表示human-readable,它会让du
以更易于阅读的方式显示大小,比如KB、MB、GB等。
*
:这是一个通配符,代表当前目录下的所有文件和目录。
如上图所示,使用该命令可以将文件夹中所有文件和文件夹列出来并显示磁盘空间占用情况。
经过层层筛选,发现overlay2中磁盘空间占用最大。
但如此多的内容让我眼花缭乱,于是按照磁盘空间大小进行排序。
du -sh * | sort -h | awk '{ print $1 " " $2 }'
这里解释一下命令的各个部分:
du -sh *
:列出当前目录下所有文件和目录的大小,并以人类可读的格式显示。sort -h
:对输出结果进行排序,-h
选项表示按人类可读的数字大小排序。awk '{ print $1 " " $2 }'
:使用awk
来格式化输出,只显示文件大小和文件名。这是因为sort
可能会改变原始输出的字段顺序。
如果您想要从大到小排序,可以在sort
命令中添加-r
选项:
du -sh * | sort -hr | awk '{ print $1 " " $2 }'
因为linux输入命令后,输出信息是网上滚的,因此我按照默认方式排序,也就是从小到大:
这里最大的是520M,是我精简过了的。之前最大的是1G多。
那么问题来了,这里我应该直接删掉嘛?
首先我们要知道这个文件夹是做什么用的,这里都是docker编译时的一些缓存。
那么docker有删除缓存的命令吗?
还真有!
docker builder prune
使用这个命令之后,世界清净了。磁盘空间从100%直接下降到了15%。
希望我的经验可以帮助在看的大家。
1 thought on “【docker&linux实战】阿里云服务器磁盘空间满了”