作者ducksteven (鸭七‧林新)
站内MAC
标题Re: [软体] 关於exFAT档案大小的问题
时间Wed May 11 01:31:32 2011
这故事要从 FAT 的设计说起
板上有修过 OS 课的请先原谅小弟的班门弄斧
FAT 的全名是 File Allocation Table,
顾名思义它有一张表来记录你档案怎麽分配的
档案在存进去 FAT 磁区的时候,会被分成好几块,
那一块的大小称为 cluster size,是 512 KB 的倍数
每一个 cluster 在 FA Table 里面都有一个位置,称为 FA entry
记录的是我的下一个 block 在哪里,所以它其实在存取的时候是要一串读过去。
这一个 entry 的大小写成 bit 的话就是 FAT xx 的这个 xx
如 FAT 32 则 entry size = 32 bits = 4 Bytes
exFAT 根据我查到的资料是 32-bit 也就是 4 bytes。
假设您的 exFAT 磁区有 > 32GB,根据微软的文件,预设的 cluster size = 128 KB
http://support.microsoft.com/kb/140365/en-us
所以当你储存 4.5MB 的档案进入 exFAT (FAT64) 的磁区时
你要占用的空间除了储存档案实际内容的那一堆 clusters of blocks (4.5MB)
还有描述 clusters 的 FA entries,
每一个 128KB 的 cluster 都要有一个对应的 entry,
所以只要除以 cluster size 就得到要记录这一堆 clusters 所需要的 entry 数量:
4.5 MB ( 4096 + 512 ) KB
------- = ----------------- = 36
128 KB 128 KB
每一个 entry size = 32 bits = 4 bytes ,所以 36 * 4 = 144 Bytes
也就是说,为了储存这 4.5MB,你需要额外的 144 Bytes,
大约就是你看到的 4.6 MB
当然这个数字会根据你格式化时指定的 cluster size 而不同
感谢三楼指正,我算错了 XDD 以下订正
这样也才 1KB ,怎麽会有差到近 100KB 的数字呢?
是因为你的 cluster 可能没有用满,通常的情况下也是这样,
你的档案不会是 128KB 的整数倍,所以超过的部份会占掉 1 个 cluster = 128KB
大概就是为什麽会多约 100 KB 的原因吧。
如果你的作业系统在计算容量时,会计较其真正在档案系统中实际占用的空间,
那就会把後面这个没用完的 128 KB 给算进去,档案愈多,则冗余空间愈大。
以上是根据我以前上课的笔记,如果有错还请板友指正 <(_ _)>
附带一提,因为这种分配的特性,假如作业系统操作 FAT 磁区的演算法不好的话,
就很容易产生分布很散碎片,读取时因为必须从头到尾乖乖读,
这样子磁头要一直前前後後,就很像折返跑好几十次那样。
所以档案分得愈零散,读取就愈耗时,这时候也就需要做磁碟重组。
当然这件事在 SSD 上面不会发生,因为它的随机存取很快。
※ 引述《SugarBrown (The Prestige)》之铭言:
: 不好意思 我不太确定问题是软体还是硬体的问题
: 不过我还是选了软体
: 事情是这样的
: 这两天我买了一颗硬碟 然後顺利的把他格式化成exFAT的这种格式
: 之後我放了档案进去
: 但是档案在exFAT这个新硬碟里显示的大小都会比较大
: 例如:我放了一个4.5mb的mp3进去(在原电脑上显示4.5mb)
: 然後在exFAT这颗新硬碟里就变成4.6mb
: 当然更大的档案差别更是巨大(像是我备份的整个iTUNES资料库就差好几GB)
: 请问这是正常现象吗?
: 因为我还有一个TimeCapsule 但是我把一样的档案丢进去,大小就不会变
: 而我知道Timecapsule是原本mac用的那种日志式的格式
: 难道说这是因为格式化成不同的格式的缘故吗?
: 烦请各位解答 因为我Google不到相关的资讯
: 谢谢:)
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.122.205.4
1F:推 SugarBrown:感谢大大解惑 虽然不是很了解 但是也有了方向 感谢 05/11 01:38
※ 编辑: ducksteven 来自: 140.122.205.4 (05/11 02:08)
2F:推 ryanlei:长知识推 05/11 07:42
3F:推 iPluto:"为了储存这4.5MB,你需要额外的 144 Bytes"那怎麽会多100K 05/11 08:53
4F:→ iPluto:0.1MB可是100KByte耶 05/11 08:54
5F:→ ducksteven:天哪算错了orz 05/11 09:29
※ 编辑: ducksteven 来自: 140.122.205.4 (05/11 12:27)
我修正了一下,谢谢 iPluto
※ 编辑: ducksteven 来自: 140.122.205.4 (05/11 12:27)