Inode占用100%引起的服务无法启动


使用df -i查看inode占用率

[root@PonyCool-rancher ~]# df -i
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
devtmpfs         232525     320   232205       1% /dev
tmpfs            235252       7   235245       1% /dev/shm
tmpfs            235252     459   234793       1% /run
tmpfs            235252      16   235236       1% /sys/fs/cgroup
/dev/vda1       3932160 3932160        0     100% /

使用for i in /*; do echo $i;find $i | wc -l; done逐级查找包含大量文件的文件夹(找到之后 先确定这个文件夹是否可以删除!!!!!!! 如果可以的话删掉他 就可以了)
删除命令:find 文件夹路径 -type f |xargs rm -rf

我这里找到是Docker的volumes占用了大量的Inode,使用docker system df命令查看磁盘使用情况,类似于Linux上的df命令

如果是容器占用了空间,可以使用docker system prune命令进行清理
docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了…所以使用之前一定要想清楚吶。

我这里并不是在用的volumes占用了,经过检查是旧的容器产生的volumes文件占用了Inode
docker可能经常需要重新新建一个容器并删除旧的容器,久而久之,volumes目录便产生了非常庞大的僵尸文件(或者叫未绑定容器的目录)

如何查看有哪些僵尸目录呢?在Docker 1.9以上的版本中,官方提供了这个命令:

docker volume ls -qf dangling=true

知道怎么查看,删除就简单了:

docker volume rm $(docker volume ls -qf dangling=true)

手动清理Docker镜像/容器/数据卷

对于旧版的Docker(版本1.13之前),是没有docker system命令的,因此需要进行手动清理。这里给出几个常用的命令

删除所有关闭的容器

docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm

删除所有dangling镜像(即无tag的镜像):

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

删除所有dangling数据卷(即无用的volume):

docker volume rm $(docker volume ls -qf dangling=true)

声明:初心|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Inode占用100%引起的服务无法启动


愿你勿忘初心,并从一而终