ファイルの変更/書き込み中にファイルでfallocate --Dig-holes
を使用するのは安全ですか?たとえば、KVMゲスト?
私は一般的にノーと言います。ファイルがVMにマウントされたイメージである場合は、代わりにTRIM(fstrim -aなど)を試すことができます。厳密に言えば、これは同等ではありません(TRIMは、ゼロ化されていない削除済みファイルのスペースを解放することもできます)が、これが必要な場合があります。
特定の場合には安全かもしれませんが、私はそれに依存しません。たとえば、一部のデータがファイルに順次ストリーミングされる場合事前割り当てなしで、潜在的に安全に聞こえます。ただし、これはドキュメントによって暗示されておらず、実装のみに依存するため、強くお勧めしません。
何がうまくいかない可能性がありますか?アプリ/ VMがゼロ化されたブロックを上書きし、同時にfallocate-dを実行するとします。レースは次のようになります。
1から3の間に短い時間枠があるように聞こえるかもしれませんが、本当かもしれませんが、fallocateは、複数の後続のブロックを一度に解放したい場合があります。 (実装を確認していませんが、逆の場合でも、将来的には信頼できません。)これにより、1から3までの遅延が増加し、競合状態が発生する可能性が高くなります。