はじめに
何度か必要になったことがあるのですがその度に使い方を忘れてしまっているdfコマンドとduコマンドの使い方のメモです。
それぞれ一言で言ってしまえば次の様になります。
– dfコマンドはディスクの使用済み容量と空き容量を確認できるコマンドです。
– duコマンドは指定したディレクトリの使用容量を調べるコマンドです。
どっちがどっちだったかよく忘れるのでメモっておこうという記事の目的がこれで終わってしまったのですが、あんまりなのでもう少し続けます。
このブログが動いてるサーバーもそうですし、投資や各種技術検証で使っているEC2インスタンスなども費用が自己負担なのでディスクサイズが最低限の状態で動いており、時々ディスクの空き具合を気にしてあげる必要があります。
また、職場で利用しているデータ分析関係のワークフローを構築しているサーバーも本番サービスのサーバーと違って最低限構成なので何度かディスクのパンクによる障害を経験しています。
そんな時に調査するのにdfコマンドとdfコマンドを使います。
dfコマンドについて
まず、dfコマンドからです。
先ほどざっと書いた通りで、このコマンドを打つとマウントされているディスクの一覧が表示されてそれぞれの容量と使用量、そして丁寧なことに使用率なども表示してくれます。
ディスク容量のパンクが疑われる場合、まずこのコマンドで状況を確認にすることになると思います。(本来は、パンクが疑われなくても時々監視しておくべきなのだと思いますが。)
自分が持ってるとあるEC2インスタンスで実行した結果が以下です。(EC2で実行したらヘッダーが日本語になりました。)
$ df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
devtmpfs 485340 0 485340 0% /dev
tmpfs 494336 0 494336 0% /dev/shm
tmpfs 494336 352 493984 1% /run
tmpfs 494336 0 494336 0% /sys/fs/cgroup
/dev/xvda1 8376300 3768544 4607756 45% /
-h オプション(“Human-readable”の頭文字らしい)をつけると、人間が読みやすいキロメガギガ単位で表示してくれます。
$ df -H
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 497M 0 497M 0% /dev
tmpfs 507M 0 507M 0% /dev/shm
tmpfs 507M 361k 506M 1% /run
tmpfs 507M 0 507M 0% /sys/fs/cgroup
/dev/xvda1 8.6G 3.9G 4.8G 45% /
一番下の /dev/xvda1がメインのファイルシステムですね。現時点で45%使っていることがわかります。まだ余裕。
Mac (zsh)だと出力の形がちょっと違います。
% df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk3s1s1 228Gi 8.5Gi 192Gi 5% 356093 2018439760 0% /
devfs 199Ki 199Ki 0Bi 100% 690 0 100% /dev
/dev/disk3s6 228Gi 20Ki 192Gi 1% 0 2018439760 0% /System/Volumes/VM
/dev/disk3s2 228Gi 4.4Gi 192Gi 3% 844 2018439760 0% /System/Volumes/Preboot
/dev/disk3s4 228Gi 4.8Mi 192Gi 1% 43 2018439760 0% /System/Volumes/Update
/dev/disk1s2 500Mi 6.0Mi 482Mi 2% 1 4936000 0% /System/Volumes/xarts
/dev/disk1s1 500Mi 6.2Mi 482Mi 2% 30 4936000 0% /System/Volumes/iSCPreboot
/dev/disk1s3 500Mi 1.0Mi 482Mi 1% 62 4936000 0% /System/Volumes/Hardware
/dev/disk3s5 228Gi 22Gi 192Gi 11% 460541 2018439760 0% /System/Volumes/Data
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /System/Volumes/Data/home
iノードの利用状況も一緒に出してくれている様です。この端末にはそんな大きなファイルを溜めてないのでスカスカですね。
duコマンドについて
この記事用にdfコマンドを試したサーバーや端末は問題なかったのですが、もしディスク容量が逼迫していることが判明したら原因を探すことになります。
その時は当然ディレクトリごとの使用量を調べて、原因となっているディレクトリを探すのですが、その際に使うのがduコマンドです。
du -sh {対象ディレクトリ}
の構文で使うことが多いです。-hオプションはdfの時と同じで人間が読みやすい単位で表示するものです。-sは対象のディレクトリの合計だけを表示するものです。これを指定しないと配下のディレクトリを再起的に全部表示するので場所によっては出力が膨大になります。
対象ディレクトリを省略するとカレントディレクトリが対象になります。
$ du -sh
1.2G .
上記の様に、1.2G使ってるって結果が得られます。もう少しだけ内訳みたい、て場合は、-sの代わりに、-d {深さ} オプションで何層下まで表示するかを決められます。 -s は -d 0 と同じです。
$ du -h -d 0
1.2G .
$ du -h -d 1
4.0K ./.ssh
973M ./.pyenv
180M ./.cache
3.0M ./.local
9.0M ./.ipython
104K ./.jupyter
0 ./.config
1.2G .
あとは、 -d 1 はオプションでやらず、ディレクトリの指定を ./* みたいにワイルドカードで指定しても似たことができますね。(-s は付けてください)
注意ですが、 ルートディレクトリなどで(/) でこのコマンド打つとかなり重い処理になる可能性があります。注意して実行しましょう。
現実的には、いろんなメディアファイルが配置されそうなパスとかログファイルが出力されている先とかそういうパスに当たりをつけてその範囲で調査するコマンドと考えた方が安全です。