There appears to be insufficient space on your system to finish とエラーがでた!
とある日,会社のサービスが止まっていまい,原因の究明を行ったところ上記のエラーが発生して新規ファイルの作成ができなくなっていた.
そこでディスクのスペースを確認したところ空き容量は問題ないが,inodeが枯渇していることが判明.
ここに,この問題を対処した際の備忘録を残す.
inode空き容量の確認
df -i
コマンドでinodeの空き容量を調べる
/dev/xvda1 217227 217227 217227 100% /
確認すると使用率は100%になっている.
これでは新規ファイルの作成ができず,logを書き出したところでサービスが止まってしまう.
ファイルシステムの確認
df -T
コマンドでファイルシステムを確認する
/dev/xvda1 ext4 略
今回はext4であった.
ext4ではinodeテーブルのサイズを動的に変更は(多分)できないので,ファイルシステムを再構築するか,ディスクサイズを拡張し,同時にinodeテーブルサイズを方法をとる.
EC2では手軽にディスクサイズを拡張できるため,今後の事も考えディスクサイズの拡張を行う.
ボリュームサイズの拡張
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
ボリュームサイズを確認しておく.
次にEC2ダッシュボードで,問題のインスタンスからEBS IDをクリックし,EBSボリュームのページに移動に移動する.
対象のボリュームのスナップショットを念のためとっておき,ボリュームの変更を行う.
ここで先ほど確認しておいたボリュームサイズ以上の値を指定し,変更リクエストを行う.
この変更は5分ほどかかる事もある.
変更できたら以下のようになるだろう.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
└─xvda1 202:1 0 8G 0 part /
ある程度待っても変更されない場合はインスタンスの再起動をすると変更される.
しかし,ルートのパーティションは8Gのままで変更されていないため,以下コマンドで拡張を行う.
$ sudo growpart /dev/xvda 1
(mkdir: cannot create directory '/tmp/growpart.1959': No space left on device FAILED: failed to make temp dir
と出る場合は空きがなくtmpファイルが作成できないので,お掃除をしてから実行する)
再度確認
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
└─xvda1 202:1 0 20G 0 part /
これでサイズが最大まで拡張されています.
ファイルシステムの拡張
最後にファイルシステムの拡張を行う
$ sudo resize2fs /dev/xvda1
$ df -i
/dev/xvda1 1310720 217227 1093493 17% /
inode使用率が17%まで減りました.
これで完了です.
おまけ
$ dpkg --get-selections | grep linux-
linux-base install
linux-headers-4.4.0-121 install
linux-headers-4.4.0-121-generic install
linux-headers-4.4.0-124 install
linux-headers-4.4.0-124-generic install
linux-headers-4.4.0-127 install
linux-headers-4.4.0-127-generic install
linux-headers-4.4.0-128 install
linux-headers-4.4.0-128-generic install
linux-headers-4.4.0-130 install
linux-headers-4.4.0-130-generic install
linux-headers-4.4.0-133 install
linux-headers-4.4.0-133-generic install
linux-headers-4.4.0-134 install
linux-headers-4.4.0-134-generic install
linux-headers-4.4.0-137 install
linux-headers-4.4.0-137-generic install
linux-headers-4.4.0-138 install
linux-headers-4.4.0-138-generic install
linux-headers-4.4.0-139 install
linux-headers-4.4.0-139-generic install
linux-headers-4.4.0-151 install
linux-headers-4.4.0-151-generic install
linux-headers-4.4.0-154 install
linux-headers-4.4.0-154-generic install
linux-headers-4.4.0-157 install
linux-headers-4.4.0-157-generic install
linux-headers-4.4.0-159-generic install
linux-headers-generic install
linux-headers-virtual install
linux-image-4.4.0-101-generic deinstall
linux-image-4.4.0-104-generic deinstall
linux-image-4.4.0-108-generic deinstall
linux-image-4.4.0-109-generic deinstall
linux-image-4.4.0-112-generic deinstall
linux-image-4.4.0-116-generic deinstall
linux-image-4.4.0-141-generic deinstall
linux-image-4.4.0-142-generic deinstall
linux-image-4.4.0-143-generic deinstall
linux-image-4.4.0-151-generic install
linux-image-4.4.0-154-generic install
linux-image-4.4.0-157-generic install
linux-image-4.4.0-159-generic install
linux-image-4.4.0-92-generic deinstall
linux-image-4.4.0-93-generic deinstall
linux-image-4.4.0-96-generic deinstall
linux-image-4.4.0-97-generic deinstall
linux-image-4.4.0-98-generic deinstall
linux-image-virtual install
linux-libc-dev:amd64 install
linux-modules-4.4.0-143-generic deinstall
linux-modules-4.4.0-151-generic install
linux-modules-4.4.0-154-generic install
linux-modules-4.4.0-157-generic install
linux-modules-4.4.0-159-generic install
linux-virtual install
確認してみると古いカーネルがいっぱい残っていた.
これをお掃除すれば空きが増えそうなので,空きがない場合は確認してみると良いかと思う.
一応確実に使わないであろうカーネルを削除
下記オプション--dry-run
で削除テストを行い,問題がなければ削除を行う
$ apt-get autoremove --purge linux-*-4.4.0-{121,124,127,128,130,133,134,137,138,139}* --dry-run
以上で処置完了です.おつかれさまでした!