私は5PBディスク上のディレクトリのディスク容量を決定する最も効率的な方法を探しています。
私が分析したいディレクトリの場所は次のとおりです。
/disk/user1/task1/
/disk/user1/task2/
/disk/user2/task3/
/disk/user100/task1/
など
それぞれのサイズを見つける必要があります。仕事最も効率的なコマンドが何であるかを知りたいです。
これまで私はこれを試しましたncdu -rx
(数日かかるようです)。
もっと良い方法を知っている人はいますか?
私はこれらのコマンドに最高ではないので、詳細な答えをいただきありがとうございます。
答え1
私はバリアントを使用しますコマンドラインからディレクトリサイズを取得する方法は?-
du -sm /disk/user*/task* | sort -n | tee /tmp/disk-usage.rpt
3つのことを行います。
-s
すべてのユーザーディレクトリ()の下の各作業ディレクトリの合計ディスク使用量をメガバイト(-m
)単位で収集します。- 出力を最初の列に基づいて数値で並べ替えると、最大の作業ディレクトリが一番下に配置され、並べ替えを逆にすると一番上に配置されます。
sort -rn
- この出力のコピーを画面と /tmp/disk-usage.rpt のファイルに送信します。
ファイルの保存されたコピーを使用すると、次にdu
最大の作業ディレクトリを再調査するためにコマンドを再実行する必要がなくなります(必要でない限り)。
答え2
この場合、遅い部分はファイルサイズではなくファイル数です。ncdu
、、、du
および同様の場合はstat()
各ファイルが必要になるため、ファイルが多いと問題が発生します。
ファイルサイズがファイル数に関連付けられている場合(たとえば、ファイルごとのファイルサイズが制限されている場合など)、幸運なことに、ファイル数を数え、最初にディレクトリごとにグループ化してリストを絞り込むことができます。基本的なケースでは、stat()
発行はまったく含まれておらず、ほとんどreaddir()
。
fstat()
残念ながら、少なくとも私のシステムでは、GNUのような一般的なツールがすべてのファイルの問題を見つけます。を使用して小さなCプログラムを作成しopendir
、readdir
返されたオブジェクトの数を数えると、この問題をかなり簡単に解決できます。
ファイルサイズがファイル数に関連していない場合は、幸運ではありません。後で小さいパーティションを使用するか、btrfsサブボリューム(O(1)計算も含む)を使用してO(1)または同様のディスクサイズ計算を可能にするようにファイルシステムを設定することを検討してください。