web-dev-qa-db-ja.com

非常に大きなデータセットのディスク領域の使用状況とファイル数を確認する(トリックはありますか?)

長い読者、初めての質問者:

私はジュニアレベルのLinux管理者であり、ローカルおよびNFSストレージで非常に大規模なデータセット/ストアをサポートすることがますます増えています。データは一般に、任意の名前を持つ大規模なフォルダーおよびファイルツリーの形式です。課題の例を示すために、私は数十万のネストされたディレクトリと数千万のファイルを含む20+ TBパーティションで作業しています。

これらのパーティション/エクスポートは共有リソースであるため、スペースまたはiノードが不足し始めると、通常、どのフォルダーが最大の違反者であるかを特定するために、探偵をプレイする必要があります。

私は「du -s」が仕事を行うには遅すぎて手動ではないことを発見し、他の人々が非常に大きなパーティションの中の最大または最も多数のファイル数ディレクトリを決定するために使用しているトリックを確認したいと考えていました。

私がこれらの検索を行うことに関係している唯一のOSはRHEL 5/6なので、標準のCLI Linuxツールをどのように組み合わせても問題ありません。

ありがとう!

7
user132791

可能であれば、データを複数のパーティションに分割することをお勧めします。使用するツールに関係なく、その多くのファイルのスキャンには時間がかかります。別のパーティションにある場合は、まず問題を単一のパーティションに絞り込むことができます。しかし、それはあなたがやっていることのオプションではないかもしれません。

duは、おそらくあなたが探しているものに最適なツールです。これが私がそれを使う方法です:

ディレクトリ構造が次のようになっている場合:

/mount/1/abc/123/456/789, 
/mount/1/def/stuff/morestuff/evenmorestuff
/mount/2/qwer/wer/erty

私は走ります:

du -s /mount/*/* | sort -n

これにより、第2レベルの各ディレクトリの合計使用量がサイズ順にソートされます。実行に時間がかかる場合は、ファイルに転送して一晩実行します。

出力は次のようになります。

10000 /mount/1/abc
20000 /mount/1/def
23452 /mount/2/qwer

次に、問題がどこにあるかを確認できるように、それが十分に分解されることを願っています。

これが定期的な問題である場合は、システムがビジーでないときに、毎晩そのコマンドを実行して、出力をファイルに保存することができます。次に、問題に気づいたときにすぐに確認できる最近のデータがいくつかあります。

あなたが見たいと思うもう一つのオプションはクォータです-これが共有ストレージであり、それらがすべて異なるユーザーアカウントを使用している場合、非常に高いクォータを設定すると、暴走したプロセスが大量のストレージスペースを使用するのを防ぐことができます。

2
Grant

通常のdf -iおよびdu -skhソリューション...

ncduユーティリティ を調べます。 ncursesベースのディスク使用率グラフ作成ツールです。ファイル数とディレクトリサイズの概要を含む、以下のような出力が表示されます。 CentOS/RHELで利用できます。

次も参照してください: https://serverfault.com/questions/412651/console-utility-to-know-how-disk-space-is-distributed/412655#412655

ncdu 1.7 ~ Use the arrow keys to navigate, press ? for help                                                         
--- /data ----------------------------------------------------------------------------------------------------------
  163.3GiB [##########] /docimages                                                                                  
   84.4GiB [#####     ] /data
   82.0GiB [#####     ] /sldata
   56.2GiB [###       ] /prt
   40.1GiB [##        ] /slisam
   30.8GiB [#         ] /isam
   18.3GiB [#         ] /mail
   10.2GiB [          ] /export
    3.9GiB [          ] /edi   
    1.7GiB [          ] /io     
5
ewwhite

このコマンドを使用して、システムのdir /にある最大のファイルを確認します。しかし、これがあなたが使用する環境でスケーラブルであるかどうかはわかりません:

find / -type f -size +100000k -exec ls -lh {} \; 2>/dev/null| awk '{ print $8 " : " $5}'

必要に応じて、awkステートメントを省略できます(出力をクリーンアップするために使用しています)。 findコマンドは、指定された量kより大きいファイルを検索するために、ディレクトリを再帰します。次に、そのファイルに対してls -lhを実行します。

-rw-r--r-- 1 username group 310K Feb 25  2011 filename

aWKステートメントは、次の形式で出力をクリーンアップします。

filename : 310K

このコマンドで最も便利だと思うのは、ファイルの最小サイズを指定できることです。以前に述べたように、私はこれがあなたの環境でどれほどCPU /時間を消費するかわかりません。

2
Goez