为什么Windows中exFAT的默认分配大小如此之大?


12

引用此页:https : //support.microsoft.com/en-us/kb/140365

直到卷的容量超过16TB时,NTFS才会超过4KB的群集大小,而在现代Windows版本中,FAT32在16GB-32GB的卷范围内最大达到16KB。

但是exFAT仅在7MB–256MB的卷范围内默认为4KB。之后,它会在256MB至32GB的范围内跳至32KB,超出此范围则为128KB。

这是为什么?相对较大的群集大小似乎很浪费,特别是采用为较小的外部设备(如闪存驱动器)设计的格式。令人怀疑的是,如果您要格式化闪存,因为据我所知,较大的群集大小的主要好处是IO更快,这是因为碎片更少,读取的总体群集更少。如果我做错了,请纠正我,但是闪存非常容易造成碎片导致的速度降低。那么为什么要使群集大小如此之大呢?


“大小”和“高”不能同时使用。数字可以是“高”。“大”是投注者,而不是“高”。
锯末


只是想提一下,我只是使用默认的群集大小来格式化1TB驱动器,而Windows使用了2048KB的群集大小!这不仅违反了他们页面上的规格,而且总是WAYY太高
woojoo666

对于任何通过Googling&达到此目的的人,都可能会将git目录备份到有问题的驱动器/卡上,同样重要的是要知道大扇区的缺点:git目录中的每个〜200字节文件占用1个完整分配单元。大扇区可以使开发者目录(可以包含1万多个小文件)占用其正常HDD大小的很大一部分。例如:superuser.com/questions/704218/... superuser.com/questions/1370780/...
kcrumley

Answers:


11

由于exFAT主要用于大容量SD卡之类的东西,因此在SD卡上必须先擦除一个扇区,然后才能对其进行写入。如果要在擦除扇区大小较大的卡上使用小型群集,则将导致许多擦除操作,并将命令写入同一扇区,从而将多个连续的群集值写入磁盘,这不仅会降低性能,还会使闪存过早耗尽细胞。擦除扇区的大小通常没有记录在卡数据表中,但可以在卡的CSD寄存器中找到。该寄存器的内容因卡的内部设计而异。由于SD卡通常用于存储大文件的相机之类的事物,因此大群集大小的浪费空间并不重要,

该网页包含大约12张卡片的注册内容:

http://goughlui.com/2014/01/03/project-read-collect-decode-sd-card-csd-register-data/

并且,如果将其内容输入到以下计算器中,则可以看到一些32 / 64GB卡的擦除扇区大小为128个块,其中一个块为512字节。对于2GB卡,擦除扇区大小为32个块,其中一个块为1024字节。

http://goughlui.com/static/csdecode2.htm

Windows是否足够聪明,可以查询CSD寄存器并建议群集大小,或者仅根据分区或磁盘大小猜测即可。如果要使用微控制器模拟SD卡,则可以找到答案。


1
我不知道需要先擦除闪存,然后才能对其进行写入。现在这很有意义。谢谢!
InsanityOnABun

1
您似乎在假设SD卡没有闪存转换层,即NAND中相邻的逻辑扇区在物理上总是相邻的。否则,群集中的逻辑扇区将不必属于同一擦除块。您有什么证据支持这一假设?
锯末

确实,一些高性能SD卡和闪存驱动器确实具有转换层,但仍预先格式化为32kb簇?我已经验证了4kb集群可提高随机写入和读取的性能
托马什特雷特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.