treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Linuxでファイルの容量を調査するコマンド(dfとdu)

Linuxでログが肥大化したときに使うコマンドの備忘録。

dfコマンド後、どこに容量を占めているファイルがあるかを調べる方法のメモ書きです。

dfコマンドで全体の容量を調べる

以前に
RaspberryPiでSoftEtherの運用・ログに注意
<https://blog.treedown.net/entry/2018/04/30/010000>

という記事でログファイルがディスクの容量を占めてしまう件で容量を調べていました。
ここでやっていたように、ファイルシステムの使用状況(Windowsで言えばc:のようにドライブとかパーティションの単位)として容量を確認するにはdfコマンドを利用します。(※実行環境はRaspberry PiのRaspbianです。)

例えば、dfコマンドを実行すると、

f:id:treedown:20200320152544p:plain
各パーティションと容量の使用比、使用率、マウントしているディレクトリが一覧で表示できます。
しかし、これはどの単位なのか分りにくい。そこでオプションを付けてみます。

dfコマンドに「 -k」オプションを付与すると、キロバイト単位で容量表示することができます。
「df -k」の実行結果です。

f:id:treedown:20200320152559p:plain
ん?オプションなしでdfコマンドを実行したときと同じ表示にみえます。どうやらdfコマンドの標準はキロバイト単位で表示されるようです。
もうちょっと見やすくするために単位を上げて見ることにします。メガバイト単位で表示するには、
df -m
というコマンド、これでデバイス別にメガバイト単位での数字の表記に変わり、容量とファイルの占有率を確認することができます。

f:id:treedown:20200320152611p:plain
ちょっと数値の桁数が減りました。
例えば、/bootがマウントされている/dev/mmcblk0p1では44MBの内22MB超が使われているので52%の使用量となっていることが分ります。
しかし、ギガくらいの桁数になるとまだまだ見づらいものがあります。そこで、
df -h
が使われることが一般的です。
df -hを実行すると、

f:id:treedown:20200320152625p:plain
このように、単位までを付与した表示で容量を表示してくれます。
例えば、システム(/)がマウントされている、/dev/rootでは15GBの全体サイズにタイして、1.4GBしか使われていないことが分ります。Raspberry Piだから16GB のmicroSDにインストールしてあるOSが1.4GBしかないってことです。使用率は10%と表示されています。
先ほど確認した/bootがマウントされている/dev/mmcblk0p1では、表示が44MBと表示されており、使用容量が23MBと記述があります。
df -hは容量を適切な表示単位でOSが判断して表示してくれるので、通常利用するときはdf -hで容量を確認するのがよさそうです。※桁数や単位を揃えたい場合にはdf -mなどを利用すると見やすいですね。

ディレクトリ単位で容量を確認

じゃあ、マウントされているどこの容量が多いのかは分かった、その中のディスクの容量を占めているファイルは何かを徐々に絞り込んでいくにはどうしたらいいか?

ここで使うのがduコマンドです。
duコマンドは指定したファイルやディレクトリ内の使用容量を画面表示することが出来ます。
よく使うオプションは

-a(--all):ディレクトリとファイルを含めて全ての情報表示
-c(--total):検索した全容量の総計を表示する
-b(--bytes):単位をバイト単位で表示する
-k(--kilobytes):単位をキロバイト単位で表示する
-m(--megabytes):単位をメガバイト単位で表示する
-s(--summarize):指定したファイルやディレクトリの総計を表示する
-h:容量を適当な単位で表示する

概ねdfコマンドと似たようなオプションをよく使うような感じです。

duコマンド使ってみる

調査したいディレクトリ配下に(例えばここでは/varに)cdコマンドで移動して
du -sk *
と実行。
--------------------------------------------------------------
# du -sk *
1340 backups
362864 cache
81052 lib
4 local
0 lock
412 log
4 mail
4 opt
0 run
16 spool
102400 swap
44 tmp
--------------------------------------------------------------
キロバイト単位でディレクトリ内の各容量が画面に表示されます。
うーん、でもなんかちょっと見づらいな…。メガバイト単位にしてみましょう。
--------------------------------------------------------------
# du -sm *
2 backups
355 cache
80 lib
1 local
0 lock
1 log
1 mail
1 opt
0 run
1 spool
100 swap
1 tmp
--------------------------------------------------------------
なんとなく分りやすいような…。cacheディレクトリは355MBとかswapディレクトリが100MBと分ります。
しかし、dfコマンド同様、-hオプションも使ってみることにします。
--------------------------------------------------------------
# du -sh *
1.4M backups
355M cache
80M lib
4.0K local
0 lock
412K log
4.0K mail
4.0K opt
0 run
16K spool
100M swap
44K tmp
--------------------------------------------------------------
ちゃんと単位を付与して表示してくれました。Mがメガバイト、Kがキロバイトということ。人間が見る分にはこれの方がいいかなぁ。
例えばルートディレクトリでこれを実行してみると、
--------------------------------------------------------------
# du -sh *
6.8M bin
23M boot
0 dev
3.8M etc
5.5M home
191M lib
16K lost+found
4.0K media
4.0K mnt
75M opt
0 proc
20K root
6.5M run
7.5M sbin
4.0K srv
0 sys
2.0M tmp
558M usr
536M var
--------------------------------------------------------------
こんな具合にルートディレクトリのディレクトリ順に容量を出してくれます。全体で1.4GBの使用量しかないのはdfコマンドの実行結果から判明していますが、その大部分は/usrと/varであることがコマンドの実行結果から分ります。

ちょっと便利に⇒表示を並べ替え(メモ)

並べ替えしたいときには
du -sk * | sort -r
とパイプシンボルでつないでsortコマンドを入れておきます。
メガバイト単位で表示するなら
du -sm * | sort -r
と実行すると、並べ替えされて便利。

と、以前使ったときのメモに残っていたのですが、今試してみたら並べ替えされないなぁ…。

この辺は時間があったら調べておこうと思いました。