【问题标题】:Python shutil.disk_usage free and used space values do not reflect actual used and free space valuesPython shutil.disk_usage 可用和已用空间值不反映实际已用和可用空间值
【发布时间】:2026-01-04 12:30:01
【问题描述】:

我使用 Python 的 shutil.disk_usage 函数,使用“/”作为参数来确定我的计算机的总空间、已用空间和可用空间(我有一台使用 macOS Catalina 的 Mac)。我得到的结果与实际结果不符。

shutil.disk_usage("/") 的结果:
总计 = 121.12 GB
已用 = 11.3 GB
免费 = 19.79 GB

检查我的计算机存储的实际结果:
总计 = 121.12 GB
已用 = 97.78 GB {文档 (35.34GB) + 应用程序 (20.19GB) + 系统 (11.3GB) + 其他 (30.95GB)}
免费 = 22.64 GB

两者的总值都是正确的,但已用和可用空间值是关闭的。

系统正在使用 11.3 GB,这是 shutil.disk_usage("/") 计算的确切数量,但是当我查看计算此数量的代码时,报告为:

used = (f_blocks - f_bfree) * f_frsize

我读为“总块减去空闲块(已用块)乘以块大小等于已用空间量”。我不明白为什么这个值报告为 11.3 GB,而不是已用空间总量。

同样我不明白为什么可用空间的价值:

free = f_bavail * f_frsize

我读为“非超级用户可用的块数(我认为这意味着任何没有 sudo 访问权限的人都可以使用空闲块,因此来宾帐户可以使用空闲块)乘以块大小等于可用空间量”。我不明白为什么当我有 22.64 GB 的可用空间时,这个值会报告为 19.79 GB。

我预计总计 = 已使用 + 免费,但显然不是这样。

为什么使用 shutil.disk_usage("/") 计算的已用和可用空间的值与实际值不同。

【问题讨论】:

    标签: python


    【解决方案1】:

    在搜索了一段时间后,我发现了这篇帖子 Get hard disk size in Python,其中有一条评论指出 shutil.disk_usage 只给出了分区的大小,而不是整个磁盘。

    我使用 df -h 列出所有文件系统及其挂载点和磁盘使用统计信息(总大小、已用空间、可用空间)

    将 df -h 的结果与给定挂载点的 shutil.disk_usage 进行比较,将 df -h 中的值乘以 1024^3 字节/gb 得到相同的结果(macOS 使用 1000^3bytes/gb 报告它们的存储值)

    【讨论】:

      最近更新 更多