Linux inode用尽怎么办_inode问题排查

5次阅读

linux inode耗尽时系统报“no space left on device”但df -h显示磁盘有余量,需用df -i查iuse%定位高占用分区,再用du –inodes和find分析目录,最后安全清理小文件并长期预防。

Linux inode用尽怎么办_inode问题排查

Linux inode用尽时,系统会报“No space left on device”,但df -h显示磁盘空间仍有余量——这说明不是磁盘满,而是索引节点(inode)耗光了。每个文件、目录、软链接都占用一个inode,小文件多是主因。

快速确认是否inode耗尽

运行以下命令查看各挂载点的inode使用率:

df -i

重点关注IUse%列。若某分区(如//var)达到95%以上甚至100%,就基本可判定是inode瓶颈。

对比执行df -h,如果两者使用率差异明显(比如磁盘只用了40%,inode却用了99%),问题定位更明确。

定位高inode占用目录

找到“产文件大户”是清理的关键。常用方法有:

  • 按目录统计子项数量(适合根下一级排查):
    for i in /*; do echo “$i”; find “$i” | wc -l; done
  • 按inode数量排序查看指定路径(推荐):
    du –inodes -s /var/* 2>/dev/NULL | sort -n
  • 深入可疑目录后,查文件数量最多的子目录:
    find /var/spool -maxdepth 2 -type d | while read d; do echo “$(find “$d” | wc -l) $d”; done | sort -nr | head -10

常见高inode目录包括:/tmpsession、临时文件)、/var/spool/postfix/maildrop(邮件队列积)、/var/spool/clientmqueue(sendmail残留)、/var/log/journal(未轮转的日志)等。

安全高效清理大量小文件

直接rm *容易因参数过长失败(Argument list too long)。应使用流式处理:

  • 删除某目录下全部文件(保留子目录结构):
    find /path/to/dir -maxdepth 1 -type f -delete
  • 删除空文件(也占inode):
    find /home -type f -size 0 -delete
  • 配合xargs批量删除(兼容性更广):
    find /tmp -name “sess_*” -print0 | xargs -0 rm -f

操作前建议先用find ... | head -20预览匹配结果,避免误删。

长期预防与扩容思路

清理只是治标。若业务持续产生小文件(如日志、缓存、邮件队列),需同步做预防:

  • 配置logrotate定期压缩/删除旧日志
  • 禁用或修正不工作的邮件服务(如postfix/sendmail),防止maildrop堆积
  • /tmp挂载tmpfs并设大小上限,重启自动清空
  • 新建文件系统时预留足够inode:格式化时用mkfs.ext4 -T largefile(少inode)或-T small(多inode);云服务器扩容系统盘后,inode数通常同比增加

注意:直接修改已有文件系统的inode总数需重格式化,数据全失,仅适用于可离线重建的场景。

text=ZqhQzanResources