UNIXを使い始めて20年近くたちますが、初めてのエラーに遭遇しました。ディスク容量が十分あるのに、ファイルを作ろうとすると No space left on device エラーが発生するのです。

# touch rarara touch: cannot touch `rarara': No space left on device

df

Filesystem 1K-blocks Used Available Use% Mounted on /dev/xvda1 8256952 6870384 1302704 85% / tmpfs 848476 0 848476 0% /dev/shm /dev/xvdf 8378368 4902356 3476012 59% /mnt </code>

これは、inode が足りなくなっていたためでした。

# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/xvda1 524288 524288 0 100% / tmpfs 212119 1 212118 1% /dev/shm /dev/xvdf 8388608 75096 8313512 1% /mnt

inodeというのは、ファイルのオーナーやパーミッションなどのメタデータを保持する領域です。ここを使い尽くすと、新たなファイルが作れなくなります。通常のファイルシステムでは、inodeの数はディスクのサイズに応じて有限です。足りなくなったら、既存のファイルを削除するしかありません。

細かいファイルをたくさん作りすぎたのでしょうか。そんなに激しい使い方をしているサーバだという認識はないのですが。df -i の結果を見ると、52万ファイル作られているということですよね。

調べ回っていたら、Capistrano による Rails のデプロイメントが一役買っているであることがわかりました。Capistrano は、標準の設定では過去のバージョンを全部ディスクに残してくれます。デプロイする度に、1万個近くの inode を消費するのです。

古いデプロイメントを削除して inode領域を空け、ひとまず正常運用に戻すことができました。