MongoDB
ext4
disk
ディスク空きスペース不足時の障害対応手順
DiskFull

ディスク容量が余裕でも"No space left on device"と怒られる怪現象

mongodbが落ちていたのでログを確認するとNo space left on deviceと出力されていた。

$ # /var/log/mongodb/mongod.log の内容
( 略 : )
2018-08-18T21:44:32.320+0900 E STORAGE  [thread1] WiredTiger (28) [1534596272:318424][943:0x7ff7d77b2700], file:WiredTiger.wt, WT_SESSION.checkpoint: /var/lib/mongodb/WiredTiger.turtle.set: handle-open: open: No space left on device
2018-08-18T21:44:32.321+0900 E STORAGE  [thread1] WiredTiger (28) [1534596272:321564][943:0x7ff7d77b2700], checkpoint-server: checkpoint server error: No space left on device
( 略 : )

ディスクフルだろうとディスク容量を確認する、、、空き容量はある。怪現象だ。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            990M  4.0K  990M   1% /dev
tmpfs           201M  412K  200M   1% /run
/dev/vda1        48G   29G   17G  63% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none           1001M     0 1001M   0% /run/shm
none            100M     0  100M   0% /run/user
$

サイズではなくファイル数がフルなのであった。

$ df -i
Filesystem      Inodes   IUsed  IFree IUse% Mounted on
udev            253417     419 252998    1% /dev
tmpfs           256223     354 255869    1% /run
/dev/vda1      3145728 3145728      0  100% /
none            256223      11 256212    1% /sys/fs/cgroup
none            256223       1 256222    1% /run/lock
none            256223       1 256222    1% /run/shm
none            256223       3 256220    1% /run/user
$

このマシンではサイズの小さなファイル(1KB程度)を200万ファイル/年のペースで生成するようなシステム(※1)が動いているため、ファイル数(inode数)の上限に達してしまっていたのであった。

対処法としては以下が挙げられる。

  • 不要or古いファイルをアーカイブor退避or削除する
  • ファイル数を監視し一定に保つ仕組みを設ける
  • ストレージorディスク容量を増やす

(※1)
将棋の棋譜ファイルをスクレイピングで収集するサービス( 将棋クエスト履歴検索β )を稼働させている。