Linuxサーバでファイルを作成しようとすると「デバイスに空き領域がありません」と表示され、ファイルが一切作成できなくなった。一見すると容量不足が原因に見えるが容量は空いている。
原因を探る
「空き領域がありません。」とのことなのでまず疑うべきはディスク使用率だろう。しかし、df コマンドで確認しても容量は問題なさそう。
# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/sda3 100G 60G 40G 60% /
/dev/sda1 960M 346M 615M 37% /boot
システムログにも頻繁に以下の出力がある
No space left on device
どうやらディスクに問題があることは間違いなさそうなのでdf コマンドに i オプションを付けて、inodeの確認をすると100% になっていた。
# df -i
ファイルシス Iノード I使用 I残り I使用% マウント位置
/ 49805312 449805312 0 100% /
/dev/sda1 524288 372 523916 1% /boot
inode(アイノード)は、主にUNIX系のファイルシステムで使われるデータ構造で、ファイルやディレクトリの以下の属性情報を管理している。
・ファイルの所有者
・アクセス権(パーミッション)
・ファイルサイズ
・作成・更新日時
inode は最大数が決まっているので、最大数に近づくとファイルが作成できなくなってしまう。
解決策
inode を減らすにはファイルを削除するしかない。find コマンドでファイル数が大きい順で検索することができる。/ 直下で実行してしまうとかなり処理時間がかかる上にサーバに負荷がかかってしまうので、ある程度、怪しいディレクトを絞ってcd で移動した上で実行した方がよい。よくあるのが /var 配下や /root 配下に溜まるメールなど。実行すると以下のようにファイル数が多いフォルダ順にファイル数とフォルダ名で表示される。
# cd /var/
# find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -r
80385 folder9
78900 folder3
59245 folder2
5250 folder7
311 folder2
3 folder1
もし、不要なファイルであれば削除してしまう。削除が完了するとファイルが書き込めるようになる。
例えばある期間より前のファイルを削除など条件をつけて削除する場合はこちらの記事を参照
コメント