AWS EC2 にて no space left on device というエラーが出た時の対応

サーバーで作業をしていた時に下記エラーが出た。

no space left on device

cp や mkdir などの操作が受け付かなくなった。
サーバーの容量が足りなくなったり、ファイル数が上限に達すると起きるらしい。

環境

  • Amazon Linux 2023
  • AWS EC2

エラーの原因を調べる

かなり急いで作業していたためメモを残しておらず、
数字は割と適当。

容量を調べる

$ df -h
Filesystem        Size  Used Avail Use% Mounted on
devtmpfs          4.0M     0  4.0M   0% /dev
tmpfs             1.9G     0  1.9G   0% /dev/shm
tmpfs             768M  8.5M  760M   2% /run
/dev/nvme0n1p1     8G     8G     0 100% /
tmpfs             1.9G     0  1.9G   0% /tmp
/dev/nvme0n1p128   10M  1.3M  8.7M  13% /boot/efi
tmpfs             384M     0  384M   0% /run/user/1000

ファイル数の上限を調べる

$ df -i
Filesystem         Inodes  IUsed    IFree IUse% Mounted on
devtmpfs           488644    335   488309    1% /dev
tmpfs              491481      1   491480    1% /dev/shm
tmpfs              819200    566   818634    1% /run
/dev/nvme0n1p1     248062 248062        0  100% /
tmpfs             1048576     19  1048557    1% /tmp
/dev/nvme0n1p128        0      0        0     - /boot/efi
tmpfs               98296     14    98282    1% /run/user/1000

対応

ファイルを削除するかサーバーの容量を上げればいいらしい。

どこにいくつファイルが存在するか調べる

$ cd /
$ sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
     13 root
     16 opt
    342 boot
    674 etc
  28766 home
  62146 usr
 117619 var

サーバー容量を増やす

  • 「EC2」→「インスタンス」→ インスタンスを選択 →「ストレージ」 →「ブロックデバイス」→ 変更したいボリューム ID をクリック → ボリューム ID 選択 →「アクション」→「ボリュームの変更」クリック

ボリューム変更中はサーバーが利用できなくなるので注意。
ロードバランサーを使用してない時は、
AMI でイメージ作ってボリュームを増やした状態のインスタンスを複製したほうが良いと思う。
Elastic IP を使用していれば簡単に切り替えれるはず。