Linuxを使っていて次の場面に遭遇
- なんかディスク容量が圧迫されてる
- でも何が圧迫の原因か分からない
- 使用量の多いディレクトリを見つけねば
そういう場面において役立つ方法です。
ほとんどのLinux系OSで有効なやり方なので、
コマンド例と一緒に見つけ方を記録しておきます。
キッカケはAWSでディスク使用量を調べた時
僕はとある用途でAWSを使ってます。
▼ 実際に使ってるEC2とかのスペック
- EC2 : t4g.small
- OS : Amazon Linux
- EBS容量 : 8GiB
EBSは拡張可能なストレージです。
8GiBじゃ少なすぎる感じもしますが、
少しでも使用料を抑えたいから仕方ない…
そしてある時、ディスク容量を調べました。
▼ ディスク容量はdfコマンドで取得可能
1 2 3 4 5 6 7 8 9 |
$ df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 474M 0 474M 0% /dev tmpfs tmpfs 492M 0 492M 0% /dev/shm tmpfs tmpfs 492M 472K 492M 1% /run tmpfs tmpfs 492M 0 492M 0% /sys/fs/cgroup /dev/xvda1 xfs 8.0G 6.1G 2.0G 77% / tmpfs tmpfs 99M 0 99M 0% /run/user/1000 |
上記の /dev/xvda1 がディスク使用量です。
なんと8Gのうち、6.1Gも消費してました。残り2.0G...
最終手段はEBS容量を普通に増やせばいいだけ
だけどディスク圧迫要因も知りたいので、
使用量の多いディレクトリを見つけることにしました。
ディレクトリの使用量はduコマンドで検索可能
使うべきコマンドはduコマンドです。
▼ duコマンドについて詳しく
「du」は、ディスクの使用量をディレクトリごとに集計して表示するコマンドです。ファイルを指定した場合は指定したファイルのサイズのみ、ディレクトリを指定した場合はそのディレクトリおよび全てのサブディレクトリの使用量を集計します。対象を指定しなかった場合は、カレントディレクトリの使用量が表示されます。
なお、アクセス権限のないファイルやディレクトリについては、集計対象となりません。システム全体をチェックしたい場合は、「root」ユーザーで実行しましょう。
引用元 : https://atmarkit.itmedia.co.jp/ait/articles/1610/25/news016.html
▼ duコマンドの基本使用例
1 2 3 4 5 6 7 8 9 10 |
$ du -s -m /var/www/html/* 4 /var/www/html/ads.txt 171620 /var/www/html/hoge 4204 /var/www/html/fuga 31376 /var/www/html/piyo 4 /var/www/html/index.php 4 /var/www/html/init.php 4 /var/www/html/test.php 68020 /var/www/html/vendor |
上記コマンドでは /var/www/html/* として末尾にワイルドカードしてます。こうすると内部デイレクトリに対してディスク使用量を表示してくれます。
この例のように左側の数字がデイレクトリが消費してるバイト数です。ただしduコマンドはファイル容量は表示しない(= 常に4)ことに注意です。またオプションとして -k を付けるとキロバイト単位、 -m を付けるとメガバイト単位で表示も可能
このduコマンドが役に立ちます。
ルートディレクトリ内を使用量の多い順に並べる
ルートデイレクトリを起点に調べます。
▼ duコマンドで最も使用量の多いdirを検索
1 2 3 4 5 6 7 8 9 10 11 12 |
$ du -m -s /* | sort -rn | head -10 3889 /usr 1626 /var 79 /boot 33 /opt 19 /etc 1 /run 1 /home 0 /tmp 0 /sys 0 /srv |
ルートの直下ディレクトリの使用量を全て調べ、それをサイズ降順でソートし、あとは上位10ディレクトリを表示してるだけです。
どうやら /usr , /var の使用量が多いことが判明
使用量の多いデイレクトリ内でさらに絞込
あとは地道に使用量の多いデイレクトリを探すだけです。
▼ duコマンドで /var/* をさらに絞込み
1 2 3 4 5 6 7 8 9 10 11 12 |
$ du -m -s /var/* | sort -rn | head -10 871 /var/log 445 /var/cache 269 /var/www 39 /var/lib 5 /var/spool 1 /var/opt 0 /var/yp 0 /var/tmp 0 /var/run 0 /var/preserve |
なるほど、/var/log/* の使用量が多いのか…
ここはログ関係だから削除しても大丈夫か…
という感じでduコマンドを駆使し、
使用量が多いディレクトリを見つけられました。
あとはよしなに対処してください。