web-dev-qa-db-ja.com

rm over NFSがすぐにスペースを解放しないのはなぜですか?

NFSマウントを介してドライブをマウントしたSUSEEnterpriseサーバーを使用しています。 NFS共有の書き込み速度をテストするために、dd if=/dev/Zero of=test_file bs=8k Count=4194304を介して34GBのファイルを作成しました。その後、rm test_fileでファイルを削除し、すぐにdfを使用しました。

usedの出力のdf列の値が減少し始めます。 dfを約10秒ごとに呼び出し、usedの値が約2GB減少したことを確認するたびに更新します。

したがって、コマンドプロンプトを再び使用できるようにしていますが、rm test_fileコマンドはジョブを完了していないようです(したがって、rmは「0」を返したはずですよね?)。ここでバックグラウンドで何が起こっているのですか?

1
Robert

NFS共有にバックエンドストレージを提供しているリモートノード上のファイルシステムは、すぐにスペースを解放していません。

厳密に言えば、POSIXセマンティクスでは、使用していたスペースをすぐに解放するためにファイルを削除する必要はありません(実際には、スペースを解放する必要はありませんまったく、これは一部の人にとって重要ですユースケース)。このため、およびスペースを解放するのに長い時間がかかる可能性があるため、一部のファイルシステムは、割り当て解除が行われるのを待たずに、ファイルエントリがディレクトリリストに表示されないようになったら戻るだけです( POSIXに必要なのはこれだけです)。

スペースを解放するのに時間がかかる可能性がある考えられる理由は次のとおりです。

  • ファイルシステムは、情報の開示を防ぐために解放されるときに、空き領域をスクラブする場合があります。これはほとんどの場合、費用のかかる操作です。
  • ファイルシステムは、SSDまたはシンプロビジョニングされたストレージ上にあり、スペースが現在使用されていないことを下位層に通知するように構成されている場合があります。この操作にもかなりの時間がかかる場合があります。
  • ファイルシステムは、内部アカウンティングの目的でデータ構造を更新する必要がある場合があります。これには時間がかかる場合とそうでない場合がありますが、通常は簡単ではありません。
  • ファイルシステムは、ファイル内のreflinkまたはその他の共有領域を適切に処理するために、内部データ構造を更新する必要がある場合があります。
2