天運は我に無いけど原因はinodeにあった

nginxとかmod_disk_cacheとかでまぁ何でも良いんですが、キャッシュファイル置き場を/dev/shmにしている時に

No space left on device

ってメッセージがエラーログに出だしたらこれから先を読めば解決!!原因はinode溢れに有り。


dh -ihと叩けば恐らく100%近くになっている筈です。
↓こんな感じになっている事かと思われますよ。泣けますねぇ。

$ df -ih /dev/shm
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
tmpfs                   129K    129K       1  100% /dev/shm

※この場合13万強ファイル置いたら死亡ですね。

という訳でファイル消す訳でもなく分割するでもなくinodeの上限増やしてしまえ!というのがこれから↓です。

※作業前にバックアップは忘れずにね!

cp -ip /etc/fstab /etc/fstab.`date +%Y%m%d`

/etc/fstabの中に↓の行が有るかと思うんですが、

tmpfs                   /dev/shm                tmpfs   defaults        0 0

こいつのdefaultの後にnr_inodesって書いて増やしたい分書いてやればOKです。(0って書くと無限になるみたいです。)
↓256kにする場合はこう書いてぇ。

tmpfs                   /dev/shm                tmpfs   defaults,nr_inodes=256k        0 0

そしてmountし直し。増えた!!

# umount /dev/shm
# mount /dev/shm
# df -ih /dev/shm/
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
tmpfs                   256K       1    256K    1% /dev/shm

nginxとかapacheで使っている場合は握っててumount出来ないので

service nginx stop
umount /dev/shm
mount /dev/shm
service nginx start

の流れでやりましょう。

ちなみに/dev/shmの中umountした時点で全部綺麗になっちゃうから注意してね!