EC2 Linux上でinodeが枯渇した際の対処法

# 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ボリュームのページに移動に移動する．
<img width="649" alt="スクリーンショット 2020-07-10 2.26.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269354/ef270bc6-d656-22a4-2c73-333dc1a3a80a.png">

対象のボリュームのスナップショットを念のためとっておき，ボリュームの変更を行う．
<img width="700" alt="スクリーンショット 2020-07-10 2.31.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269354/692bd92c-fcee-90c0-353a-571b233ca1f6.png">

ここで先ほど確認しておいたボリュームサイズ以上の値を指定し，変更リクエストを行う．
この変更は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
```

以上で処置完了です．おつかれさまでした！