🌊

EC2(Amazon Linux 2)でファイル容量がいっぱいの時に、ファイル容量の大きい順でディレクトリを表示する

2022/12/25に公開

株式会社TECH LUCKという会社で代表兼エンジニアをしている齊藤です。

AWSのEC2(Amazon Linux 2)を使っている際に、正常に稼働していたサーバーから突然レスポンスが返ってこなくなるという自体に陥りました。
原因を調べたところサーバーのディスク容量をすべて使ってしまい、レスポンスが返ってこなくなっていました。
本記事では上記の際の対処法を備忘録として載せておきます。

対処法やコマンド

※パーミッションの問題があると面倒なので、ログインしているユーザーはrootユーザーであるとします。

まずはどのくらいファイル容量を使っているのか確認します。

bash
df -h

# 結果
devtmpfs         2.0G     0  2.0G    0% /dev
tmpfs            2.0G     0  2.0G    0% /dev/shm
tmpfs            2.0G  460K  2.0G    1% /run
tmpfs            2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/xvda1        16G   14G  2.0G   88% /
tmpfs            395M     0  395M    0% /run/user/1001

/dev/xvda1が16GBのディスク容量があり、88%の14GBを使っている状態であることがわかりました。本記事のサーバーでは100%となっていないため正常稼働していますが、レスポンスを返さなかった時は100%になっていました。

以下のコマンドでどこのディレクトリの容量が大きいのかを調べます。

du -sh /*

# 実行結果
968M	/home
460K	/run
116K	/opt
61M	/boot
44K	/root
32M	/etc
5.0M	/tmp
1.9G	/var
1.5G	/usr
0	/sys
...

これによると/var/usr以下のディレクトリのファイル容量が大きいことがわかりました。
このコマンドで利用して、容量が大きくて不要なログファイルなどを削除していきました。

注意点

ファイルを削除した際に、ファイルを削除しても容量が減らないという場合があります。
この場合には、削除したファイルに関連するサーバーのプロセスをkillするなどをして対処しましょう。

Linux のファイルシステムでは、rm コマンドでファイルを削除したとしても、その削除したファイルをプロセスが使用中であった場合は、実際にはファイルシステム上から削除されず、ls や find のコマンドで表示されなくなるだけだから、ということです。

引用元:rmでファイル削除後にdf -hで容量が減らない時の対処(Linux)

Discussion