一次关于文件系统簇大小、Finder 显示逻辑和“停车位”理论的探究,后附实测截图
一、现象:两个文件夹,两种“灵异”结果
最近整理备份时,我发现了两个令人费解的现象。我把电脑里的文件夹拷贝到外接备份盘,文件内容一字未改,但右键点击“显示简介”时,磁盘占用却出现了截然不同的两种情况:
| 文件夹 | 系统盘 (Macintosh HD) | 备份盘 (bak_Licw) | 差异 |
|---|---|---|---|
data(53.5万个项目) | 405.63 GB 数据,占用407.13 GB | 405.63 GB 数据,占用509.29 GB | 相差 102.16 GB |
shuhuigao(8.9万个项目) | 1.697 TB 数据,占用1.7 TB | 1.697 TB 数据,占用1.7 TB | 肉眼看不出差异 |
同样的操作,同样的“未修改”,为什么一个差出 100 多 G,另一个却完全一样?背后到底是谁在搞鬼?
二、推测:存储最小单位-簇-类比“停车位”
硬盘存文件不是像倒水一样无缝填充,而是像停车位。
硬盘的最小存储单元叫做“簇”(又称分配单元/块)。无论文件本身多小(比如 1KB),只要它存在,就必须占用一个完整的簇,文件占不满簇的尾部空间就白白浪费了。
基于此,我提出两个推论:
推论 A:如果一个文件夹里全是几 KB 的小文件,拷贝到大簇硬盘上,每个文件都会浪费几百 KB 的“空地”。文件数量越多,浪费越恐怖 → 这解释了
data为什么差 100GB。推论 B:如果文件夹里全是几十 MB 甚至 GB 级的大文件,簇的“零头浪费”只体现在最后一个簇上,占比极小,肉眼完全看不出来 → 这解释了
shuhuigao为什么显示相同。
理论归理论,必须动手验证。
三、动手验证:3 个实验
实验环境:MacBook Pro,系统盘 APFS,外接盘为 8TB 移动硬盘(ExFAT 格式)。
验证①:先查“簇大小”——拿到决定性物证
在终端用diskutil info分别查看两个盘的分配单元大小:
bash
diskutil info /dev/disk3s5 | grep "Allocation Block Size" diskutil info /dev/disk5s2 | grep "Allocation Block Size"
实测结果:
| 磁盘 | 簇大小 |
|---|---|
| 系统盘 (Macintosh HD) | 4 KB(4096 Bytes) |
| 备份盘 (bak_Licw) | 256 KB(262144 Bytes) |
结论:备份盘的“车位”是系统盘的64 倍。这意味着同样一个 1KB 的小文件,在系统盘只浪费 3KB,在备份盘却要浪费 255KB。
验证②:复现“100G 差异”——海量小文件实验
操作:在桌面生成 1 万个 1KB 的假文件(模拟代码缓存、缩略图),分别拷贝到系统盘和备份盘,观察磁盘占用。
bash
mkdir ~/Desktop/lab_small && cd ~/Desktop/lab_small for i in {1..10000}; do dd if=/dev/zero of=small_$i.txt bs=1K count=1; done cp -r ~/Desktop/lab_small /Volumes/bak_Licw/ du -sh ~/Desktop/lab_small du -sh /Volumes/bak_Licw/lab_small实测结果:
| 位置 | 逻辑大小 | 磁盘占用 |
|---|---|---|
| 系统盘(4KB 簇) | 10 MB | 39 MB |
| 备份盘(256KB 簇) | 10 MB | 2.4 GB |
结论:同样 10MB 的数据,在大簇硬盘上膨胀了60 倍!放大到出问题的 53 万个文件,差出 100GB 完全符合数学预期。
数学验算:
1万个文件 × 256KB = 2.56GB(显示为 2.4GB,完全吻合)
你的
data文件夹:53.5万文件 × 平均浪费 ~200KB ≈107GB,与实际 102GB 差异误差极小!
验证③:复现“显示相同”——少量大文件实验
操作:生成 10 个 100MB 的大文件(模拟视频、PSD),重复上述拷贝和观察。
bash
mkdir ~/Desktop/lab_big && cd ~/Desktop/lab_big for i in {1..10}; do dd if=/dev/zero of=big_$i.dat bs=1M count=100; done cp -r ~/Desktop/lab_big /Volumes/bak_Licw/ du -sh ~/Desktop/lab_big du -sh /Volumes/bak_Licw/lab_big实测结果:
| 位置 | 逻辑大小 | 磁盘占用 |
|---|---|---|
| 系统盘(4KB 簇) | 1 GB | 1.0 GB |
| 备份盘(256KB 簇) | 1 GB | 1.0 GB |
结论:大文件的体积远超单个簇,簇浪费占比不足 0.01%,所以在 GB 级别显示时被彻底“抹平”了。这正是shuhuigao文件夹的真相。
数学验算:
理论最大浪费:10个文件 × 256KB = 2.56MB
占 1GB 总量的比例:2.56MB ÷ 1024MB ≈0.25%
在 Finder 显示一位小数时,
1.000 GB和1.003 GB都显示为1.0 GB
四、结论:为什么一个差 100G,一个看不出差?
通过以上实验,可以铁定地下结论:
文件内容(逻辑字节数)没变,但拷贝到不同格式的硬盘后,“磁盘占用”出现巨大差异,100% 由“簇大小”决定。
| 文件夹 | 项目数 | 平均文件大小 | 簇浪费占比 | 最终表现 |
|---|---|---|---|---|
data | 534,917 | ~0.76 MB | 极高(海量小文件导致尾部浪费严重) | 差异102 GB,肉眼可见 |
shuhuigao | 89,380 | ~19 MB | 极低(< 1%,大文件尾部浪费可忽略) | 差异被四舍五入到1.7 TB抹平 |
用数学验算一下shuhuigao的理论最大浪费:89,380 个文件 × 256KB ≈ 22.8 GB,占总量1,697 GB的1.3%。
在 Finder 显示一位小数时,1.697 TB和1.720 TB都会显示为1.7 TB,所以你看不出差异。
五、延伸思考:簇大小能改吗?改了会怎样?
簇大小可以设定吗?
可以,但有限制。
APFS(系统盘):簇大小固定为4KB,无法手动更改。这是苹果为 SSD 深度优化的设计。
ExFAT(备份盘):允许在格式化时设定簇大小。你的备份盘之所以是 256KB,是系统在格式化 8TB 大容量硬盘时自动选择的默认值。
如果想在格式化 ExFAT 时指定簇大小,可以用终端命令:
bash
sudo newfs_exfat -b 4096 /dev/disk5s2 # 设为 4KB
把簇改小,有什么好处和坏处?
好处:极大节省空间,尤其对于海量小文件的场景。
量化对比(基于实测数据):
1万个1KB文件:4KB簇下占39MB,256KB簇下占2.4GB
空间节省率:
(2.4GB - 39MB) / 2.4GB ≈ 98.4%
坏处:读写性能下降,尤其对于大文件。
| 场景 | 大簇(256KB) | 小簇(4KB) |
|---|---|---|
| 大文件连续读写(视频、PSD) | 快(减少碎片管理开销) | 慢(需管理更多碎片) |
| 小文件随机读写(代码、照片) | 慢(每次读写一个超大块) | 快(浪费少,操作灵活) |
量化数据参考:
在 NTFS 格式下,将簇从 32KB 增至 128KB,连续写入 5GB 视频文件的性能可提升约12% - 18%。
但 128KB 簇相比 4KB 簇,小文件随机写入性能可能下降约18%。
如何选择?
| 使用场景 | 推荐簇大小 | 理由 |
|---|---|---|
| 存放大文件(视频素材、系统备份、游戏镜像) | 256KB 或更大 | 空间浪费占比小,读写性能更优 |
| 存放海量小文件(代码仓库、网站资源、照片缓存) | 4KB | 空间利用率极高,避免几十甚至上百 GB 的浪费 |
| 混合使用(日常通用) | 默认 4KB | 空间与性能的最稳妥平衡点 |
六、实用建议
不再焦虑:以后看到备份盘“莫名多占”空间,你知道这是物理规律,不是病毒或损坏。
备份策略优化:如果经常备份含海量小文件的项目(如
node_modules、Python 虚拟环境、照片缩略图库),要么格式化备份盘为 APFS,要么先打成压缩包再拷贝,可以轻松省出几十甚至几百 GB。
附:实验验证截图
以下截图来自笔者在 MacBook Pro 上的真实实验,所有数据均可复现。
实验环境:
系统盘:Macintosh HD(APFS,默认簇大小 4KB)
备份盘:bak_Licw(ExFAT,默认簇大小 256KB)
图:一站式实验脚本的完整终端输出
截图解读:
| 实验项目 | 系统盘(4KB簇) | 备份盘(256KB簇) | 结论 |
|---|---|---|---|
| 簇大小 | 4096 Bytes | 262144 Bytes | 备份盘“车位”是系统盘的 64 倍 |
| 实验一:1万个小文件(逻辑大小 10MB) | 39 MB | 2.4 GB | 膨胀约 60 倍! |
| 实验二:10个大文件(逻辑大小 1GB) | 1.0 GB | 1.0 GB | 肉眼完全看不出差异 |
实验结论:截图清晰展示了“海量小文件”在大簇硬盘上空间急剧膨胀,而“少量大文件”则不受影响。这正是data文件夹差 100GB、而shuhuigao文件夹显示相同的原因。