🌊
EC2(Amazon Linux 2)でファイル容量がいっぱいの時に、ファイル容量の大きい順でディレクトリを表示する
株式会社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 のコマンドで表示されなくなるだけだから、ということです。
Discussion