如何使用具有特定簇大小的更強大的 Linux 可用檔案系統格式化 SD 卡,以獲得更好的寫入效能?

如何使用具有特定簇大小的更強大的 Linux 可用檔案系統格式化 SD 卡,以獲得更好的寫入效能?

目標:microSD 卡格式化...

  • 以獲得最佳寫入效能
  • 僅適用於嵌入式 Linux
  • 為了更好的可靠性(可能會發生隨機斷電)
  • 使用 64kB 簇大小

我使用 8GB microSD 卡在嵌入式 Linux/ARM 裝置內儲存資料。 SD 卡不可拆卸。我一直使用 ext3 而不是預先安裝的 FAT32,因為它似乎可以更好地處理寫入過程中的隨機電源故障。然而,我一直注意到,使用金士頓預先安裝的 FAT32 時,我的寫入效能始終是最佳的。如果我用 FAT32 重新格式化該卡,效能仍然會受到影響。瀏覽維基百科後,我偶然發現以下評論說某些卡片針對特定叢集大小進行了最佳化。就我而言,金士頓已預先格式化為 64kB 簇大小。

重新格式化的風險

使用不同的檔案系統(甚至相同的檔案系統)重新格式化 SD 卡可能會使卡片變慢,或縮短其使用壽命。有些卡片使用磨損均衡,其中頻繁修改的區塊在不同時間映射到記憶體的不同部分,並且一些磨損均衡演算法是針對 FAT16 或 FAT32 裝置上檔案分配表的典型存取模式而設計的。此外,預先格式化檔案系統可以使用與卡片上實體記憶體的擦除區域相符的簇大小;重新格式化可能會改變簇大小並降低寫入效率。

答案1

大多數 SD 卡(以及 USB 隨身碟)都針對 FAT32 進行了最佳化。將它們與任何其他 FS 一起使用將導致您的效能受到影響。

更多資訊請訪問低水溫網絡

答案2

註:SD卡協會格式化工具為您執行以下操作。

我還沒有所有設備的完整答案。然而,這是使用 FAT32 的 8GiB 卡的答案。

對卡片進行分割區,使 FAT32 分割區從磁區 8,192 開始,距磁碟開頭 4MiB。接下來,用32kiB 簇格式化FAT32 分割區,並設定「保留磁區」的數量,使FAT32 分割區的資料區群集2 從邏輯磁區8,192 開始(或從磁碟起始處起8MiB(從起始處起4MiB)的分區)。

Use 32kiB clusters
| 4MiB      | 4MiB                                | remainder of disk    |  
| -------   | ---------------------------------   | ------------------   |  
| MBR       | First Partition Header + FAT tables | First Partition Data |  

總結推理:SD 卡協會建議將這些 4MiB 邊界作為最佳化區域,並建議 FAT32 作為這些尺寸卡的檔案系統。卡片中的控制器晶片針對第二個 4MiB 區域中的小型讀取/寫入進行了最佳化。

事情遠不止這些,但這是一個快速而骯髒的答案。上述方法僅適用於 32kiB 叢集小於 16GiB 的磁碟和 64kiB 叢集小於 32GiB 的磁碟。我懷疑在較大的磁碟大小下,資料區域會被推至邏輯 8MiB,但我沒有大於 8GiB 的磁碟可供使用。

相關內容