題 為什麼exFAT在Windows中的默認分配大小如此之高?


參考此頁面: 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,因為碎片更少,讀取的整體群集更少。如果我錯了,請糾正我,但閃存很多,更不容易因碎片造成的速度減慢。那麼為什麼要使集群規模如此之高呢?


7
2017-12-01 20:58


起源


“大小”和“高”不一起。數字可以“高”。 “大”是下注詞而不是“高”。 - sawdust
可能重複 分配單位規模較小的缺點 - sawdust
我只想提一下,我只是使用默認的簇大小格式化了1TB驅動器,而windows使用的簇大小為2048KB!這不僅違反了他們頁面上的規格,這總是過於高漲 - woojoo666


答案:


因為exFAT主要用於大容量SD卡和SD卡,所以必須先擦除扇區才能寫入。如果你在具有大擦除扇區大小的卡上使用小簇,則會導致對同一扇區的許多擦除和寫入命令將多個連續的簇數據寫入磁盤,這不僅會降低性能,還會過早磨損閃存細胞。擦除扇區大小通常不在卡數據表中記錄,但可以在卡的CSD寄存器中找到。根據內部設計,該寄存器的內容因卡而異。由於SD卡通常用於存儲大型文件的相機之類的東西,因此大型簇大小的浪費空間並不重要,只有在存儲大量非常小的文件時才會發生這種情況。

這個網頁上有十幾張卡的內容:

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卡,您可以找到答案。


7
2017-12-02 13:13



我不知道在你寫入之前需要擦除閃存。這是有道理的。謝謝! - InsanityOnABun
您似乎假設SD卡沒有閃存轉換層,即相鄰的邏輯扇區將始終在NAND中物理上相鄰。否則,群集中的邏輯扇區不必屬於相同的擦除塊。您有什麼證據支持這一假設? - sawdust