本文保存完整案例如下(包括关键操作视频,文档):
「INode索引节点占满问题」https://www.aliyundrive.com/s/jp6z5gJo7nf 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
问题描述
linux终端开机时提示“No space left on device”而无法正常启动的情况。
过程分析
ssh至终端linux系统后台,相关业务日志SpaceAgent.log中记录有“Failed to save the torrent”,说明torrent文件无法保存是问题的原因。
尝试在终端本地创建一个文档检查文件系统的读写是否正常,提示终端本地没有空间。但df -h查看物理空间的使用率并没有占满。
df -ih查看的inode空间的使用率发现被占满了。inode也叫索引节点,是用于存储元数据的区域。
最后排查到/var/spool/postfix/maildrop目录下有大量的小文件产生,crond在执行脚本时会将保持信息以邮件的形式发送给crond用户,而环境的postfix没有正常运行,导致邮件发送失败,都会堆积在/var/spool/postfix/maildrop/目录中。而部分终端无法正常开机也是因为inode空间不足所导致的。
将maildrop中的小文件全部删除后,inode空间占用降低,终端重启后便可以正常下载镜像。
但是很快maildrop目录下又产生很多文件,如果不及时清理问题依旧会复现。
解决方法
要规避该问题,一种方法是启动postfix,让邮件服务正常运行。另外还可以在/etc/crontab中修改配置MAILTO=""发送为空,这样就不会再产生许多小文件堆积占用inode空间了。
对于终端因inode空间占满而无法正常开机的情况,终端已无法通过ssh的方式去访问后台。这种情况则需要通过U盘制作SpaceOS/Linux启动盘,挂载故障硬盘后对其进行清理。具体步骤如下:
1,选择trobuleshooting
2,选择rescue a centos system
3,选择选项中的3 skip to shell,进入shell命令
附录:INode介绍
inode 是 linux/unix 文件系统的基础。
硬盘的最小存储单位是扇区(Sector),块(block)由多个扇区组成。
文件数据存储在块中。块的最常见的大小是 4kb,约为 8 个连续的扇区组成(每个扇区存储 512 字节)。一个文件可能会占用多个 block,但是一个块只能存放一个文件。
虽然,我们将文件存储在了块(block)中,但是我们还需要一个空间来存储文件的 元信息 metadata :如某个文件被分成几块、每一块在的地址、文件拥有者,创建时间,权限,大小等。这种 存储文件元信息的区域就叫 inode,译为索引节点:i(index)+node。 每个文件都有一个 inode,存储文件的元信息。
可以使用 stat 命令可以查看文件的 inode 信息。每个 inode 都有一个号码,Linux/Unix 操作系统不使用文件名来区分文件,而是使用 inode 号码区分不同的文件。
简单来说:
inode 就是用来维护某个文件被分成几块、每一块在的地址、文件拥有者,创建时间,权限,大小等信息。