ディスク空き容量あるにも関わらず Linux サーバーで No space left on device エラーが発生したときに解決した方法をご紹介します。inode が枯渇していたのが原因でした。
ディスク使用率は 76% で空き容量は 3.7G と No space left on device エラーが発生するほどではない。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda2 16G 12G 3.7G 76% /
tmpfs 499M 0 499M 0% /dev/shm
原因がわからなくてググってみたら、
色々調べているうちに、容量ではなくて inode が足りない説が浮上した。inode とは、UNIX 系 OS で使用されるファイルシステムの名称で、ファイルの所有者やアクセス権、サイズ、作成日時、場所などを管理しているもののことだそうだ。
残り inode は df コマンドに -i をつければ確認できるらしく、叩いてみると…ビンゴである。
という記事を見つけました。
早速やってみたら、ビンゴ。inode 枯渇問題でした。
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda2 1048576 1048576 0 100% /
tmpfs 127541 1 127540 1% /dev/shm
以下のスクリプトで inode を多く消費しているディレクトリを特定できました。
echo "==== `pwd` ====" ; for i in `ls -1`;do echo -n "## $i ### " ; echo "(`find ./$i -type f |wc -l`)" ;done | sort -r
ルートディレクトリからひたすら上記のスクリプトを実行しては、下の階層のディレクトリへ cd で移動してを繰り返して、問題のディレクトリを特定していきます。
ぼくが No space left on device エラーに遭遇したときの原因は、WordPress プラグイン wp-file-cache のキャッシュファイルが 88万件ちかく存在していたせいでした。
以下の記事の通り wp-file-cache プラグインには消えてもらいました。
ファイル削除を終えて df -i で IUse% を確認すると 100% から 15% に下がっていました。無事に inode が枯渇問題を解決でき、No space left on device エラーも発生しなくなりました。
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda2 1048576 153319 895257 15% /
tmpfs 127541 1 127540 1% /dev/shm
以上、No space left on device エラーから inode 枯渇を特定して、無事に解決に至った現場からお送りしました。