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无法检测到。
解决步骤
- 查找持有已删除文件句柄的进程:
lsof /mnt/ram | grep deleted
该命令会列出所有仍在占用/mnt/ram下已删除文件的进程及相关信息。
- 释放空间:
- 关闭对应的进程,或者让进程主动关闭目标文件的句柄。
- 操作完成后,再次查看
psutil/shutil的统计结果,会发现used值下降,与du的统计一致。
内容的提问来源于stack exchange,提问作者Stephen Boston
相关产品推荐
相关产品推荐

