Linux系统中df命令显示的GiB是什么单位?如何理解?

在 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 -hdf -H 的差异,或解释 df 其他字段(如 Avail vs Used)吗? 😊