私のディスクスペースを何が食べていますか?


13

Linux Mint 14 Nadiaを実行しています。Linuxパーティションには10Gがあります。システムが起動すると、du80%の使用率が報告されます。その後、使用率は100%に達するまでゆっくりと増加し、システムは使用できなくなります。(それは日または週のオーダーで発生する可能性があります)。再起動後、使用率は80%にリセットされます。

何よりも奇妙なのduは、変化がないことです。

これらのコマンドの出力を次に示します(Windowsおよび外部ドライブのパーティションは省略されています)。

# --- Just after reboot ---

$ df -h     
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  7.3G  2.0G  80% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M  288K  437M   1% /run/shm
none            100M   12K  100M   1% /run/user

$ sudo du -x   -d1 -h /
186M    /opt
512M    /var
11M /sbin
556K    /root
1.3G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
60K /tmp
9.1M    /bin
4.0K    /srv
7.3G    /            # <-- note this


# --- After some time ---

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  9.1G  199M  98% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M   27M  411M   7% /run/shm
none            100M   28K  100M   1% /run/user

$  sudo du -x   -d1 -h /
186M    /opt
511M    /var
11M /sbin
556K    /root
1.4G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
520K    /tmp
9.1M    /bin
4.0K    /srv
7.3G    /              # <-- note this

(注:休止状態を使用します。休止状態後も使用率は変わりません。再起動後は80%にリセットされます。)

スペースを食べるものを追跡するにはどうすればよいですか?

私はこの質問を読みました。私はまだ暗闇の中にいます。この動作の原因となっているプログラムを見つけるにはどうすればよいですか?

編集後:それを見つけました。スペースは、によって表示されるカーネルログによって要求されdmesgます。私のマシンは毎秒5回の割合でエラーを生成するので、いっぱいになります。(これはこのバグに関連しています。)同様の問題を抱える将来の読者に-目に見えないゆっくりとしたディスク領域の充満du- dmesg原因の検索を試みることを忘れないでください。


1
大きなファイル|ディレクトリを見つけるにはncdu、プレーンよりも好みduます。何でもできるようになる前に、ディレクトリツリー全体をスキャンします。特定のパスを渡すこともできます(例:ncdu /varまたは単にncdu ~
Blacklight Shining

このサイトにはすでにいくつかの適切な 回答があり ます。
スパーホーク

回答:


15

の繰り返し実行

sudo du -x   -d1 -h /

(ディレクトリツリーの下に)スペースが消費されている場所が表示されます。それはおそらく、さらなる調査なしに、どのアプリケーションがそれを引き起こしているのかを説明しています。

非表示のファイル

duこれらのファイルが表示されない場合は、削除されたファイルが考えられます。ファイル(またはその名前、つまりディレクトリ内のエントリ)は、ファイルがまだ使用されているときに削除できます。このファイルを指す有効なファイル記述子がある限り、それはボリューム上のスペースをカバーします(空のファイルでない場合...)。

cat >file &
ls -l file
rm file
ls -l file
# PID of cat is 19834
ls -l /proc/19834/fd
lrwx------ 1 hl hauke 64 11. Feb 19:16 0 -> /dev/pts/0
l-wx------ 1 hl hauke 64 11. Feb 19:16 1 -> /crypto/home/hl/tmp/file (deleted)
lrwx------ 1 hl hauke 64 11. Feb 19:15 2 -> /dev/pts/0

これらのファイルは次の場所にありますfind

find /proc/ -mindepth 3 -maxdepth 3 \
-regex '/proc/[1-9][0-9]*/fd/[1-9][0-9]*' -type l -lname '*(deleted)' \
-printf '%p\n     %l\n' 2>/dev/null

問題の原因となるのは、1つの大きなファイルまたは小さなファイルの束です。私のシステムには現在、このようなファイルが約30個あります(プロセスは5つだけです)。ls -lはこれらのファイルのサイズを示していますが、からこの値を取得することはできないようfindです。

プロセスを強制終了すると、スペースはdf再びファイルシステム()で使用できるようになります。


これは私の質問には対応していません。 du消費されたスペースに変化がないことを報告します:開始時に7.3G、時間が経過した後に7.3G df開始時に7.3Gが無料で、時間が経過すると最大10Gになると報告されています。の問題が見つかりませんdu
アリー

@Arry確かに、私は速すぎます。
Hauke Laging 2014

8

のようなものを使う

lsof -s | grep deleted | sort -k 8

削除されたファイルを開いたままにしているプロセスを確認します。重要なフィールドは、2番目(PID)、8番目(最後から3番目、ファイルサイズ)です。

(重複する行に注意を払い、それらを2回カウントしないでください。PIDとファイルパス(最後のフィールド)またはiノード番号(2番目から最後のフィールド)を確認してください。)

その後、原因と思われるプロセスを見つけた場合は、その修正方法を確認できます。


良い提案ですが、私のマシンでは、このコマンドは2kのサイズの開いた削除済みファイルを2つだけ報告します。これは、時間の経過とともにいくつかの浮遊プロセスによって消費された2.7Gとはかなり異なります。
アリー

これは素晴らしい提案であり、確かに親の質問と同様の問題を解決するのに役立ちました。dfコマンドとduコマンドの間に大きな違いがありました。私の特定のケースでは、ローテーションログとログを転送するサービス(この例ではlogstash)があります。logstashサービスは、削除された場合でも、ローテーションされたログを開いたままにしていました。これにより、duとdfの間に矛盾が生じていました。logstashサービスを再起動すると、ディスク領域が正しく表示されました。
aemus

私は、無期限に増大し、最終的にはディスクをいっぱいにする追加専用ファイルを作成するプロセスを持っていました。次に、そのファイルをrmすることを決定しましたが、プロセスはファイル記述子を閉じなかったため、どういうわけかまだ使用されていました。プロセスを再起動してAOFサイズを制限すると、問題が解決しました。
aviggiano 2015

これにはroot権限が必要です。また、以前sudo lsof -s | grep deleted | sort -hk7は数値ソートを取得していました。-hを指定しない場合、sortは数字を使って面白い字句を実行します。
Derek

これはすごいことです。賛成票
Techie

4
find / -size +10000k -print0 | xargs -0 ls -l -h

10メガバイトの+よりも多く充填された再帰的にものを見つけるためにこれを使用して/(ルート)、及びでたくさんの詳細とそれを表示ls -lの中でxargs。1000000(2つの余分なゼロ)を書き込むと、たとえば1GB +を取得できます。

du / -h --max-depth=1 | sort -h

また、duを使用して、手動で掘り下げることもできます。


1

これが発生するときはいつでも、私は常に特定のサブディレクトリから私の焦点を開始します。ほとんどのLinuxディストリビューションが準拠しているFHS構造は、これを念頭に置いて設計されています。

最初に/var、次にを見てください/home

$ sudo du -x -d1 -h /var  | sort -hr`

$ sudo du -x -d1 -h /home | sort -hr`

どちらの場所のサブディレクトリにも焦点を絞ることができます。そこを調べ尽くしたら、私は通常に移動し/root、最後に残りのサブディレクトリをに移動し/ます。

Red Hatベースのディストリビューションの場合、yum更新の実行に使用するキャッシュが大量のスペースを消費している可能性があります。このコマンドを使用して、それをクリアできます。

$ yum clean packages

を使用aptする他のディストリビューションでも同様のことができますapt-get clean

私はこのコマンドを/ディレクトリの最上位で実行することもできます。この場所は、ときどきログファイルのソースになることがあります。

$ ls -la /

ドットファイルには特に注意してください。.blahたとえば、という名前のもの。



0

ほぼ同じ状況です。

私の場合、理由はVMwareでした。同じマシン上の他のVMwareの1つで、ディスク領域を消費しました。そのため、ディスク領域の使用率は100%でした。

近隣のVMwareから大きなファイルを削除した後、それは正しく機能しています。

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