冷知识 | 同样的文件,拷贝到移动硬盘后占用空间竟然暴涨100多G?——从簇大小角度讲“同文件”在不同磁盘的存储占用差异
2026/9/6 4:22:04 网站建设 项目流程

一次关于文件系统簇大小、Finder 显示逻辑和“停车位”理论的探究,后附实测截图

一、现象:两个文件夹,两种“灵异”结果

最近整理备份时,我发现了两个令人费解的现象。我把电脑里的文件夹拷贝到外接备份盘,文件内容一字未改,但右键点击“显示简介”时,磁盘占用却出现了截然不同的两种情况:

文件夹系统盘 (Macintosh HD)备份盘 (bak_Licw)差异
data(53.5万个项目)405.63 GB 数据,占用407.13 GB405.63 GB 数据,占用509.29 GB相差 102.16 GB
shuhuigao(8.9万个项目)1.697 TB 数据,占用1.7 TB1.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 MB39 MB
备份盘(256KB 簇)10 MB2.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 GB1.0 GB
备份盘(256KB 簇)1 GB1.0 GB

结论:大文件的体积远超单个簇,簇浪费占比不足 0.01%,所以在 GB 级别显示时被彻底“抹平”了。这正是shuhuigao文件夹的真相。

数学验算

  • 理论最大浪费:10个文件 × 256KB = 2.56MB

  • 占 1GB 总量的比例:2.56MB ÷ 1024MB ≈0.25%

  • 在 Finder 显示一位小数时,1.000 GB1.003 GB都显示为1.0 GB

四、结论:为什么一个差 100G,一个看不出差?

通过以上实验,可以铁定地下结论:

文件内容(逻辑字节数)没变,但拷贝到不同格式的硬盘后,“磁盘占用”出现巨大差异,100% 由“簇大小”决定。

文件夹项目数平均文件大小簇浪费占比最终表现
data534,917~0.76 MB极高(海量小文件导致尾部浪费严重)差异102 GB,肉眼可见
shuhuigao89,380~19 MB极低(< 1%,大文件尾部浪费可忽略)差异被四舍五入到1.7 TB抹平

用数学验算一下shuhuigao的理论最大浪费:
89,380 个文件 × 256KB ≈ 22.8 GB,占总量1,697 GB1.3%
在 Finder 显示一位小数时,1.697 TB1.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空间与性能的最稳妥平衡点

六、实用建议

  1. 不再焦虑:以后看到备份盘“莫名多占”空间,你知道这是物理规律,不是病毒或损坏。

  2. 备份策略优化:如果经常备份含海量小文件的项目(如node_modules、Python 虚拟环境、照片缩略图库),要么格式化备份盘为 APFS,要么先打成压缩包再拷贝,可以轻松省出几十甚至几百 GB。

附:实验验证截图

以下截图来自笔者在 MacBook Pro 上的真实实验,所有数据均可复现。

实验环境

  • 系统盘:Macintosh HD(APFS,默认簇大小 4KB)

  • 备份盘:bak_Licw(ExFAT,默认簇大小 256KB)

图:一站式实验脚本的完整终端输出

截图解读

实验项目系统盘(4KB簇)备份盘(256KB簇)结论
簇大小4096 Bytes262144 Bytes备份盘“车位”是系统盘的 64 倍
实验一:1万个小文件(逻辑大小 10MB)39 MB2.4 GB膨胀约 60 倍!
实验二:10个大文件(逻辑大小 1GB)1.0 GB1.0 GB肉眼完全看不出差异

实验结论:截图清晰展示了“海量小文件”在大簇硬盘上空间急剧膨胀,而“少量大文件”则不受影响。这正是data文件夹差 100GB、而shuhuigao文件夹显示相同的原因。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询