プロが教えるわが家の防犯対策術!

RedhatLinux 9 にapacheとphpとmysql,およびoscommerceを組み込んで
ホームページおよびオンラインショップとして利用しています。
150GBのディスクに /, /proc, /home などのパーティションを切って
Web用のデータ(HTMLファイルやPHPプログラム)以外のものを/ パーティション(10GB)
に入れています。


その / パーティションの容量が急増し、原因がわからず悩んでおります。

先月末にoscommerceが止まってしまい、調べてみると/ の使用率が100%に
なっていました。そこで不要なファイルを削除して91%程度に減らしたのですが、
数日以内にまた100%になってしまいました。
dfコマンドで一時間ごとに/ の使用容量を出力させて記録してみると、
一時間当り1MB以上、一日当り10MB以上も増加していました。

それと同時に、 /の直下にある同じパーティションのディレクトリとファイルを
すべてdu -sで一時間ごとにチェックして見ましたが、/var以外は増減なし。
増加していた /varにしても増加率は一日で1MB少し程度でした。

スパースファイルの問題かなと思って、ユーザーnfsnobodyを削除し、
(数十MBもあった)lastlogを削除してみたのですが、状況は変わりません。

また、先月末頃に、1TGのUSB外付けハードディスクを
mount -t auto /dev/sda1 /mnt/harddisk
でマウントさせて、そこを当面不要なアーカイブや古いログファイルの置き場
として利用しているので、これが問題なのかと思い、試しにアンマウントして
2時間ほど様子を見ましたが、やはり増加のペースは変わりません。
(購入時そのままで利用しているので、ファイルシステムはfat32かntfsだと思います)

これ以上やれることが思い当たらず現在お手上げ状態です。
何か、これが原因だろう、とか、ここを調べてみたらどうだ、
ということがおわかりでしたらご指導お願いいたします。

A 回答 (3件)

再起動の前後で / パーティションの使用容量は同じでしょうか。


また、df で調べた / パーティションの使用容量と
du -s -x / で調べた / パーティションの使用容量は、
ほぼ同じになっているでしようか。

再起動で使用容量が元に戻ったり、df と du で使用容量が
違っていたりする場合は、使用中の削除されたファイル(すみません。
うまく表現できません)があると思われます。

例えば、プログラムで foo ファイルを開いたまま、その foo ファイルを
削除すると、他のプログラムからは foo ファイルは見えなくなりますが、
foo ファイルを開いたプログラムでは、そのファイルを閉じるまでは
読み書きができます。このような状態にあるファイルは、df では
使用容量に含まれますが、du では含まれません。また、再起動すると
ファイルを使用していたプログラムが終了するため、中途半端な
状態にあったファイルが開放されます。

ひょっとすると、このようなファイルが存在しているのかも
しれません。
    • good
    • 0
この回答へのお礼

>例えば、プログラムで foo ファイルを開いたまま、その foo ファイルを
>削除すると、他のプログラムからは foo ファイルは見えなくなりますが、
>foo ファイルを開いたプログラムでは、そのファイルを閉じるまでは
>読み書きができます。このような状態にあるファイルは、df では
>使用容量に含まれますが、du では含まれません

ありがとうございます!
そういうことがあるとは全く知りませんでした。

その後、もう一度さらに不要なファイルを減らしてから、サーバーごと
再起動してみると、Apacheやphpは問題ないのに、MySQLだけがエラー
をだして動きませんでした。
エラーコードで調べてみると、あるデータテーブルの一部が壊れていると
言うことだったので、そのテーブルを修復コマンドで修復したところ
無事動くようになり、謎の容量急増もなくなりました。

直ったのは良いが、あの容量の急増はなんだったのか不明なので、不安で
すっきりしない気分でしたが、t-okura様の回答のおかげで重要なヒントが
つかめました。
たぶん、前回容量オーバーのとき、MySQLのプロセスがデータベースを
中途半端に開いた状態で止まってしまい、そのような{見えない」ファイル
ができてしまったのかもしれませんね。

お礼日時:2008/11/21 18:22

何がディスク容量を消費しているのかわからないということですよね。



他の方も回答されているように、すでに削除されたファイルを開いているプロセスがあると、duで調べた使用量と、dfで調べた使用量が違う状態になります。

例えば、以下のようにしてみてください。
lsof | grep deleted
削除されたファイルを開いているプロセスがあれば出てきます。
lsofが入ってないとだめですが。

参考URL:http://oshiete1.goo.ne.jp/qa3122887.html
    • good
    • 0
この回答へのお礼

ありがとうございます!
dfはduの簡易版のようなものだとばかり思っていたので、
まさかそんな違いがあるとは夢に思わずとても勉強になりました。

lsof 便利そうなコマンドですね。
あいにく今回のサーバーには入っていませんでしたが。
こんど、探して入れておこうと思います。

お礼日時:2008/11/21 18:28

・/の増加は1日あたり10MB以上


・増加しているのは/varのみで、その増加率は1日あたり1MB程度

上記が完全に矛盾している事はご質問者様も理解されているかと思います。
何処かに見落としている部分があるように思えますので、個々のディレクトリをdu -sでチェックするのではなく、/全体をdu -h等で適当なファイルにリダイレクトし、後日同じコマンドを別ファイルにリダイレクトした上でdiffで比較してみてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
見落としではなく、duとdfの違いだったようです。

お礼日時:2008/11/21 18:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!