web-dev-qa-db-ja.com

変更中にfallocate--Dig-holesを使用しても安全ですか

ファイルの変更/書き込み中にファイルでfallocate --Dig-holesを使用するのは安全ですか?たとえば、KVMゲスト?

1
Isabell Cowan

私は一般的にノーと言います。ファイルがVMにマウントされたイメージである場合は、代わりにTRIM(fstrim -aなど)を試すことができます。厳密に言えば、これは同等ではありません(TRIMは、ゼロ化されていない削除済みファイルのスペースを解放することもできます)が、これが必要な場合があります。

特定の場合には安全かもしれませんが、私はそれに依存しません。たとえば、一部のデータがファイルに順次ストリーミングされる場合事前割り当てなしで、潜在的に安全に聞こえます。ただし、これはドキュメントによって暗示されておらず、実装のみに依存するため、強くお勧めしません。

何がうまくいかない可能性がありますか?アプリ/ VMがゼロ化されたブロックを上書きし、同時にfallocate-dを実行するとします。レースは次のようになります。

  1. Fallocateはゼロのブロックを確認したため、そこに穴を掘ることにしました。
  2. 別のアプリケーション/ VMがゼロブロックにデータを書き込みます。
  3. Fallocateはブロックに穴を掘ります。

1から3の間に短い時間枠があるように聞こえるかもしれませんが、本当かもしれませんが、fallocateは、複数の後続のブロックを一度に解放したい場合があります。 (実装を確認していませんが、逆の場合でも、将来的には信頼できません。)これにより、1から3までの遅延が増加し、競合状態が発生する可能性が高くなります。

4
v6ak