You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tmpfs磁盘占用不一致:Python与Bash统计结果差异问题

tmpfs删除文件后磁盘占用统计不一致问题

问题现象

通过fstab挂载tmpfs作为ramdrive,配置如下:

tmpfs       /mnt/ram tmpfs   defaults,size=2048M   0 0

该分区曾占用至86%,删除部分大文件后,Linux命令du与Python工具(psutil、shutil)的磁盘占用统计结果不一致:

>>> from os import system
>>> import psutil
>>> import shutil
>>> cmd = 'du -s /mnt/ram/'
>>> system(cmd)
632 /mnt/ram/
0
>>> psutil.disk_usage('/mnt/ram/')
sdiskusage(total=2147483648, used=1862307840, free=285175808, percent=86.7)
>>> shutil.disk_usage('/mnt/ram/')
usage(total=2147483648, used=1862500352, free=284983296)

du显示仅占用632KB,但Python工具仍显示占用86%左右。

原因解析

  • du工具统计的是文件系统中当前可见的文件大小总和,文件被删除后就不再纳入统计范围。
  • psutil.disk_usage和shutil.disk_usage是直接读取内核维护的文件系统统计数据:在tmpfs中,如果被删除的文件仍有进程持有打开句柄,内核不会释放这部分文件占用的空间,直到进程关闭该句柄。这部分"已删除但未释放"的空间会被计入used统计,但du无法检测到。

解决步骤

  1. 查找持有已删除文件句柄的进程:
lsof /mnt/ram | grep deleted

该命令会列出所有仍在占用/mnt/ram下已删除文件的进程及相关信息。

  1. 释放空间:
    • 关闭对应的进程,或者让进程主动关闭目标文件的句柄。
    • 操作完成后,再次查看psutil/shutil的统计结果,会发现used值下降,与du的统计一致。

内容的提问来源于stack exchange,提问作者Stephen Boston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 23:41:00