Linuxでディスクスペースがどこに行くかを追跡しますか?

Linuxでディスクスペースがどこに行くかを追跡しますか?

Linuxシステムを管理するときにパーティションがいっぱいになると、原因を見つけるために苦労することがよくあります。私は通常使用しますdu / | sort -nrが、大規模ファイルシステムでは結果を返すのに長い時間がかかります。

duまた、これは通常最悪の犯罪者を強調することに成功しますが、より微妙な状況では使用せずに出力でsort 検索する必要があることがよくあります。

私はかなり多くのシステムを管理する必要があり、新しいソフトウェアをインストールするのが面倒なので、標準のLinuxコマンドに依存するコマンドラインソリューションを好みます(特にディスク容量が不足している場合)。

答え1

努力するncdu、優れたコマンドラインディスク使用量アナライザ:

「ncdu」プログラムの出力です。出力には、ファイルのサイズと名前とともに、/usr/portage/distfilesのファイルがサイズの降順で一覧表示されます。 239.1MiB "firefox-57.0.source.tar.xz"ファイルが239.4MiB "firefox-57.0.1.source.tar.xz"以降のバージョンに置き換えられたため、ユーザーはそれを削除しています。

答え2

直接行かないでくださいdu /df自分に影響を与えるパーティションを見つけて、コマンドを試すためにdu使用します。

試してみたいことの一つは

# U.S.
du -h <dir> | grep '[0-9\.]\+G'
# Others
du -h <dir> | grep '[0-9\,]\+G'

「人が読める形式」で寸法を印刷するからです。パーティションが非常に小さくない限り、ギガバイトディレクトリへのgrepingはあなたが望むもののための非常に良いフィルタです。少し時間がかかりますが、クォータを設定しないとそうなります。

@jchavannesがコメントで指摘したように、間違った肯定を見つけすぎると、表現がより正確になる可能性があります。私はこの提案に従い、結果は良くなりましたが、まだ偽の肯定があるので、長所と短所があります(exprが単純なほど結果が悪く、exprがより複雑で、exprが長いほど結果が良い)。出力に小さなディレクトリが多すぎる場合は、それに応じて正規表現を調整してください。例えば、

grep '^\s*[0-9\.]\+G'

はるかに正確です(1 GB未満のディレクトリはリストされていません)。

もしあなたならするクォータがあるので使用してください

quota -v

ディスクを占有しているユーザーを探します。

答え3

まず、以下の要約ビューを使用してくださいdu

du -s /*

その結果、各パラメータのサイズ、つまり上記の例の各ルートフォルダサイズが印刷されます。

しかも、どちらも牛に似た一種の栄養duそしてBSDdu深さが制限されることがあります(しかし、POSIXはduできません!):

  • 牛に似た一種の栄養(Linux、...):

    du --max-depth 3
    
  • BSD(アップルシステム、...):

    du -d 3
    

これは制限出力表示深さ3で。もちろん、計算され表示されるサイズは依然として全体の深さの合計です。しかし、それにもかかわらず、表示の深さを制限すると、計算速度が大幅に向上します。

もう1つの便利なオプションは-h(GNUとBSDの単語ですが、POSIXではなく再び言うdu)「人が読める」出力(KiB、MiBなど)です。など。)。

答え4

ファイルシステムで最大のファイルを見つけるには常に長い時間がかかります。定義によると、大容量ファイルを見つけるには、ファイルシステム全体を参照する必要があります。唯一の解決策は、すべてのシステムでcronジョブを実行してファイルを事前に準備することです。

別の点は、duのxオプションがduが他のファイルシステムへのマウントポイントをたどるのを防ぐのに役立ちます。つまり:

du -x [path]

私が通常実行する完全なコマンドは次のとおりです。

sudo du -xm / | sort -rn > usage.txt

この-mメソッドは結果をメガバイト単位で返し、sort -rn結果の最大数を最初にソートします。その後、エディタでUsage.txtを開くと、最大のフォルダ(/で始まる)が一番上に表示されます。

関連情報