在 Linux 的 df 命令中显示的 GiB(全称:Gibibyte)是一个二进制单位,定义为:
1 GiB = 2³⁰ 字节 = 1,073,741,824 字节
✅ 这是国际电工委员会(IEC)于 1998 年正式制定的标准前缀,用于明确区分二进制倍数(以 2 为底)与十进制倍数(以 10 为底)。
🔍 对比理解(关键区别):
| 单位 | 含义 | 字节数 | 来源 | 常见场景 |
|---|---|---|---|---|
| GiB(Gibibyte) | 2³⁰ = 1,073,741,824 B | ✅ 二进制 | IEC 60027-2 标准 | df -h(默认使用 KiB/MiB/GiB 等二进制单位)、内核、内存/存储底层计算 |
| GB(Gigabyte) | 10⁹ = 1,000,000,000 B | ⚠️ 十进制 | SI(国际单位制)标准 | 硬盘厂商标称容量、U盘包装、网络带宽(如 1 Gbps) |
📌 举例说明差异:
- 一个标称 500 GB 的硬盘(按厂商十进制)≈ 500 × 10⁹ B
→ 换算成 GiB:500,000,000,000 ÷ 1,073,741,824 ≈ 465.66 GiB
→ 这就是为什么你在df -h中看到的可用空间常比包装标称小(“缩水”感来源)。
💡 df 命令中的单位行为:
df -h(human-readable):默认使用 IEC 二进制单位(KiB, MiB, GiB, TiB…),即以 1024 为进制。df -H(大写 H):使用 SI 十进制单位(KB, MB, GB, TB…),即以 1000 为进制。
➜ 此时显示的是 KB/MB/GB(非 KiB/MiB/GiB),数值略大(更接近厂商标称值)。
✅ 验证示例:
$ df -h / # 显示类似:/dev/sda1 916G 320G 549G 37% /
# 这里的 "916G" 实际是 916 GiB(≈ 916 × 1.074 ≈ 983 GB 十进制)
$ df -H / # 显示类似:/dev/sda1 983G 343G 591G 37% /
# 这里的 "983G" 是 983 GB(十进制),更贴近物理字节数的直观数值
💡 提示:
df -h中的G实际代表GiB(尽管显示为G,这是历史习惯;新版本df在严格模式下会显示Gi,但-h默认仍简写为G)。可通过df --si(等价于-H)强制用十进制,或df --block-size=1G查看原始字节数再换算。
✅ 总结一句话:
df命令(尤其是df -h)中的 GiB 是基于 2³⁰ 的二进制单位,反映操作系统对存储空间的真实二进制划分方式,是 Linux/Unix 系统的标准计量习惯,与硬盘厂商使用的十进制 GB 不同——理解这一区别,就能明白为何“磁盘容量变少了”。
如需进一步验证,可运行:
getconf PAGESIZE # 查看内存页大小(二进制基础)
echo $(( 1024**3 )) # 输出 1073741824(即 1 GiB)
echo $(( 1000**3 )) # 输出 1000000000(即 1 GB)
需要我帮你写个脚本自动对比 df -h 和 df -H 的差异,或解释 df 其他字段(如 Avail vs Used)吗? 😊
PHPWP博客