Linux系统报Directory index full的问题分析

56 篇文章 0 订阅
47 篇文章 0 订阅

某服务器系统日志报“Directory index full”,本文件记录了该问题的分析处理过程。

一、问题现象

1、现象

某台服务器无法访问,网络正常,业务中断,远程无法访问。

2、排查

连接到服务器控制台,发现系统根目录空间已满,深度排查,发现是/var/log/messages文件过大,把系统根目录占满,无法正常IO,系统内存快速耗尽,导致故障。

3、初步处理

强制重启服务器,重启后系统可以操作,对根目录空间进行部分清理,,排查系统var/log/messages日志文件

发现日志文件很大,核查文件内容,发现系统日志基本上全是以下告警信息:

二、问题分析

问题日志为目录索引满,于是从空间、inode、索引方面进行分析检查

1、初步检查

本服务器非常老旧了,操作系统还是centos6

[root@CentOS-6 ~]# cat /etc/redhat-release 
CentOS release 6.5 (Final)
[root@CentOS-6 ~]# uname -a
Linux CentOS-6.5 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

根目录清理后各文件系统空间占用、inode占用

[root@CentOS-6 ~]# df -hT
Filesystem           Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos6-lv_root
                     ext4    21G   18G  2.7G  87% /
tmpfs                tmpfs   24G  388K   24G   1% /dev/shm
/dev/sda1            ext4   485M   40M  421M   9% /boot
/dev/mapper/appvg-lvapp
                     ext4   1.9T  391G  1.4T  22% /mysql
[root@CentOS-6 ~]# df -i
Filesystem              Inodes    IUsed    IFree IUse% Mounted on
/dev/mapper/vg_centos6-lv_root
                       1384448   159702  1224746   12% /
tmpfs                  6178438       46  6178392    1% /dev/shm
/dev/sda1               128016       39   127977    1% /boot
/dev/mapper/appvg-lvapp
                     127508480 35772692 91735788   29% /mysql

可见现在文件系统空间占用和inode已无问题

2、使用AI对日志进行问题分析

EXT4是Linux系统常用的一个文件系统类型。这个警告的意思是,在设备dm-2上的一个目录的索引(directory index)已经满了。

在EXT4文件系统中,目录实际上是一种特殊类型的文件,用于存储子目录和文件的名称以及对应的inode号(inode是文件系统中存储文件元数据的区域)。为了加速目录的查找操作,EXT4使用了哈希索引(directory hash index)来组织目录项。当这个索引满了,文件系统就不能再向这个目录中添加新的条目了,于是就会发出这样的警告。

这个问题通常发生在以下几种情况:

  1. 目录内文件过多:当目录内包含的文件或子目录数量非常多时,索引可能会被填满。

  2. 文件系统碎片化:文件系统的碎片化也可能导致索引效率降低,最终可能耗尽可用的索引空间。

  3. 文件系统设计限制:EXT4文件系统在创建目录时,会为索引分配一定的空间。如果当初分配的空间不足以容纳后续的目录条目,就可能出现这个问题。

解决这个问题通常有以下几种方法:

  • 重新组织目录结构:如果可能的话,将目录中的一部分文件或子目录移动到其他位置,以减少单个目录中的条目数量。

  • 重新格式化文件系统:如果问题严重且无法通过重新组织目录结构解决,可能需要备份数据,重新格式化文件系统并恢复数据。

  • 调整文件系统参数:在重新格式化文件系统时,可以调整相关参数,如inode大小、inode数量等,以适应未来的需求。

  • 使用其他文件系统:如果EXT4文件系统不能满足需求,可以考虑使用其他类型的文件系统,如XFS或Btrfs,它们可能更适合处理大量文件和目录。

3、继续分析

定位问题目录:

[root@CentOS-6 ~]# lsblk
NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0                            11:0    1 1024M  0 rom  
sdb                             8:16   0    2T  0 disk 
└─appvg-lvapp (dm-2)          253:2    0  1.9T  0 lvm  /mysql
sda                             8:0    0   24G  0 disk 
├─sda1                          8:1    0  500M  0 part /boot
└─sda2                          8:2    0 23.5G  0 part 
  ├─vg_centos6-lv_root (dm-0) 253:0    0 21.1G  0 lvm  /
  └─vg_centos6-lv_swap (dm-1) 253:1    0  2.4G  0 lvm  [SWAP]

可见问题设备dm-2实际上是应用侧的mysql数据文件目录/mysql,对应前面的逻辑设备为/dev/mapper/appvg-lvapp,/mysql实为挂载点。而目前该目录空间和inode均有较大空余。

4、再次重启服务器

在/mysql下进行创建文件并编写文件测试,发现文件创建及写入均正常。于是手动再次重启服务器,重启后检查服务器

[root@CentOS-6 ~]# tail -f /var/log/messages
Apr 28 11:05:02 CentOS-6 ntpd[2105]: 0.0.0.0 c012 02 freq_set kernel 61.610 PPM
Apr 28 11:05:02 CentOS-6 xinetd[2097]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networking options compiled in.
Apr 28 11:05:02 CentOS-6 xinetd[2097]: Started working: 0 available services
Apr 28 11:05:12 CentOS-6 abrtd: Init complete, entering main loop
Apr 28 11:05:13 CentOS-6 sshd[2153]: Accepted password for AAAA from 10.227.16.188 port 59856 ssh2
Apr 28 11:05:19 CentOS-6 sshd[2522]: error: Bind to port 4422 on 0.0.0.0 failed: Address already in use.
Apr 28 11:05:19 CentOS-6 sshd[2522]: error: Bind to port 4422 on :: failed: Address already in use.
Apr 28 11:05:19 CentOS-6 sshd[2522]: fatal: Cannot bind any address.
Apr 28 11:05:22 CentOS-6 polkitd[2858]: started daemon version 0.96 using authority implementation `local' version `0.96'
Apr 28 11:05:23 CentOS-6 rtkit-daemon[2869]: Sucessfully made thread 2867 of process 2867 (/usr/bin/pulseaudio) owned by '42' high priority at nice level -11.
Apr 28 11:06:37 CentOS-6 kernel: NET: Unregistered protocol family 36
Apr 28 11:06:38 CentOS-6 kernel: Removing vmci device
Apr 28 11:06:38 CentOS-6 kernel: Resetting vmci device
Apr 28 11:06:38 CentOS-6 kernel: Unregistered vmci device.
Apr 28 11:06:38 CentOS-6 kernel: vmci 0000:00:07.7: PCI INT A disabled
Apr 28 11:07:43 CentOS-6 kernel: Probing for vmci/PCI.
Apr 28 11:07:43 CentOS-6 kernel: vmci 0000:00:07.7: PCI INT A -> GSI 16 (level, low) -> IRQ 16
Apr 28 11:07:43 CentOS-6 kernel: Found vmci/PCI at 0x1080, irq 16.
Apr 28 11:07:43 CentOS-6 kernel: VMCI: using capabilities 0xc.
Apr 28 11:07:43 CentOS-6 kernel: Registered vmci device.
Apr 28 11:07:44 CentOS-6 kernel: NET: Registered protocol family 36
Apr 28 11:08:17 CentOS-6 ntpd[2105]: 0.0.0.0 c615 05 clock_sync
...

系统日志文件恢复正常,系统已恢复。

三、问题总结

服务器系统日志报“Directory index full”,系因该日志文件对应目录文件数太多,目录索引满所致。对该目录进行小文件删除及空间回收后,需要再次重启服务器,操作系统才能完成目录索引结构重构,该错误才能消除,当然,还需及时对小文件生成的原因进行排查,避免异常生成大量小文件,快速占满目录索引。

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代先生.重庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值