df 命令显示 100% 已满,即使删除文件后它也显示相同的使用情况 (100%)

df 命令显示 100% 已满,即使删除文件后它也显示相同的使用情况 (100%)

使用 df 命令,Nand Flash 存储分区显示为 100% 已满。手动计算使用率时,约为 7-80%(最大)。删除了几个文件(比如大约 50~60MB),df 命令输出仍然没有改变。我无法创建新文件,错误:“存储设备上没有剩余空间”。尝试了sync命令,没有区别。

Filesystem           1K-blocks      Used Available Use% Mounted on
tmpfs                   262144     20780    241364   8% /tmp
tmpfs                      512         0       512   0% /dev
/dev/ubi0_0            1275540   1275540         0  100% /storage

当实际存储空间未满时(根据手动计算),为什么 doe df 命令显示它为 100% 已满?

答案1

我相信重新启动并重新安装可以解决问题。

原因:这背后的原因是df利用统计文件系统(2)系统调用以获取文件系统统计信息。这意味着它检查打开的内核文件描述符以计算其命名的可用空间(df = 磁盘可用空间)。如果你使用的话,你会得到不同的结果dudf显示 100% 使用,因为被删除的文件尚未从内核文件描述符中释放。

也许下面的场景会帮助你理解:

  1. 正在运行的进程名为正在使用驻留在分区的xyz.service名为 的文件。something.dump/storage

  2. 的列于的中file discriptorsomething.dumpprocess file descriptor tablexyz.service

  3. 然后你删除了something.dumpxyz.service仍在运行。

  4. xyz.service知道文件的更新状态something.dump。所以文件描述符something.dump仍然存在。

  5. 然后您运行df命令,内核检查所有进程表以查看使用的文件描述符来计算可用空间。

  6. 内核发现inodessomething.dump文件的 仍然列在xyz.service进程的文件描述符表中。所以它something.dump仍然在文件系统上,因此它不认为 some.dump 的 inode 是空闲的。这就是您看到更多使用的原因。

  7. 因此,当您SIGKILL xyz.service释放这些索引节点时,您可能可以看到可用空间。

  8. 重新启动系统将执行与步骤 7 相同的操作。

答案2

btrfs其他原因:如果您使用类似和 使用快照的文件系统,则您在快照中拥有这些文件的副本。

相关内容