bashでオーバーヘッドの少ないディスク使用量を確認するにはどうすればよいですか?


8
du -csh /

上記の計算には膨大な時間がかかりますが、オーバーヘッドが少なく、精度の低い結果を確認する方法はありますか?

更新

私が知りたいのは、特定のディレクトリの下の合計サイズです。

回答:


9

より最適化されたバージョンに関してはdu、私はそれを知りません。頭に浮かぶのは:

  1. これらのファイルをRAMディスクなどに保存します。
  2. このフォルダーとそのサブフォルダーに書き込むアプリケーションが1つだけの場合は、アプリケーションに追跡させます。
  3. これらすべてのファイルがほぼ同じサイズで、ディレクトリ間で均等に分散されている場合は、サブディレクトリの数を数え、それをディレクトリごとのファイル数で乗算し、次にファイルごとのサイズを乗算します。ディレクトリの構造が1つしかない場合(stat -c '%h')-2の場合、ディレクトリのハードリンク数を使用するだけでこれをすばやく実行できます。
  4. これらすべてのファイルを特定のユーザーが所有するようにし、クォータメカニズムを使用します。
  5. 専用パーティションを使用し、dfを使用してください。仮想ファイルシステム(ループバックを介してマウントされるファイルシステム上のファイル)もこれを行うことができます。

これらすべての中で、クォータと専用パーティションのオプションがおそらく最も簡単で最も効率的です。


6

問題は、「du」がサブツリー内のすべてのオブジェクトを列挙する必要があることです。これはメタデータを多用する操作であり、ほとんどのLinuxファイルシステムでは時間がかかります。一部のファイルシステム、NTFS、NovellのNSS は、メタデータでこのようなディレクトリサイズを追跡する機能を備えているため、この操作を大幅に高速化できます。一般に、ファイルシステムが何らかの種類のディレクトリクォータをサポートしている場合、強制のためにこのデータを内部で追跡する必要があります。サイズの変更はすべて、ディレクトリツリーからクォータポイント(NTFS)またはすべてのディレクトリ(NSS)にレプリケートされます。 )発生した場合、ディレクトリツリーのサイズを取得するのは非常に高速です。

残念ながら、du runを高速化する方法はなく、回避策があります。

  • 「du」をバッチモードで実行し、ライブではない結果でライブ
  • 新しいファイルシステムを作成し、代わりに「df」を使用します
  • ディレクトリを保持する大きなファイルを作成し、ループバックマウントしてフォーマットし、新しいマウントポイントで代わりに「df」を使用します。さらにスペースが必要な場合は、ループバックマウントをアンマウントし、ファイルを拡張して、再マウントします。

+1これは非常に役立つ回答です。
Richard Holloway

4
du -h --max-depth=1

現在の作業ディレクトリからのサイズを人間のKB / MB / GB形式で示します。


duが生成して応答するのになぜこんなに時間がかかるのかを知りたいと思います。Windowsも同じように動作すると思います。ディレクトリを右クリックすると、すべてのサブディレクトリのサイズが計算されるまで待つ必要があります。これは、ファイルシステムが機能する方法に過ぎません。
Unix Janitor 2010

ええ、彼らがインデックス作成サービスか何かを実行しない限り。
David Rickman

3

標準ツールを使用すると、合計サイズを知りたいときはいつでも、ディレクトリ内のすべてのファイルのサイズを取得する必要があります。それを行うためのおそらくより効率的な方法は、ディレクトリの現在のサイズを追跡する「ディレクトリサイズモニター」を使用することです。(私が知っている)そのようなものはありませんが、で実装できますinotify。おそらくbash(およびinotify-tools)ではありませんが、たとえばpythonやpyinotifyを使用できます。



2

また、duの-xオプションを検討してください。

du -xh / --max-depth=1 

ルートパーティションのディスク使用量の概要のみが表示され、/ proc、/ sys、/ devなどを合計しようとはしません...


2

ルートファイルシステムのディスク使用量だけが必要な場合は、

df -h /


1

いいえ、できません。一晩実行するように設定されたcronジョブで、テキストファイルにパイプでduを定期的に実行して、最新のデータをすぐに入手できない場合はどうでしょうか。

Windowsで多数のファイルを含むフォルダーが使用するディスク容量を測定する場合も、同様に時間がかかることに注意してください。



0

df -kh /

これにより、使用および利用可能なディスク容量が表示されます。


0

たぶん

df -h

serverfaultが私を人間だと考えるには、短く簡潔な答えからの余分なテキストでは不十分です。


しかし、私は特定のディレクトリ下の合計サイズを知る必要があります
Apache

使用するにはduを使用する必要があります
The Unix Janitor

しかし、Windowsでは、オーバーヘッドなしで合計使用済みスペースを確認できますが、なぜLinuxではできないのですか?
Apache

真剣ですか?ntfsはext3ではありません
Unix Janitor 2010

1
@apache、オーバーヘッドがあります。10〜20 MBのファイルがたくさんある20 GBフォルダーのサイズを確認してください。defオーバーヘッドがあります。
Zypher 2010

0

そのディレクトリの下のスペースを見つけるには、の代わりにそれをリストします/。ディレクトリfooとの下のスペースを見つけるにはbar、両方をリストします。

du -csh foo bar

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.