linux怪事: 无法创建目录 "x":设备上没有空间

linux怪事: 无法创建目录 "x":设备上没有空间

「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

设备上没有空间?

今天登录自己的服务器,发现创建不了文件夹了,按着tab也没有目录补全提示。竟然报错了,

mkdir: 无法创建目录 “musicSigin”: 设备上没有空间
复制代码

image.png

排查问题

  1. 于是我查看了下硬盘使用情况,怪了,硬盘还是有容量的啊。

df -h

image.png

  1. df -ia查看下inode的使用情况,发现已经爆

df -ia

image.png

inode究竟是什么

inode究竟是什么?为什么它使用完,就不能创建文件和文件夹了?

  • 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。
  • 每个扇区储存512字节(相当于0.5KB)。
  • 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。
  • 这种由多个扇区组成的"块",是文件存取的最小单位。
  • "块"的大小,最常见的是4KB,即连续八个 sector组成一个block。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为索引节点

每一个文件都有对应的inode,里面包含了与该文件有关的一些信息

解决

  1. 在根目录下看看哪个文件夹占得用量多,用du -sh *命令列出目录大小。一步步进去查询,确定来着docker的一个容器日志文件,该一个文件有10g大小。

image.png

  1. 置空该日志,但该命令治标不治本

cat /dev/null > xxx-json.log

  1. 发现可以创建文件夹了。清除日志后inode使用情况也降低了,就是这个日志文件作怪。

image.png

  1. 配置docker全局容器日志大小。新建/etc/docker/daemon.json,若有就不用新建了。

vi /etc/docker/daemon.json

{
  "registry-mirrors": ["https://镜像加速地址.mirror.aliyuncs.com"],
  "log-driver":"json-file",
  "log-opts": {"max-size":"50m", "max-file":"3"}
}

复制代码
  • max-size=500m,意味着一个容器日志大小上限是500M
  • max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。
  • 注意:设置的日志大小,只对新建的容器有效。
  • Docker容器日志查看与清理(亲测有效)

重新启动docker

systemctl restart docker

Guess you like

Origin juejin.im/post/7032873406110367774