df -h 如何计算磁盘大小
df -h(Disk Filesystem)是 Linux/Unix 系统上用于查看磁盘空间使用情况的命令,其中 -h 表示以人类可读的格式(如 KB、MB、GB)显示数据。它的计算逻辑主要基于文件系统的 statfs 或 statvfs 系统调用,获取以下关键信息:
data-ad-format="fluid" data-ad-layout-key="-7k+ex-4a-9w+4a">1. df -h 显示的字段
字段说明Filesystem磁盘设备或挂载点(如 /dev/sda1)Size文件系统总容量(计算方式见下文)Used已用空间Avail剩余可用空间(普通用户可用的空间)Use%使用百分比(Used / Size × 100%)Mounted on挂载目录(如 /、/home)
2. df -h 的计算逻辑
(1)总容量(Size)
df 从文件系统的 超级块(superblock) 中读取以下信息:
f_blocks:文件系统的总块数(block count)。
f_frsize 或 f_bsize:每个块的大小(通常为 4KB)。
计算公式:
1 | \text{Size} = \text{f\_blocks} \times \text{f\_frsize} |
例如:
- 如果 f_blocks = 10,000,000,f_frsize = 4096(4KB),则: \text{Size} = 10,000,000 \times 4096 = 40,960,000,000 \text{ bytes} ≈ 38.15 \text{ GB}
(2)已用空间(Used)
1 | \text{Used} = (\text{f\_blocks} - \text{f\_bfree}) \times \text{f\_frsize} |
- f_bfree:剩余可用的块数(未被任何文件占用)。
(3)可用空间(Avail)
1 | \text{Avail} = \text{f\_bavail} \times \text{f\_frsize} |
- f_bavail:普通用户可用的剩余块数(某些系统会为 root 保留 5% 空间,这部分不算在内)。
(4)使用百分比(Use%)
1 | \text{Use\%} = \frac{\text{Used}}{\text{Size}} \times 100\% |
3. df -h vs df -H
选项计算方式示例(1KB = ?)df -h二进制(1024)1KB = 1024Bdf -H十进制(1000)1KB = 1000B
例如:
40,960,000,000 bytes:
-h 显示为 38.15 GB(40,960,000,000 / 1024³)。
-H 显示为 40.96 GB(40,960,000,000 / 1000³)。
4. 为什么 df 和 du 结果可能不同?
命令计算方式可能差异原因df基于文件系统超级块包含元数据、保留空间、已删除但未释放的文件(如被进程占用)du递归统计文件大小只计算当前可见的文件
常见情况:
文件被删除但仍有进程占用 → df 显示空间未释放,du 不统计。
文件系统保留 5% 空间(ext4 默认)→ df 的 Avail 比 du 统计的少。
5. 如何手动计算 df 的值?
可以使用 statvfs 系统调用(C/Python)或 tune2fs 查看超级块信息:
1 | tune2fs -l /dev/sda1 | grep "Block count" |
或使用 Python:
1 | import os |
6. 总结
关键点说明df -h 计算方式Size = f_blocks × f_frsizeUsed 计算方式Used = (f_blocks - f_bfree) × f_frsizeAvail 计算方式Avail = f_bavail × f_frsizeUse% 计算方式Use% = Used / Size × 100%-h vs -H-h 用 1024,-H 用 1000df vs dudf 基于超级块,du 基于文件统计
最终答案:df -h 的 Size 是通过 f_blocks × f_frsize 计算得到的,表示文件系统的总容量。