サーバーで作業をしていた時に下記エラーが出た。
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 を使用していれば簡単に切り替えれるはず。