lee 发表于 2020-9-3 19:22:11

深入Linux--Inodes溢出问题[干货-深度解析]

今天线上出现了一个inode耗尽的问题,最后通过清理磁盘上的小文件来解决问题。大概分享下inode的相关知识。


1.inodes是什么?

在Linux操作系统中,文件存储在磁盘上,而磁盘的最小单位是"扇区",每个扇区的大小是512字节,多个扇区组成了"磁盘块"的概念,通常情况下,磁盘的一个块是4kb,也就是8个扇区的大小。

我们知道,"磁盘块"时存储文件数据的,而文件的信息,例如文件创建者、文件创建日期,文件大小等等都存储在文件的索引中,我们把这种文件索引,就叫做inode。

inode除了存储上述内容,还要存储以下内容:
文件的用户id (userid)
文件的用户组id (groupid)
文件的权限(读、写执行权限)
磁盘块的位置以及磁盘块的数量
文件的生成日期
...

我们可以通过stat命令来查看当前文件的inode内容:

# stat bsr_test
File: ‘bsr_test’
Size: 158             Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 1067653   Links: 1
Access: (0755/-rwxr-xr-x)Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-08-19 23:29:19.144121551 +0800
Modify: 2020-07-20 11:17:55.993595671 +0800
Change: 2020-07-20 11:17:55.998595670 +0800
Birth: -

磁盘文件中inode空间的介绍如下:



我们可以使用df -i命令来查看inode的使用情况,也可以使用ls -i +文件名字来查看当前文件的inode值:

# df -i
Filesystem      InodesIUsed   IFree IUse% Mounted on
devtmpfs      232544    321232223    1% /dev
tmpfs         235274      7235267    1% /dev/shm
tmpfs         235274    481234793    1% /run
tmpfs         235274   16235258    1% /sys/fs/cgroup
/dev/vda1      3276800 107681 3169119    4% /
tmpfs         235274      1235273    1% /run/user/0
overlay      3276800 107681 3169119    4% /var/lib/docker/overlay2/c1d0b9753911263c8859bfc0bcc8cbcb4a92868be07a766a76ca654496709cb3/merged
overlay      3276800 107681 3169119    4% /var/lib/docker/overlay2/25e6ce9d769f0ac46fb3a87de148ee59a7926da83dc7c71e2f0006798d94cfcd/merged

从上面的说明中我们不难看出:由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。也就是说你使用df -h命令查看磁盘空间还有剩余,但是touch文件不成功。

inodes的大小在磁盘格式化分区时确定,跟分区的大小相关,分区越大,inodes越大,反之亦然

2.inodes耗尽的原因

通常情况下,磁盘空间使用完之前,不会有inodes空间被占用满的情况,在一些场景下,会出现inode已经空间耗尽的情况,例如:
1、linux的根目录有大批量的小文件产生而没有清理,则会导致inodes被占满
2、linux在执行cron时,会将cron执行脚本中的output和warning信息,都会以邮件的形式发送给cron所有者。由于客户环境中的sendmail和postfix没有正常运行,邮件发送不成功,导致全部小文件都堆积在maildrop目录下,再加上缺乏自动清理的机制,最终导致目录下堆积了大量的文件。常见的问题是/var/spool/postfix/maildrop目录下小文件过多
3、典型错误场景:root用户下有个每分钟进行一次时钟同步的定时任务,该定时任务每分钟产生一个小文件,不旧就会导致inodes被耗尽。


如何清理或者杜绝?
**** Hidden Message *****

末日流溢 发表于 2021-9-22 16:34:27

ooooooooooooooo好好 好

17716054098 发表于 2021-10-13 17:06:31

学习学习
页: [1]
查看完整版本: 深入Linux--Inodes溢出问题[干货-深度解析]