ある日、仕事で出会った開発系の若者が自サーバで何かトラブルがあったらしく、
「なんか・・・なんか・・・アプリケーション動かんくなったんですけど・・・」
なんや、どした?
「なんか・・・なんか・・・こんな英語が出てくるんですけど・・・」
ピロンッ(Slack通知音) No space left on device
そんくらいのイングリッシュはマウスで言え。
まーまーまー、若者よ、怖がることはない。
df
とdu
コマンドって知ってるかい?
というやり取りがあり、意外と知らないもんなんやなと思い、教えてあげた解決方法です。
兎にも角にも現状を把握しよう
手元ではLinux系ディストリのUbuntuを使ってるので、そいつを例に解説していきます。
- df
パーティション毎のディスク使用量が見れます。-
-h
デフォでByte表記になるので、人が見やすい、Mega,Giga表記で表示してくれるオプション
-
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 2.9G 0 2.9G 0% /dev
tmpfs 597M 1.4M 595M 1% /run
/dev/sda2 80G 79G 1G 100% / ←ココ
tmpfs 3.0G 0 3.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.0G 0 3.0G 0% /sys/fs/cgroup
/dev/loop0 94M 94M 0 100% /snap/core/9066
/dev/loop1 98M 98M 0 100% /snap/core/9289
tmpfs 597M 0 597M 0% /run/user/1000
パーティションがいくつか出てきますが、私の場合/
一本なので、上の内容はUbuntuの最小構成だと思います。
/
は 80G
中 79G
使っていて、残り 1G
しかないということがわかりますね。
ドロ臭いけど一番確実な方法はdu
コマンドをひたすら繰り返すこと
du
は、ディスクの使用量をディレクトリごとに集計して表示するコマンドです。
【 du 】コマンド――ディスクの使用量を表示する
どこのファイルが肥大化しているのか全く検討が付かない場合は、一番上の階層である/
から始めましょう。
あたりが付いてるようであれば、そのディレクトリ配下から始めましょう。
素直に使ってれば大体溜まりやすいのは、/home
/usr/
/var
あたりでしょう。
du
コマンドに付けるオプション
-
-h
デフォはByte表記なので、見やすいようにMega,Giga表記
ディレクトリ数が多い場合は、逆に付けない方がひと目で見分けやすいこともあります。 -
-d
何回層下までもぐるか
今回はわかりやすくするために1
階層毎に繰り返します。
$ sudo du -hd 1 /
15M /bin
142M /boot
0 /dev
5.4M /etc
4.4G /home
838M /lib
0 /lib64
0 /media
0 /mnt
0 /opt
...省略...
※/
など権限規制がかかっているようなディレクトリに関してはsudo
を使ってルート権限で実行する必要があります。
一部省略してますが、/home
で4.4G取られてるみたいなので、次はここを探ってみましょう。
$ sudo du -hd 1 /home
4.4G /home/nyamane
32K /home/kamaitachi
4.4G /home/
私のホームディレクトリの容量がほとんどということがわかりますね。
では次は、私のホームディレクトリを探っていきましょう。
ディレクトリ数が多い場合は、M
とか、G
が並んでると見分けにくいこともあるので、試しに-h
オプションを取って見てみましょう。
$ sudo du -d 1 /home/nyamane/
40420 /home/nyamane/.cache
0 /home/nyamane/.gnupg
16 /home/nyamane/.ssh
3444 /home/nyamane/.config
2251960 /home/nyamane/repos
0 /home/nyamane/snap
87396 /home/nyamane/pkgs
11436 /home/nyamane/.kube
4 /home/nyamane/.k9s
4 /home/nyamane/.docker
1316 /home/nyamane/.kubectx
41556 /home/nyamane/google-cloud-sdk.staging
159004 /home/nyamane/google-cloud-sdk
1103432 /home/nyamane/.vscode-server
357428 /home/nyamane/.npm
366672 /home/nyamane/.rbenv
4892 /home/nyamane/.gem
27016 /home/nyamane/.solargraph
59920 /home/nyamane/.local
80 /home/nyamane/.pylint.d
4516088 /home/nyamane/
/home/nyamane/repos
約2.2GB
/home/nyamane/.vscode-server
約1.1GB
さー、いよいよ核心に近づいて来ましたね。
ここは私の開発用のリポジトリをまとめたディレクトリです。
後は今ままでの作業を繰り返して一歩ずつ進むのみです。
最終的に最下層まで調べたとして、最後はls
でファイル単位まで突き止めましょう。
$ ls -laF /home/nyamane/repos/some_repos/logs
lsで調べた結果、development.log
というファイルが大きいことがわかったので、消しちゃいましょう。
$ rm -f /home/nyamane/repos/some_repos/logs/development.log
おめでとうございます。
これであなたは+何GBかのディスク容量を確保することができました。
おわりに
今回は自作アプリケーションが出力している開発用のログ・ファイルだったので、ただ単にrm
してますが、そもそも消していいファイルかどうかの判断も必要なので、そこは適宜調べて対処する必要があります。
何も考えずに消してしまうと、痛い目に合う可能性もありますのでご注意下さい。
しょっちゅうディスク容量が頭打つ場合は、そもそもの容量設定が厳しいので、ディスクサイズの拡張、HDD換装なども検討しましょう。
開発用に使ってるサーバであれば、アプリケーションでログ出し過ぎということも考えられます。