web-dev-qa-db-ja.com

書き込みパフォーマンスを向上させるために、特定のクラスターサイズを備えたより堅牢なLinuxで使用可能なファイルシステムでSDカードをフォーマットするにはどうすればよいですか?

目標:フォーマットされたmicroSDカード...

  • 最高の書き込みパフォーマンスのために
  • 組み込みLinuxでのみ使用
  • 信頼性を高めるため(ランダムな電源障害が発生する可能性があります)
  • 64kBのクラスターサイズを使用

組み込みLinux/ARMデバイス内のデータストレージに8GBのmicroSDカードを使用しています。 SDカードは取り外しできません。書き込み中のランダムな電源障害をより適切に処理できるように見えるため、プリインストールされたFAT32の代わりにext3を使用しています。ただし、キングストンのFAT32がプリインストールされていると、書き込みパフォーマンスが常に最高になることに気づきました。カードをFAT32で再フォーマットすると、パフォーマンスが低下します。ウィキペディアを閲覧した後、特定のクラスターサイズに最適化されているカードがあるという次のコメントに出くわしました。私の場合、キングストンは64kBのクラスターサイズ用にフォーマット済みです。

再フォーマットのリスク

SDカードを別のファイルシステムで、または同じファイルシステムで再フォーマットすると、カードの速度が低下したり、寿命が短くなったりする場合があります。一部のカードは、頻繁に変更されるブロックが異なる時間にメモリの異なる部分にマップされるウェアレベリングを使用し、一部のウェアレベリングアルゴリズムは、FAT16またはFAT32デバイスのファイルアロケーションテーブルに典型的なアクセスパターン用に設計されています。[60]さらに、事前にフォーマットされたファイルシステムは、カード上の物理メモリの消去領域に一致するクラスターサイズを使用する場合があります。再フォーマットにより、クラスターサイズが変更され、書き込みの効率が低下する可能性があります。

5
Harvey

そこにあるほとんどのSDカード(およびUSBドライブ)は、FAT32での使用に最適化されています。他のFSと一緒に使用すると、パフォーマンスが低下します。

詳細については [〜#〜] lwn [〜#〜] をご覧ください。

3
Hubert Kario

注: SDカードアソシエーションフォーマットツール は次のことを行います。

すべてのデバイスについて、まだ完全な答えはありません。ただし、FAT32を使用した8GiBカードの回答は次のとおりです。

FAT32パーティションがディスクの先頭から4MiBであるセクター8,192で始まるように、カードをパーティション分割します。次に、FAT32パーティションを32kiBクラスターでフォーマットし、「予約セクター」の数を設定して、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を推奨しています。カードのコントローラーチップは、その2番目の4MiB領域での小さな読み取り/書き込み用に最適化されています。

それだけではありませんが、それは迅速で汚い答えです。上記の方法は、32kiBクラスターの場合は16GiB未満、64kiBクラスターの場合は32GiB未満のディスクでのみ機能します。ディスクサイズが大きくなると、データ領域が論理8MiBにプッシュされると思われますが、使用する8GiBより大きいディスクがありません。

3
Harvey