当前位置:首页>Linux>Linux inode 到底是什么?为什么删除文件后磁盘空间不释放?

Linux inode 到底是什么?为什么删除文件后磁盘空间不释放?

  • 2026-08-27 09:54:28
Linux inode 到底是什么?为什么删除文件后磁盘空间不释放?

很多人都遇到过这种情况:

rm -f app.log

文件删了。

但执行:

df -h

磁盘空间还是满的。

文件已经不存在,空间却没回来?

如果你不理解 inode,这个问题永远解释不清。

今天这篇文章我们就来讲讲inode。

一、Linux 中,一个文件到底是什么?

在 Linux 里,一个文件由两部分组成:

1️⃣ inode(索引节点,存储元数据)2️⃣ 数据块(真正存储文件内容的磁盘空间)

inode 中保存:

  • 文件大小
  • 所有者
  • 权限
  • 时间戳
  • 数据块位置
  • 硬链接数量

而文件名,并不存储在 inode 中。

二、inode 是什么?

可以这样理解:

inode 是文件的“元数据结构”

每个文件在文件系统中都有一个唯一的 inode 号。

查看 inode 号:

ls -li

示例:

123456-rw-r--r--1 root root 1024 test.txt

解释:

  • 第一列 123456 是 inode 号
  • 第三列 1 是硬链接数
  • 1024
     是文件大小(字节)
  • test.txt
     是文件名

三、文件名和 inode 的关系

在 Linux 中:

目录本身也是一种文件。

目录里存储的是:

文件名 → inode 号 的映射关系

也就是说:

文件名 → inode → 数据块

文件名只是 inode 的“一个入口”。

inode 才是文件真正的身份。

四、rm 删除文件时发生了什么?

当你执行:

rm test.txt

系统做的事情是:

  • 删除目录中的文件名映射
  • 将该 inode 的“硬链接计数”减 1

注意一个关键点:

一个 inode 可以有多个文件名(硬链接)。

所以:

删除文件名 ≠ 删除 inode

五、磁盘空间什么时候真正释放?

Linux 只有在以下两个条件同时满足时,才会释放文件的数据块空间:

1️⃣ inode 的硬链接数为 0(没有任何文件名指向它)2️⃣ 没有任何进程仍然打开这个文件(文件描述符引用计数为 0)

如果一个文件:

  • 文件名已经删除
  • 但仍有进程打开它

那么:

数据块不会释放inode 也不会释放

这就是“删了文件但空间不释放”的本质原因。

六、真实运维场景

例如:

  • 一个 2GB 的日志文件正在被 Java 程序写入
  • 你执行:
rm app.log

文件在目录中消失。

但 Java 进程仍然持有文件描述符。

此时:

  • inode 仍存在
  • 数据块仍被占用
  • df -h 不会减少

七、如何排查?

查看被删除但仍被占用的文件:

lsof | grep deleted

示例输出:

java1234  user  5w  REG  8,12147483648123456 /var/log/app.log (deleted)

说明:

  • 文件已删除
  • 但进程 1234 仍在使用 inode 123456

八、正确解决方式

方法一:重启服务

systemctl restart 服务名

方法二:结束进程

kill -9 进程号

当进程关闭文件后:

  • 文件描述符引用归零
  • 数据块释放
  • 磁盘空间恢复

九、inode 会不会被用完?

会。

磁盘资源分为两种:

1️⃣ 数据块空间2️⃣ inode 数量

查看 inode 使用情况:

df -i

如果:

IUse%100%

说明 inode 用尽。

此时即使磁盘空间还有剩余,也无法创建新文件。

常见原因:

  • 产生大量小文件
  • 缓存目录堆积
  • 邮件系统 / 日志系统异常

十、删除大量小文件但 inode 不下降?

如果 df -i 仍然很高,常见原因是:

  • 还有其它目录存在大量小文件
  • 目录中有隐藏文件未删除
  • 删除的并非 inode 占满的目录
  • 误判了挂载点

可以使用:

find / -xdev -type f | wc -l

排查文件数量。

十一、一句话总结(严谨版)

一个 Linux 文件包含:

inode(元数据) + 数据块(内容)

文件名只是 inode 的一个“别名”。

rm 只是删除目录中的文件名映射。

只有当:

  • 硬链接数为 0
  • 且没有进程打开该文件

磁盘空间才会真正释放。


文 / 零距技术仓记录每一次真实的折腾 (#^.^#)🚀 想看到更多实用折腾技巧?👉 先关注💬 评论区说说你的经历或想看的内容👍 点赞表示支持🔁 顺手分享给也在折腾的人,让大家都少踩坑 😎

最新文章

随机文章