ディスクスペースがなくなった:スペースを占有しているものを見つけるにはどうすればよいですか?


81

16.04を実行しているサーバーの1つで問題が発生しました。ディスク容量が残っていません。

何がスペースを占有しているのかわかりません。現在のディレクトリサイズを一覧表示するコマンドがあるので、すべてのスペースを占有してディレクトリ内を移動できますか?


1
ディスク使用状況アナライザーを確認してください
Pranal Narayan

@PranalNarayan GUIがサーバー上にないので、私は恐れています:(
カール・モリソン

1
ええと、今私が探しに行ったところ、このbugs.launchpad.net/ubuntu/+source/baobab/+bug/942255が見つかりました。
サム

1
wrt "GUIはありません。サーバーです":GUIアプリをインストールして(サーバーとサポートライブラリに満足している場合)、X11-tunnelled-through-SSHを介してローカル画面で使用できます。export DISPLAY=:0.0; ssh -Y <user>@<server> filelightfilelightお好みのツールに交換してください)。もちろん、空き領域がまったくないため、ツールをまだインストールしていない場合は、とにかく別のものを使用する必要があります!
デビッドスピレット

4
@DavidSpillett前述のように、サーバーにはスペースが残っていません。だから何もインストールできません。
カールモリソン

回答:


93

Linuxでいつものように、仕事を成し遂げる方法は複数あります。ただし、CLIから実行する必要がある場合は、これが推奨される方法です。

ルートとして、またはsudoでこれを実行することから始めます。

du -cha --max-depth=1 / | grep -E "M|G"

grepは、返される行をメガバイトまたはギガバイトの範囲の値で返される行に制限します。ディスクが十分に大きい場合は、追加|Tしてテラバイトの量を含めることもできます。あなたは上の若干の誤差が出る場合があり/proc/sysおよび/または/dev、それらは、ディスク上の実際のファイルではないからです。ただし、ルート内の残りのディレクトリに有効な出力を提供する必要があります。最大のものを見つけたら、そのディレクトリ内でコマンドを実行して、原因を絞り込むことができます。たとえば、/var最大の場合は次のようにできます:

du -cha --max-depth=1 /var | grep -E "M|G"

それはあなたを問題の子供たちに導くはずです!

追加の考慮事項

上記のコマンドは確かにトリックを実行しますが、以下のコメントには建設的な批判がありました。

  1. grep提供私はあなたが絶対にあなたがアップしたいと思い現れてK大切なディレクトリのいずれかをしたくない場合は、ディレクトリやファイルの名前は、資本GまたはMを持っている場合は時折、「K」の値が返されるにつながる可能性正規表現ゲームをより創造的で複雑にする。例えばgrep -E "^[0-9\.]*[MG]"
  2. どのドライブが問題であり、その上に検索に含めて時間を無駄にしたくない他のマウントされたドライブがある場合は-xduコマンドにフラグを追加できます。そのフラグのマニュアルページの説明:

      -x, --one-file-system
          skip directories on different file systems
    
  3. duコマンドの出力をソートして、最大値が下になるようにすることができます。これをコマンドの最後に追加するだけです:| sort -h


これはまさに私がしていることです。
軌道上の明るさのレース

5
多分、G |あなたのgrepが創造的な正規表現は、オプションのドット+ Mで数字を打つ必要があり、あまりにも自分の名前の文字MまたはGとの任意のフォルダを返します"^[0-9]*[.]*[0-9]*[MG]"
Xen2050

4
問題の原因が1つのドライブであることがわかっている場合は、-xオプションを使用して、duその1つのドライブ(コマンドラインで提供)にとどまることができます。パイプスルーsort -hして、メガバイト/ギガバイトの人間が読める値を正しくソートすることもできます。私は通常、--max-depthオプションをオフにして、この方法でドライブ全体を検索し、適切にソートして一番下にある最大のものを取得します。
ミュザー

1
@alexis私の経験では、興味のあるマウントポイントの下に他のゴミがマウントされることがあり(特にそうである場合/)、使用する-xことで物を数えないことが保証されます。あなた/がいっぱいで、別々にマウントされている/homeか何かがある場合-xは、無関係なものを取り除くために使用する必要があります。念のため、いつでも簡単に使用できると思います。
ミューザー

1
並べ替えがある場合、grepは必要ありません。
OrangeDog

77

ncduこれに使用できます。とてもうまくいきます。

sudo apt install ncdu

ここに画像の説明を入力してください


34
私は実際に正常にこのプログラムを使用するように私は私が笑それをインストールすることはできません空間が残っていないがために、自分自身を蹴ってる
カール・モリソン

@KarlMorrison私はいくつかの可能な解決策を見て、別のコンピューターのsshfs上にマウントしてそこにncduを実行するだけです(すでにsshサーバーがあると仮定して..)-またはsshサーバーがない場合は、あなたがすることができます逆に、別のサーバーにncduをインストールし、sshfsでマウントし、マウントからncduを実行します(サーバーに既にsshfsがある場合)-または、どちらも持っていない場合、... ncduが単一のスクリプトの場合、ちょうどできcurl http://path/to/ncdu | sh、インメモリIO stdinキャッシュで実行されますが、それには多少の運が必要です。おそらくラムディスクを作成する方法もあります
ハンシェンリック

@KarlMorrisonまたはLinuxのライブイメージを起動して、そこにインストールできます。

sudo ncdu /コマンドラインからタイプをインストールしたら。sudosudoを入れないと、rootが所有するフォルダーのサイズを報告し/ません。また、タイプしないと、現在のフォルダーからしか報告されないためです
Max Carroll

19

このコマンドを使用します

sudo du -aBM -d 1 . | sort -nr | head -20

/奇妙な場所に何かを置いたので、時々ディレクトリから実行する必要があります。


動作するように+1を与える!ただし、TopHatsソリューションを使用すると、実際にドライブをすばやく読み取ることができます。
カールモリソン

-d 1スイッチを使用せずに(および通常はをless使用してhead -20)これを行うと、すべてのファイルとディレクトリが完全に再帰的に列挙されたリストを取得できます。そうすれば、ディレクトリが多くのスペースを占有しているのを見ると、スクロールダウンして、スペースの大部分が実際にその中の特定のファイルまたはサブディレクトリによって占有されているかどうかを確認できます。削除する必要のないファイルやディレクトリを見つけて、スペースを解放するのに良い方法です。保存したくないと思うものが表示されるまで下にスクロールし、削除して繰り返します。
イルマリカロネン

@KarlMorrisonは速く読みませんsortが、出力が始まる前に出力が完了するのを待つだけです。
ムル

@muruああ大丈夫。しかし、情報がもっと早く得られるので、それがより良い用語であるなら、私はより速く横断を開始できます!
カールモリソン

13

スペースの大部分を占めるディレクトリを見つける方法については、すでに多くの良い答えがあります。多数の小さなファイルではなく、少数の大きなファイルが主な問題であると信じる理由がある場合は、のようなものを使用できますfind / -size +10M


11

私はUbuntuを知らないので、答えを確認することはできませんが、昔のunix管理者としての経験に基づいてここに答えを投稿します。

  1. スペースが不足しているファイルシステムを見つける

    df -h
    

    すべてのファイルシステム、サイズ、および空き容量がリストされます。十分なスペースがあるファイルシステムを調査する場合にのみ時間を無駄にします。ファイルシステム全体が/ myfilesystemであると仮定します。/ myfilesystemsのサブディレクトリにファイルシステムがマウントされている場合は、df出力を確認してください。その場合、次のspepsをこの状況に適合させる必要があります。

  2. このファイルシステムのファイルがどのくらいのスペースを使用しているかを調べる

    du -sh /myfilesystem
    

    -xオプションを使用して、このファイルシステムのメンバーであるファイルのみが考慮されることを保証できます。一部のUnixバリアント(Solarisなど)は、duの-xオプションを認識しません。その後、いくつかの回避策を使用して、ファイルシステムのduを見つける必要があります。

  3. 次に、表示されているファイルのduが、dfによって表示される使用済みスペースのサイズとほぼ同じかどうかを確認します。その場合、クリーンアップするために/ myfilesystemファイルシステムの大きなファイル/ディレクトリの検索を開始できます。

  4. ディレクトリ/.../dirの最大のサブディレクトリを見つけるには

    du -sk /.../dir/*|sort -n
    

    -kオプションを指定すると、duは単位なしでキロバイト単位で出力します。一部のシステムではこれがデフォルトの場合があります。その後、このオプションを省略できます。最大のファイル/サブディレクトリが出力の下部に表示されます。

  5. 不要になった大きなファイル/ディレクトリが見つかった場合は、適切な方法で削除できます。出力の上部にある小さなディレクトリを気にしないでください。削除しても問題は解決しません。それでもスペースが足りない場合は、リストの下部に表示される大規模なサブディレクトリで手順4を繰り返します。

しかし、duの出力がdfによって表示される使用可能なスペースとほぼ等しくない場合はどうなりますか?

du出力が大きい場合、別のファイルシステムがマウントされているサブディレクトリを見逃しています。du出力がはるかに小さい場合、somファイルはdu inspectsのどのディレクトリにも表示されません。彼の現象にはさまざまな理由があります。

  1. 一部のプロセスは、既に削除されたファイルを使用しています。したがって、このファイルはディレクトリから削除され、duはそれらを見ることができません。しかし、ファイルシステムでは、プロセスがファイルを閉じるまで、それらのブロックはまだ使用中です。関連するプロセスを見つけて(たとえばlsofを使用して)、このファイルを強制的に閉じます(たとえば、アプリケーションを停止するか、プロセスを強制終了する)。または、単にマシンを再起動します。

  2. 親ディレクトリの1つに別のファイルシステムがマウントされているため、もう表示されていないディレクトリにファイルがあります。したがって、ファイル/ myfilesysem / subdir / bigfileがあり、別のファイルシステムを/ myfilesystem / subdirにマウントすると、このファイルは表示されなくなり、

    du -shx /myfilesystem 
    

    / myfilesystem / subdir / bigfileのサイズを含まない値を報告します。そのようなファイルが存在するかどうかを確認する唯一の方法は、/ myfilesystem / subirをアンマウントし、

    ls -la /myfilesystem/subdir 
    

    ファイルが含まれている場合。

  3. lsコマンドからは見えないディスク上のスペースを使用/予約する特別なタイプのファイルシステムがあります。これを表示するには特別なツールが必要です。

duコマンドを使用したこの体系的な方法の他に、使用できる他の方法がいくつかあります。したがって、findコマンドを使用して、指定した値より大きいファイルを検索したり、指定した値より大きいファイル、新しく作成されたファイル、または特別な名前(* .log、core、*など)を持つファイルを検索できます.trc)。ただし、正しいファイルシステムで作業するには、1で説明したように常にdfを実行する必要があります


ビジーなサーバーでは、常にアンマウントすることはできません。ただし、上位ディレクトリを一時的な場所にバインドマウントすることができ、他のマウントは含まれず、隠しファイルへのアクセスが許可されます。
ザンリンクス

systemdの前に、マウントの失敗によって/マウントがゴミでいっぱいになることがよくありました。たとえば、USBドライブを接続せずに/ mnt / backupにバックアップを書き込みます。次に、これらのジョブユニットにマウント要件があることを確認します。
ザンリンクス

@ZanLynxありがとう、以前はバインドマウントのことを聞いたことがありません
-miracle173

@ZanLynx:忙しいサーバーだけではありません。/tmp別のファイルシステム(たとえばtmpfs)にあり/tmp、別のファイルシステムへのマウントポイントになる前に何かがファイルを作成したと想像してください。現在、これらのファイルはルートファイルシステムに存在し、マウントポイントによってシャドウされており、リブートモード(処理しない/etc/fstab)を再起動するか、または提案するようにバインドマウントを行わないとアクセスできません。
デビッドフォースター

9

コマンドを使用しないことに興味がある場合は、Filelightを使用してください。

任意のフォルダのディスク容量を使用しているものをすばやく視覚化できます。

ここに画像の説明を入力してください


これは私がSSHで接続するサーバーで、GUIはありません。
カールモリソン

@KarlMorrison sshを介してGUIプログラムを実行する方法があると思いますが、それは後でパッケージをインストールするスペースができたときのアイデアです
-Xen2050

@Davidそうそう、私はそこから抜け出そうとしています。以前使用していた別のプラットフォームで必要でした。そのコメントを修正します。

@Karlはい、Xがすでにクライアントにインストールされていれば簡単です。ssh -X <your host>コマンドラインからプログラムを実行します

@MarkYisriポイントは、プログラムとその依存関係をインストールする必要があるということです。また、Filelightの場合、少なくともKDElibsとQtが必要ですが、これらはそれほど小さくありません。たとえば、filelight Ubuntuパッケージについてはこのページを参照してください。依存関係の数に注意してください。
ルスラン


3

私はこれをよく使います

du -sh /*/

その後、大きなフォルダーを見つけたら、それに切り替えてさらに調査します

cd big_dir
du -sh */

必要に応じて、自動的にソートすることもできます

du -s /*/ | sort -n

2

実際には答えではありませんが、補遺です。

スペース不足のため、@ ermanの回答からncduをインストールできません。

いくつかの提案

  • sudo apt clean allダウンロード済みのパッケージを削除します。安全
  • sudo rm -f /var/log/*gz1週間または2週間以上経過したログファイルを削除します。新しいログまたは現在のログは削除されません。最も安全
  • sudo lsof | grep deleted開いているすべてのファイルをリストしますが、ディスクから削除されたファイルまでフィルタリングします。かなり安全
  • sudo rm /tmp/*いくつかの一時ファイルを削除します-何かがそれらを使用している場合、プロセスを混乱させる可能性があります。本当に安全ではない

`lsof oneは次のような行を返します:

server456 ~ $ lsof | grep deleted
init          1          root    9r      REG              253,0  10406312       3104 /var/lib/sss/mc/initgro                        ups (deleted)
salt-mini  4532          root    0r      REG              253,0        17     393614 /tmp/sh-thd-1492991421                         (deleted)

init行にはあまりできませんが、2行目は、salt-minionが開いているファイルが削除されていることを示しており、サービスの再起動によってすべてのファイルハンドルが閉じられるとディスクブロックが返されます。

ここでのその他の一般的な容疑者には、syslog / rsyslog / syslog-ng、squid、apache、または「重い」サーバーが実行するプロセスが含まれます。


2

Filelightのようなツールの出力は特に価値があると思いますが、あなたの場合のように、サーバーには通常GUIがインストールされていませんが、duコマンドは常に利用可能です。

私が普段していることは:

  • du出力をファイルに書き込みます(du / > du_output.txt);
  • マシンにファイルをコピーします。
  • 出力を一時ディレクトリDuFSに「マウント」するために使用しduます。DuFSFUSEを使用して、du出力に従って仮想ファイルシステムを作成します(=ファイルは実際には作成されず、すべて偽物です)。
  • この一時ディレクトリでFilelightまたは別のGUIツールを実行します。

免責事項:私が書いたのはdufs、ヘッドレスマシンのディスク領域を占有しているものを見つける必要があるためです。


-n du_output.txt
Zan Lynx

使用済みスペースのグラフィカル表示がより直感的になりました。
マッテオイタリア

-1

@TopHatに似ていますが、名前にM、G、またはTが含まれるファイルをフィルタリングします。最初の列のサイズを見逃すとは思いませんが、ファイルに創造的な名前を付けない限り、ファイル名と一致しません。

du -chad 1 . | grep -E '[0-9]M[[:blank:]]|[0-9]G[[:blank:]]|[0-9]T[[:blank:]]'

ここで説明しコマンドラインスイッチは、cまたはaが何をしたのかわからなかったためです。

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