Linuxファイルシステム。df&duを使用したサイズ計算の違い


8

実行するdfと、ルートデバイスがいっぱいであることが表示されます。

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  9.4G     0 100% /

inode使用方法を確認したところ、ルートデバイスに使用できるスペースはかなりあります

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1               640K    103K    538K   16% /

しかし、このduコマンドを実行すると、の2Gうち使用しただけであることが示され9.9Gます。

ip-XXX-XXX-XXX-XXX:/$ du -xh --max-depth=1
14M ./etc
4.0K ./mnt
96K ./tmp
3.5M ./bin
0   ./sys
964K ./boot
4.0K ./srv
0   ./dev
55M ./lib
25M ./root
1.1G ./usr
4.0K ./opt
846M ./var
4.3M ./sbin
23M ./home
16K ./lost+found
0   ./proc
2.0G .

それは私を夢中にさせ、面白くします。ルートディスク/がいっぱいで、サイトの機能の一部が失敗しているため、これは私たちにとって大きな問題です。

この問題の解決(および理解)を手伝ってください。

ありがとう。



あなたが言ったような@Gilles、私は走りましたdu -x /、そして、私は2Gだけが使われているのを見て、私はであるiノードサイズを計算しました160M。理解に役立ちましたが、この問題を解決したいだけです。
Rakesh Sankar、2011年

durootとして実行しましたか?それ以外の場合は、アクセスできるファイルについてのみレポートできます。
Gilles「SO-邪悪なことをやめよう」

@Gilles I as run asroot
Rakesh Sankar

ここには、ncduディスクの使用状況を視覚化するのに役立つ優れたプログラム以外に、追加するものはあまりありません。
Rob

回答:


4

* nixでファイルが削除されると、プロセスがそれらを開いている限り、ファイルはディスク上に存在し続け(ディスク領域を占有します)ます。一時ファイルを小さいサイズで作成して削除し、削除されたファイルを使用して他のプロセスが(簡単に)アクセスすることを心配することなくデータを格納することにより、一時ファイルを「保護」するためにこれを利用することはかなり一般的であるため、たとえば、一時データベースまたはマルチメディア編集セッションがこの方法で処理されている場合、削除されたファイルの容量はかなり大きくなる可能性があります。プログラムを再起動または再起動せずにシステムが(複数回)アップグレードされ、その前に開始されたプログラムによってすべての古い.soライブラリが開いたままになる場合、「失われた」スペースが多くなる可能性のある別の可能性があります。アップグレードし、まだ実行中です。

dfデバイスに割り当てられている容量を確認するだけでこれらのファイルが使用するスペースをdu確認できますが、対応するディレクトリエントリがないため、これらのファイルは確認できません。

このような「非表示」の使用済みスペースを解放できるのは、ファイルを削除したプロセスがそれらを開いたときにのみです。fuserコマンドでこれらのプロセスを見つけて終了することができます(または、多くのデーモンでは、開いているファイルを閉じて再度開くように通知するシグナルを送信します)。


おかげで、良い情報、何か(もっと)私は今日理解しました。しかし、hidden使用されているスペースを見つけるために、fuserコマンドを実行して、プロセスによって使用されているがリンクされていないすべてのファイルを表示しようとしました-見つかりませんでした。私を見つけるためのコマンドや指示はありますか?これは私が使用するコマンドですfuser -v -a /
Rakesh Sankar

隠しスペースを取り除くために再起動する必要がありましたが、これらの隠しファイルを削除するための適切な解決策が見つかりませんでした。
Rakesh Sankar、2011

1

ディスクがいっぱいになった場合、ファイルのロードを削除した場合でも、ディスクがまだいっぱいであることを再起動/再マウントするまで混乱する可能性があります。


本番サイトなので再起動できません。しかし、私はこれらの隠されたスペースを見つけ、それを取り戻すのに役立つソリューションを探しています。
Rakesh Sankar、2011年

それは本番かもしれませんが、時々再起動が唯一の答えです。それはあなたのルートディスクであり、あなたのすべてのOSがそれにあるという不幸な問題です。そのため、多くの場合、tmp、var、homeなどを再マウントできるため、他のディスク上にあることを推奨しています。OSは、ルートディスクが使用できる領域を認識しないことがより一般的です。
BugFinder


0

アプリケーションを再起動せずにスペースをクリーンアップする方法があります。詳細は次のとおりです。

  1. プロセスをfoo実行して、abc.logという名前の2 GBファイルを作成するとします。このabc.logが他のユーザーによって削除されたとしましょう。

  2. fooのpidを取得します(123としましょう)。そう/proc/123/fdで開かれたファイルディスクリプタのリストが表示されますfoo。abc.logがあるものは、削除済みとして表示されます。fdabs.logが111であるとしましょう。を実行less /proc/123/fd/111しても、2 GBのデータがすべて表示されます。

  3. を実行しますecho " " > /proc/123/fd/111。これにより、コンテンツが空の文字列で上書きされます。このコマンドを実行dfすると、abc.logをクリーニングすることにより、2 GBが回復したことがわかります。

それでおしまい。私はこれをCentOSで試してみましたが、うまくいきました。


これは知っておくと便利です。しかし、それは質問に対する答えではありません。
Isaac Rabinovitch

申し訳ありませんが、ファイルを削除したプロセスIDがわかっている場合は、ansがディスク領域のクリーンアップに向けられていました。この特定のケースでは、/ proc / [0-9] * / fd内のすべてのファイルを調べ、削除されたファイルをgrepし、上記のロジックに従う必要があります。
Kaustubh Sathe

ディスク容量のリークの原因となっているファイルが本当に気になる場合は、一度に削除したファイルを削除し、df出力を毎回確認して、この情報をログに記録します。
Kaustubh Sathe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.