通常のHDDのフォーマットとexFatの違い
NTFSなどのシステム用のフォーマットはアロケーションユニットサイズが4kに設定されています。
exFatは、32GB以上のパーティションは128kbがデフォルトの設定になっています。
アロケーションユニットサイズは、ファイル一つの最低限の格納場所として扱われるので、通常のexFatの場合、ファイル毎に128kb以内の無駄な容量が発生します。
この違いで、ファイル数が多くなると無駄な容量も増えるので、保存できる容量が異なる原因になっているようです。
アロケーションユニットサイズの確認方法
1バイト程度の小さなファイルを作成してプロパティを参照するとディスク上のサイズを確認できます。
適切なアロケーションユニットサイズ
サイズを小さくすれば容量の問題は改善すると思って4kにしてみました。
大きいファイルは問題なかったけど、 小さいファイルがあると遅くなります。
簡単に調べた感じサイズを半分にすると、小さなファイルの書き込みが25%ぐらい遅くなるようです。
なので、128を基準にすると32kbにすると書き込み速度が半分になります。調べたデータはこんな感じです。
ファイル数 12000容量 112MB
NTFS 2分
exFat 128kb 5分40秒
exFat 64kb 7分
exFat 32kb 11分
容量の問題が発生した128kbは速度優先な感じがするので、バランスが良いのは64kbですかね。
このテストはHDDで行っているのでSSDやSDカードなどでは異なる可能性があります。
また、大きなファイルの場合は、テストしてませんがあまり差が無いように感じます。
ベンチマークでは分からない
ベンチークは、exFatの方が速いけど、実際使うと違うようです。
NTFS
exFat 4kb
microSDでテストしてみた
microSDは64kb以下の方が速くて、それより下げても差があまり出ませんでした。今回は16kbを選択してみました。
128kb 5分
64kb 4分30秒
32kb 4分40秒
16kb 4分32秒
microSDカードのベンチマークです。
サイズが小さく出来ないとき
エクスプローラのフォーマットだと小さい値に出来ないときがありました。その場合は、ディスク管理を使って、ボリュームを削除して新しいボリュームを作成すると小さい値に変更できます。
フォーマットに依存しないファイル管理
今回のテストデータをzipでまとめると、フォーマットに関係なく1秒で書き込めます。
なので、小さなファイルは出来るだけ一つのファイルにまとめて管理した方が良いかもしれません。
最後に
64kbでフォーマットして3TBをコピーしたら書き込めました。増えた容量は40GBぐらいでした。すこし遅くなった気もするけど、書き込めないよりは良いかな。