もう一度デスクトップをクリーンアップしています.HDDスペースを使い果たしていて、毎回_du -sh ~
_を呼び出しているため、ディレクトリの現在のサイズを計算するのに本当に長い時間がかかります。
私の観点からは、ext4ファイルシステムキャッシュがディレクトリのサイズに関する情報をキャッシュしないと、ファイルが作成/削除されたときに更新されない理由がわかりません。その場合、情報はシステムにさらされ、最終的にはユーザーにとって。もちろん、ディレクトリのサイズのデータをディレクトリツリーの上に伝播する必要がありますが、通常のLinuxデスクトップで問題を引き起こす状況を想像できません。
私はどこでこれを間違ったのですか?
単純なキャッシュが機能しませんでした。キャッシュは、すでに答えを持っているかどうかを確認し、そうでない場合は再処理してください。しかし、この場合、欠けているエントリは他の人に役に立たなくなります。したがって、allディレクトリサイズが更新されたALLの時間。
また、あなたの提案の可能な影響を過小評価していません。 FileSystemsをジャーニングするときに戻って、ジャーナルの更新が高すぎたために多くの反対がありました。また、ほとんどのファイルシステムは、このような種類のメダタタ更新を減らすnoatime
、nodiratime
、relatime
のようなオプションを許可します。これらのすべての(ジャーナルとタイムの更新)は時間内にバインドされていることに注意してください。それらはすべて特定の数のブロックアクセスを取得します(通常は高度なIOスケジューリング)、サイズを更新することです。 すべてディレクトリ上のパスの上に、未知のアクセス量を意味します。
最後に、POSIXファイルシステムでは、実際の「ディレクトリを含む」がありません。ディレクトリ上のファイルエントリは、iノード(ファイル情報を保持するディスク構造)を指しますが、iノードからディレクトリへの参照はありません。これにより、1つ以上のエントリ(通常は異なるディレクトリ内)が同じiノードを指している「ハードリンク」機能を可能にします。 iノードを指すディレクトリのリストを維持しても、(すでに大きな)アップデートに乗算しています。さらに悪いです。それともそれは?たぶんあなたは保持する必要があるかもしれません2 =各ディレクトリのサイズ、すべての「実際の」ファイルをカウントするもの、その他が表示されるたびにカウントされます。
それは結局のところそのようなものではないようです。
もう一つの理由もあります。 du
サブシステムの一部が測定しているディレクトリにマウントされている別のボリューム上にある場合は考慮されません。
したがって、ボリュームごとに使用された場合でも、du
はそれを熟考しないでしょう。一方、df
はそのような情報を利用します....