10月29日、Phoronixが「FAT32 File-System Seeing As Much As 265x Improvement With Linux 7.4」と題した記事を公開した。Linux 7.4にマージされたわずか数行のパッチが、FAT32ファイルシステムのパフォーマンスを最大265倍改善したという内容だ。
「古いファイルシステムだから最適化の余地はない」——そう思われがちなFAT32に、長年見落とされていた非効率が存在した。しかもその修正は、原理としては拍子抜けするほど単純なものだった。
わずか数行のコード変更で265倍
ブラジル連邦リオグランデ・ド・スル大学(UFRGS)の開発者Matheus Alves de Almeidaが書いたこのパッチは、2026年10月12日に投稿され、Linuxカーネルのサブシステムメンテナとして知られるAndrew Mortonが送付したnon-MM pull requestの一部としてLinux 7.4へマージされた。
問題の根本は、fallocateシステムコールにFALLOC_FL_KEEP_SIZEフラグを指定してファイル領域を事前確保する際の挙動にあった。
fallocateはファイルへの書き込みを行う前にディスク領域だけを確保しておくシステムコールで、動画ファイルの録画や大容量データの一括書き込みなど、書き込み中に領域不足が起きることを防ぎたいケースで広く使われる。FALLOC_FL_KEEP_SIZEはそのオプションの一つで、「ディスク領域は確保するが、statなどで報告されるファイルサイズは変えない」という挙動を指定するフラグだ。
従来のFATドライバはこの処理を行う際、1クラスタずつ繰り返し割り当てる実装になっていた。クラスタとはFATファイルシステムがディスク領域を管理する最小単位だ。たとえば典型的な32KBクラスタサイズの環境で1GBのファイルを確保しようとすると、3万2000回以上のループが発生する計算になる。ファイルが大きくなるほど、このオーバーヘッドはそのまま積み上がっていく。
今回のパッチはこれを修正し、1回の呼び出しで連続する複数クラスタをまとめて割り当てる方式に変更した。Phoronixが紹介しているベンチマークでは、大きなファイルサイズのケースで最大265倍のスループット向上が確認されており、ファイルサイズが大きくなるほど改善幅も拡大する傾向がある。
なぜ今FAT32なのか
FAT32は1996年にMicrosoftが導入した古いファイルシステムだ(Wikipedia: FAT32)。現代のLinuxシステムではext4やBtrfsが主流だが、FAT32はSDカード・USBメモリ・デジタルカメラ・組み込み機器など、Windows・macOS・Linuxをまたいで読み書きできる互換性の高さから今も広く使われ続けている。
とりわけ組み込みLinuxやIoTデバイスの分野では、ストレージメディアのフォーマットとしてFAT32が事実上の標準になっているケースも多い。ドライブレコーダーや産業用センサー機器など、連続した大容量データを書き込む用途ではfallocateによる領域確保が有効な手段であり、今回の改善が直接恩恵をもたらす。
LinuxカーネルのFATドライバ(fs/fat/)はこうした相互運用性ニーズへの対応として維持されている。「枯れた実装」と見なされやすいコードベースだが、今回のケースはそうではなかった。長年放置されていたループ処理の非効率が、数行の修正で解消された。
新しいファイルシステムへの移行が難しい環境では、既存実装の細部に改善の余地が残っていることを、今回のパッチは改めて示した形だ。
詳細はFAT32 File-System Seeing As Much As 265x Improvement With Linux 7.4を参照していただきたい。