ext4でスパースファイルサポートを無効にする

ext4でスパースファイルサポートを無効にする

ext4ファイルシステムでスパースファイルサポートを完全に無効にできますか?

目的は、ディスクの断片化を防ぐことです。

ソリューションがファイルシステムでファイルをゼロ(またはその他)で埋めずにすばやく割り当てることを許可する場合は、「スコアなし」を付与します。

私が望むのは、アプリケーションに次のファイルを生成するように指示できることです。私はXバイトの「見かけのサイズ」を使用せず、これらのアプリケーションのソースコードを制御することはできません。

時間を節約するために、スパースファイルとクイック割り当てについて言及するたびに常に表示されるいくつかのコメントについてすでに説明します。

  • ファイルシステムの割り当て 経験的な方法がどれほど良いかは興味がありません。
  • 新しく割り当てられたブロックを0に設定しないと、セキュリティへの影響がわかります。

答え1

ext4にはスパースファイルサポートを無効にするオプションはありませんが、ext4(および通常はLinuxカーネル)でサポートされている機能を使用すると、新しいファイルシステムドライバを作成したりext4ドライバを調整したりせずに回避策を実装できます。

私が考えるのに効果があると思うのは、ロードできる共有ライブラリシムを実装することです。LD_PRELOADこれにより、スパースファイルが生成される可能性のあるすべての呼び出しをオーバーライドして、生成されないように処理します。ファイルにブロックを割り当てる簡単な方法は、次を使用することです。posix_fallocate、ディスク容量を確保します。はい戻り時に割り当てられるので、ブロックにすべて0を書き込む必要はありません(ただし、ファイルシステムは読む割り当てられたブロックから0が返されます。シムはposix_fallocateスパースファイルの生成にも使用できるため、傍受する必要があります。

shim(特にsetuidバイナリ)にはいくつかの制限がありますが、LD_PRELOADあなたの場合には適用されない場合があります。

関連情報