最近、FreeBSD サーバーのドライブのディスク容量が不足しました。問題の原因となっているファイルを切り捨てましたが、実行時に変更が反映されていませんdf
。パーティションで実行するdu -d0
と、正しい値が表示されます。この情報を強制的に更新する方法はありますか? ここでの出力が異なる原因は何ですか?
3 に答える
BSD では、ディレクトリ エントリは、基礎となるファイル データ (inode と呼ばれる) への多くの参照の 1 つにすぎません。rm(1) コマンドでファイルを削除すると、参照カウントだけが減少します。参照カウントがまだ正の場合 (たとえば、シンボリック リンクのためにファイルに他のディレクトリ エントリがある場合)、基になるファイル データは削除されません。
新しい BSD ユーザーは、ファイルを開いているプログラムが参照も保持していることに気付かないことがよくあります。これにより、プロセスが使用している間に基になるファイル データが失われるのを防ぎます。参照カウントがゼロになった場合にプロセスがファイルを閉じると、ファイル スペースは使用可能としてマークされます。このスキームは、未指定のプログラムがまだファイルを開いているためにファイルを削除できないという Microsoft Windows タイプの問題を回避するために使用されます。
これを観察する簡単な方法は、次のことです。
cp /bin/cat /tmp/cat-test
/tmp/cat-test &
rm /tmp/cat-test
バックグラウンド プロセスが終了するまで、/tmp/cat-test によって使用されるファイル スペースは割り当てられたままになり、df(1) によって報告されたように使用できなくなりますが、du(1) コマンドはそれを考慮することができません。ファイル名。
プロセスがファイルを閉じずにシステムがクラッシュした場合、ファイル データは存在しますが参照されないため、ファイルシステム スペースを回復するには fsck(8) を実行する必要があることに注意してください。
ファイルを開いたままにしておくプロセスは、newsyslog(8) コマンドが syslogd または他のロギング プログラムにシグナルを送信して、ログ ファイルをローテーションした後にログ ファイルを閉じて再度開く必要があることを通知する理由の 1 つです。
ソフトアップデートは、実際の inode スペースの回復が延期される可能性があるため、ファイルシステムの空きスペースにも影響を与える可能性があります。sync(8) コマンドを使用して、これをより早く実行するように促すことができます。
これはおそらく、ファイルを切り捨てた方法に集中しています。duとdfは、unix.com のこの投稿で説明されているように、異なることを報告します。スペースが使用されていないからといって、必ずしも無料であるとは限りません...
df --sync は機能しますか?