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

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


1.inodes是什么?

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

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

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

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

  1. [root@BSR ~]# stat bsr_test
  2.   File: ‘bsr_test’
  3.   Size: 158             Blocks: 8          IO Block: 4096   regular file
  4. Device: fd01h/64769d    Inode: 1067653     Links: 1
  5. Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
  6. Access: 2020-08-19 23:29:19.144121551 +0800
  7. Modify: 2020-07-20 11:17:55.993595671 +0800
  8. Change: 2020-07-20 11:17:55.998595670 +0800
  9. Birth: -
复制代码


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

eb870d84262fc640379b538cad548d5a.jpg

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

  1. [root@BSR ~]# df -i
  2. Filesystem      Inodes  IUsed   IFree IUse% Mounted on
  3. devtmpfs        232544    321  232223    1% /dev
  4. tmpfs           235274      7  235267    1% /dev/shm
  5. tmpfs           235274    481  234793    1% /run
  6. tmpfs           235274     16  235258    1% /sys/fs/cgroup
  7. /dev/vda1      3276800 107681 3169119    4% /
  8. tmpfs           235274      1  235273    1% /run/user/0
  9. overlay        3276800 107681 3169119    4% /var/lib/docker/overlay2/c1d0b9753911263c8859bfc0bcc8cbcb4a92868be07a766a76ca654496709cb3/merged
  10. 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被耗尽。


如何清理或者杜绝?
游客,如果您要查看本帖隐藏内容请回复
标签: 暂无标签
lee

写了 77 篇文章,拥有财富 557,被 13 人关注

转播转播 分享分享 分享聚知识
回复

使用道具

P4 | 发表于 2021-9-22 16:34:27
ooooooooooooooo好  好 好
回复

使用道具

P3 | 发表于 2021-10-13 17:06:31
学习学习
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈