いつの間にかWebサーバーのディスクがいっぱいだった

明日で切れるサーバー証明書を更新したとき、ふとWebminの画面を見たらディスクが100%使い切っていた。 なんでだ?

とりあえず /var/logの下のログを消したり、/usr/src や /usr/ports を消してみたものの、それでも使用率96%。
いったい何がそんなに圧迫しているんだ?

ディレクトリやディスクの使用量を調べるには

duは、ファイルやディレクトリ(サブディレクトリを含む)の使用量を調べるコマンドだ。引数なしで実行すると、カレントディレクトリに存在するファイルおよびサブディレクトリの総合計をKbytes単位で表示する。サブディレクトリがあれば、その合計も別に表示する。引数として調べたいディレクトリを指定すると、そのディレクトリの使用量が表示される。

なるほど。 やってみよう。

root@www:/ # df
Filesystem  1K-blocks     Used   Avail Capacity  Mounted on
/dev/ada0p2  57692028 51121236 1955432    96%    /
devfs               1        1       0   100%    /dev
root@www:/ # du -sh /*
8.0K    /COPYRIGHT
1.4M    /bin
244M    /boot
3.5K    /dev
4.0K    /entropy
3.2M    /etc
  0B    /home
 11M    /lib
296K    /libexec
4.0K    /media
4.0K    /mnt
4.0K    /net
4.0K    /proc
 10M    /rescue
108K    /root
6.8M    /sbin
  0B    /sys
 32K    /tmp
4.0G    /usr
 43G    /var
root@www:/ # du -sh /var/*
4.0K    /var/account
 12K    /var/at
 12K    /var/audit
4.0K    /var/authpf
 23M    /var/backups
 34M    /var/cache
8.0K    /var/crash
 16K    /var/cron
6.2G    /var/db
4.0K    /var/empty
4.0K    /var/games
4.0K    /var/heimdal
 78M    /var/log
4.0K    /var/mail
8.0K    /var/msgs
4.0K    /var/preserve
 80K    /var/run
4.0K    /var/rwho
 37G    /var/spool
8.0K    /var/tmp
 28K    /var/unbound
 28K    /var/yp
root@www:/ # du -sh /var/spool/*
 37G    /var/spool/clientmqueue
4.0K    /var/spool/dma
4.0K    /var/spool/lock
4.0K    /var/spool/lpd
4.0K    /var/spool/mqueue
4.0K    /var/spool/opielocks
8.0K    /var/spool/output

/var/spool/clientmqueueだけで37GBも消費している。 なんだっけ、コレ?

clientmqueueディレクトリ以下に吐き出される大量ファイルの対処法 | A Day In The Boy's Life

clientmqueueディレクトリは、SendmailなどのMTAが正常にメールが送信できなかった場合に一時的に溜め込まれるメールボックスのようなものです。
MTAはこの、clientmqueueディレクトリにメール(ファイル)がある限り再送しようと試みます。
 
さて、私の管理しているサーバー(RedHatES4)では特にSendmailなどのMTAは動かしていないのですが、このclientmqueueディレクトリ以下に大量のファイルが吐き出されていました。
 
原因は、cronで動かしていたバッチプログラムにエラーが発生しており、その標準エラー出力がメールとして信されるようになっていたのですが、MTAの設定はしていなかったためメールが送信できずにclientmqueueにメール(ファイル)が保存されたという具合です。

なるほど。 送信されなかったメールが溜まってるのね。 Webサーバーでメーラーは動かしてないしね。
サクッと消してしまいましょう。

root@www:/ # mv /var/spool/clientmqueue /var/spool/clientmqueue.0
root@www:/ # ls -l /var/spool
total 15768
drwxrwx---  2 smmsp  smmsp   16070144 Mar 31 18:15 clientmqueue.0
drwxrwx---  2 root   mail         512 Jul 21  2017 dma
drwxrwxr-x  2 uucp   dialer       512 Mar 26 07:01 lock
drwxr-xr-x  2 root   daemon       512 Jul 21  2017 lpd
drwxr-xr-x  2 root   daemon       512 Jul 21  2017 mqueue
drwx------  2 root   daemon       512 Jul 21  2017 opielocks
drwxr-xr-x  3 root   daemon       512 Jul 21  2017 output
root@www:/ # mkdir /var/spool/clientmqueue
root@www:/usr # chown smmsp:smmsp /var/spool/clientmqueue
root@www:/usr # chmod 770 /var/spool/clientmqueue
root@www:/usr # ls -l /var/spool
total 15772
drwxrwx---  2 smmsp  smmsp        512 Mar 31 18:15 clientmqueue
drwxrwx---  2 smmsp  smmsp   16070144 Mar 31 18:15 clientmqueue.0
drwxrwx---  2 root   mail         512 Jul 21  2017 dma
drwxrwxr-x  2 uucp   dialer       512 Mar 26 07:01 lock
drwxr-xr-x  2 root   daemon       512 Jul 21  2017 lpd
drwxr-xr-x  2 root   daemon       512 Jul 21  2017 mqueue
drwx------  2 root   daemon       512 Jul 21  2017 opielocks
drwxr-xr-x  3 root   daemon       512 Jul 21  2017 output
root@www:/usr # rm -R /var/spool/clientmqueue.0
root@www:/var/spool # du -sh /*
8.0K    /COPYRIGHT
1.4M    /bin
244M    /boot
3.5K    /dev
4.0K    /entropy
3.2M    /etc
  0B    /home
 11M    /lib
296K    /libexec
4.0K    /media
4.0K    /mnt
4.0K    /net
4.0K    /proc
 10M    /rescue
108K    /root
6.8M    /sbin
  0B    /sys
 32K    /tmp
4.0G    /usr
6.3G    /var
root@www:/var/spool # df
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/ada0p2  57692028 12654308 40422360    24%    /
devfs               1        1        0   100%    /dev
root@www:/var/spool #

一気に使用率が24%まで下がりました。 今後については経過観察で、使用率の増加スピードが早すぎるなら抜本的に対策します。