linux怪事: 无法创建目录 "x":设备上没有空间
「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」
设备上没有空间?
今天登录自己的服务器,发现创建不了文件夹了,按着tab也没有目录补全提示。竟然报错了,
mkdir: 无法创建目录 “musicSigin”: 设备上没有空间
复制代码
排查问题
- 于是我查看了下硬盘使用情况,怪了,硬盘还是有容量的啊。
df -h
- df -ia查看下inode的使用情况,发现已经爆
df -ia
inode究竟是什么
inode究竟是什么?为什么它使用完,就不能创建文件和文件夹了?
- 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。
- 每个扇区储存512字节(相当于0.5KB)。
- 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。
- 这种由多个扇区组成的"块",是文件存取的最小单位。
- "块"的大小,最常见的是4KB,即连续八个 sector组成一个block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息
的区域就叫做inode
,中文译名为索引节点
。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息
解决
- 在根目录下看看哪个文件夹占得用量多,用
du -sh *
命令列出目录大小。一步步进去查询,确定来着docker的一个容器日志文件,该一个文件有10g大小。
- 置空该日志,但该命令治标不治本
cat /dev/null > xxx-json.log
- 发现可以创建文件夹了。清除日志后inode使用情况也降低了,就是这个日志文件作怪。
- 配置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