【Linux】 ディスク使用量の表示(df / du / ncdu)

Linux には、ストレージの使用状況を調べるコマンドがいくつかあります。この記事では、ファイルシステム全体の使用量を見る df、ディレクトリごとの使用量を見る du、画面を操作しながら使用量を調べる NCurses Disk Usage(ncdu)の使い方を、実行結果を見ながら確認します。

この記事でわかること
  1. df でファイルシステムの容量と inode の使用状況を確認する方法
  2. du でディレクトリごとの使用量を調べ、多い順に並べる方法
  3. ncdu で、画面を操作しながら容量を使っている場所を探す方法
検証環境

ホスト名は ubuntu-1、ユーザー名は hirotano で、OS は Ubuntu です。以降の実行結果は、この環境のものです。

dfファイルシステム単位容量・空き・inodeduディレクトリ単位使っている容量ncdudu の対話版選びながら掘り下げるまず全体を見る次に場所を絞る画面で確かめるdf -hdf -idu -hdu -hsncdu
図1 3つのコマンドの使い分け。全体を df、場所の絞り込みを du、画面での確認を ncdu で行う
画面イメージについて

この記事の画面は、実際の画面ではなく、実行時の画面から見るポイントを抜き出して描いたイメージです。長い出力は途中を省略しています。

df コマンドの概要

df は disk free の略で、システムにマウントされているすべてのファイルシステムの使用状況を表示します。ファイルシステムの総容量、使用量、空き容量を確認できます。

df -h:容量を読みやすい単位で表示する

-h オプションを付けると、サイズが K、M、G などの単位で表示され、読みやすくなります。この単位は 1024 のべき乗で、たとえば M は 1,048,576 バイトです。

$ df -h
ターミナル画面イメージ
1hirotano@ubuntu-1:~$ df -hFilesystem                          Size  Used Avail Use% Mounted ontmpfs                               198M  1.1M  197M   1% /run2/dev/mapper/ubuntu--vg-ubuntu--lv    12G  4.8G  5.9G  45% /tmpfs                               988M     0  988M   0% /dev/shmtmpfs                               5.0M     0  5.0M   0% /run/lock/dev/sda2                           2.0G  130M  1.7G   8% /boottmpfs                               198M  4.0K  198M   1% /run/user/1000
図2 df -h の実行結果(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1df -hファイルシステムの使用状況を、読みやすい単位で表示するコマンド
2/dev/mapper/ubuntu--vg-ubuntu--lvシステムのメインのファイルシステム。マウント先は /

列の意味は次のとおりです。

列意味
Filesystemファイルシステムの名前
Sizeファイルシステムの総サイズ
Used現在使っている容量
Avail残りの利用可能な容量
Use%使用率
Mounted onマウント先(マウントポイント)

メインのファイルシステム /dev/mapper/ubuntu--vg-ubuntu--lv は、総サイズが 12G、使用量が 4.8G、空きが 5.9G で、使用率は 45% です。

補足:Use% の計算

Use% は、Used を Size で割った値ではなく、Used ÷(Used + Avail)で求められます。この例では 4.8 ÷(4.8 + 5.9)≒ 45% です。Size(12G)と Used + Avail(10.7G)が一致しないため、Size で割ると 40% になり、表示と合いません。

df -h –total:合計も表示する

--total オプションを付けると、最後に、表示したファイルシステムの合計(サイズ、使用量、空き容量)が追加されます。

$ df -h --total
ターミナル画面イメージ
hirotano@ubuntu-1:~$ df -h --totalFilesystem                          Size  Used Avail Use% Mounted ontmpfs                               198M  1.1M  197M   1% /run/dev/mapper/ubuntu--vg-ubuntu--lv    12G  4.8G  5.9G  45% /tmpfs                               988M     0  988M   0% /dev/shmtmpfs                               5.0M     0  5.0M   0% /run/lock/dev/sda2                           2.0G  130M  1.7G   8% /boottmpfs                               198M  4.0K  198M   1% /run/user/10001total                                15G  4.9G  8.9G  36% -
図3 df -h –total の実行結果(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1total の行すべての行の合計。サイズ 15G、使用量 4.9G、空き 8.9G、使用率 36%。マウント先の列は -

この合計には、tmpfs のようにメモリ上のファイルシステムも含まれています。

df -i:inode の使用状況を確認する

容量が空いていても、新しいファイルを作れなくなることがあります。Linux のファイルシステムには、保存できるデータの量だけでなく、inode の数にも上限があるためです。inode は、ファイルの所有者、アクセス権、タイムスタンプ、データの場所などの情報を持つ管理用のデータで、ファイルやディレクトリ1つにつき1つ使われます。inode を使い切ると、空き容量があっても、新しいファイルを作れません。

inode の数を確認するには、df に -i オプションを付けます。

$ df -i
ターミナル画面イメージ
1hirotano@ubuntu-1:~$ df -iFilesystem                         Inodes  IUsed   IFree IUse% Mounted ontmpfs                              252720    806  251914    1% /run2/dev/mapper/ubuntu--vg-ubuntu--lv  753664  81448  672216   11% /tmpfs                              252720      1  252719    1% /dev/shmtmpfs                              252720      3  252717    1% /run/lock/dev/sda2                          131072    316  130756    1% /boottmpfs                               50544     25   50519    1% /run/user/1000
図4 df -i の実行結果(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1df -iinode の使用状況を表示するコマンド
2/dev/mapper/ubuntu--vg-ubuntu--lv の行メインのファイルシステムの inode。使用できる数が 753664、使用中が 81448、空きが 672216、使用率が 11%
列意味
Inodesファイルシステムで使用できる inode の総数
IUsed使用中の inode の数
IFree空いている inode の数
IUse%inode の使用率

メインのファイルシステムでは、使用できる inode が合計 753,664 個、そのうち 81,448 個が使用中で、672,216 個が空いています。使用率は 11% なので、まだ余裕があります。

du コマンドの概要

du は disk usage の略で、ディレクトリとそのサブディレクトリが使っている容量を調べるコマンドです。ファイルシステム全体の情報を表示する df と違い、du は指定したディレクトリの情報を表示します。どのディレクトリが容量を使っているかを調べるときに使います。

du の後ろに、調べたいディレクトリを指定します。表示される単位は、既定では 1024 バイトです。実行するユーザーが読めるディレクトリしか調べられないため、sudo を付けて実行することが多くあります。

du:ディレクトリごとの使用量を表示する

$ sudo du /var/log
ターミナル画面イメージ
1hirotano@ubuntu-1:/$ sudo du /var/log232      /var/log/installer/block936     /var/log/installer16392   /var/log/journal/(伏せています)16396   /var/log/journal120     /var/log/unattended-upgrades4       /var/log/landscape4       /var/log/dist-upgrade100     /var/log/apt4       /var/log/private19152   /var/log(先頭と末尾の行は省略しています)
図5 du の実行結果(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1sudo du /var/log/var/log とその下のディレクトリの使用量を表示するコマンド
2左の数字使用量。単位は 1024 バイト。/var/log の合計は 19152(約 19MB)

表示されるのは、左が使用量、右がディレクトリのパスです。最後の行 /var/log が、その下をすべて合わせた合計です。

補足:du が表示する使用量

du が表示するのは、ファイルが実際に使っているディスク上の領域です。ファイルの見かけのサイズ(wc -c で数えたバイト数)とは、異なる場合があります。見かけのサイズで表示したいときは、--apparent-size オプションを使います。

du -h:読みやすい単位で表示する

-h オプションを付けると、使用量が K、M、G などの単位で表示されます。

$ sudo du -h /var/log
ターミナル画面イメージ
1hirotano@ubuntu-1:/$ sudo du -h /var/log232K    /var/log/installer/block936K   /var/log/installer17M    /var/log/journal/(伏せています)17M    /var/log/journal120K   /var/log/unattended-upgrades4.0K   /var/log/landscape4.0K   /var/log/dist-upgrade100K   /var/log/apt4.0K   /var/log/private19M    /var/log(先頭と末尾の行は省略しています)
図6 du -h の実行結果(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1sudo du -h /var/log使用量を読みやすい単位で表示するコマンド
232K のような値K、M などの単位が付いた使用量。/var/log の合計は 19M

du -hs:合計だけを表示する

-s オプション(summarize の略)を付けると、サブディレクトリの内訳は表示されず、指定したディレクトリの合計だけが表示されます。

$ sudo du -hs /var/log
ターミナル画面イメージ
1hirotano@ubuntu-1:/$ sudo du -hs /var/log219M     /var/log
図7 du -hs の実行結果(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1sudo du -hs /var/log合計だけを表示するコマンド
219M/var/log 全体の使用量

このように、du を使うと、どのディレクトリやサブディレクトリが容量を使っているかを確認できます。

du と sort:使用量の多い順に並べる

du の結果を sort コマンドに渡すと、使用量の多い順に並べられます。たとえば、/var/log の直下にあるファイルやディレクトリを、使用量の多い順に並べるには、次のコマンドを使います。

$ sudo du -sh /var/log/* | sort -hr
部分意味
du -sh /var/log/*/var/log 直下の項目ごとに、使用量の合計を読みやすい単位で表示する。* は、シェルが /var/log 直下の名前に展開する
|左のコマンドの出力を、右のコマンドに渡す
sort -hr-h で 17M や 936K のような単位付きの数を大きさで比較し、-r で降順(大きい順)に並べる
ターミナル画面イメージ
1hirotano@ubuntu-1:/$ sudo du -sh /var/log/* | sort -hr217M    /var/log/journal936K   /var/log/installer600K   /var/log/dpkg.log300K   /var/log/syslog248K   /var/log/cloud-init.log168K   /var/log/kern.log120K   /var/log/unattended-upgrades100K   /var/log/apt64K    /var/log/bootstrap.log48K    /var/log/dmesg.048K    /var/log/dmesg36K    /var/log/alternatives.log(以降の行は省略しています)
図8 使用量の多い順に並べた結果(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1sudo du -sh /var/log/* | sort -hr使用量の多い順に並べて表示するコマンド
2左の列(17M、936K、600K …)使用量。上から順に小さくなっている。いちばん大きいのは /var/log/journal

NCurses Disk Usage(ncdu)の概要

もう1つ便利なツールが、NCurses Disk Usage(ncdu)です。du の対話型で、使用量を画面に表示し、カーソルを動かしながらサブディレクトリを掘り下げて、どのファイルやディレクトリが容量を使っているかを調べられます。

ncdu をインストールする

今回使用している Ubuntu には、ncdu が標準では入っていないので、インストールします。

$ sudo apt install ncdu
ターミナル画面イメージ
1hirotano@ubuntu-1:/$ sudo apt install ncdu[sudo] password for hirotano:Reading package lists... DoneBuilding dependency tree... DoneReading state information... DoneThe following NEW packages will be installed:  ncdu0 upgraded, 1 newly installed, 0 to remove and 77 not upgraded.Need to get 43.4 kB of archives.After this operation, 106 kB of additional disk space will be used.Get:1 http://jp.archive.ubuntu.com/ubuntu jammy/universe amd64 ncdu amd64 1.15.1-1 [43.4 kB]Fetched 43.4 kB in 3s (13.7 kB/s)Selecting previously unselected package ncdu.(Reading database ... 73671 files and directories currently installed.)Preparing to unpack .../ncdu_1.15.1-1_amd64.deb ...Unpacking ncdu (1.15.1-1) ...Setting up ncdu (1.15.1-1) ...Processing triggers for man-db (2.10.2-1) ...Scanning processes...Scanning linux images... Running kernel seems to be up-to-date. No services need to be restarted. No containers need to be restarted. No user sessions are running outdated binaries. No VM guests are running outdated hypervisor (qemu) binaries on this host.hirotano@ubuntu-1:/$ 
図9 ncdu のインストール(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1sudo apt install ncduncdu をインストールするコマンド。出力の ncdu 1.15.1-1 が、インストールされたバージョン

ncdu で使用量を表示する

ルートディレクトリ(/)に移動して ncdu を実行すると、ルートディレクトリの下の使用量が、大きい順に表示されます。

ncdu(ルートディレクトリ)画面イメージ
--- / ------------------------------------------1    2.3 GiB [##########] /usr    2.0 GiB [########  ]  swap.img. 625.6 MiB [##        ] /snap. 482.5 MiB [##        ] /var. 129.6 MiB [          ] /boot.   5.2 MiB [          ] /etc.   1.1 MiB [          ] /run.  44.0 KiB [          ] /tmp   32.0 KiB [          ] /home!  16.0 KiB [          ] /lost+founde   4.0 KiB [          ] /srv!   4.0 KiB [          ] /roote   4.0 KiB [          ] /opte   4.0 KiB [          ] /mnte   4.0 KiB [          ] /media.     0.0 B [          ] /proc.     0.0 B [          ] /sys      0.0 B [          ] /dev@     0.0 B [          ]  libx32@     0.0 B [          ]  lib64@     0.0 B [          ]  lib32@     0.0 B [          ]  sbin@     0.0 B [          ]  lib@     0.0 B [          ]  bin
図10 ncdu の実行画面。カーソルは /usr にある(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1/usr の行カーソルがある行。使用量は 2.3 GiB で、ルートディレクトリの下でいちばん大きい
表示意味
左端の1文字(! . e @)項目の状態を示すフラグ。! はディレクトリの読み取りエラー、. は下のディレクトリの読み取りエラー(表示のサイズが実際と異なる場合がある)、e は空のディレクトリ、@ はファイルでもディレクトリでもないもの(シンボリックリンクなど)
使用量(2.3 GiB など)その項目の使用量
[##########]同じ階層でいちばん大きい項目を基準にした、使用量の棒グラフ

! や . の付いた項目は、権限がなくて中身を読めなかった可能性があります。そのような項目も含めて調べるときは、sudo を付けて実行します。

ディレクトリを掘り下げる

上の画面では、カーソルが /usr にあります。たとえば /var の下のディレクトリを調べたいときは、カーソルを /var まで動かして、Enter キーを押します。

ncdu(ルートディレクトリ)画面イメージ
--- / ------------------------------------------    2.3 GiB [##########] /usr    2.0 GiB [########  ]  swap.img. 625.6 MiB [##        ] /snap1. 482.5 MiB [##        ] /var. 129.6 MiB [          ] /boot.   5.2 MiB [          ] /etc.   1.1 MiB [          ] /run.  44.0 KiB [          ] /tmp   32.0 KiB [          ] /home!  16.0 KiB [          ] /lost+founde   4.0 KiB [          ] /srv!   4.0 KiB [          ] /roote   4.0 KiB [          ] /opte   4.0 KiB [          ] /mnte   4.0 KiB [          ] /media.     0.0 B [          ] /proc.     0.0 B [          ] /sys      0.0 B [          ] /dev@     0.0 B [          ]  libx32@     0.0 B [          ]  lib64@     0.0 B [          ]  lib32@     0.0 B [          ]  sbin@     0.0 B [          ]  lib@     0.0 B [          ]  bin
図11 カーソルを /var に動かした画面(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1/var の行カーソルを動かした先。使用量は 482.5 MiB。ここで Enter キーを押す

Enter キーを押すと、/var の下のディレクトリが表示されます。

ncdu(/var)画面イメージ
--- /var -----------------------------------------1                               /..2. 367.2 MiB [##########] /lib.  96.5 MiB [##        ] /cache.  18.7 MiB [          ] /log.  52.0 KiB [          ] /snap.  20.0 KiB [          ] /tmp.  16.0 KiB [          ] /spoole   4.0 KiB [          ] /opte   4.0 KiB [          ] /maile   4.0 KiB [          ] /locale   4.0 KiB [          ] /crashe   4.0 KiB [          ] /backups@     0.0 B [          ]  lock@     0.0 B [          ]  run
図12 /var の下のディレクトリ(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1/..1つ上のディレクトリに戻る項目
2/lib/var の下でいちばん大きいディレクトリ。使用量は 367.2 MiB

ヘルプを表示して終了する

? キーを押すと、ヘルプが表示されます。キーの一覧には、選択したファイルやディレクトリを削除するキー(d)もあり、このツールの中から空き容量を確保できます。

ncdu help画面イメージ
ncdu help ------------------------- 1:Keys -- 2:Format -- 3:About      up, k  Move cursor up    down, j  Move cursor downright/enter  Open selected directory left, <, h  Open parent directory          n  Sort by name (ascending/descending)          s  Sort by size (ascending/descending)          C  Sort by items (ascending/descending)          M  Sort by mtime (-e flag)1          d  Delete selected file or directory          t  Toggle dirs before files when sorting             -- more --                                        Press q to close
図13 ncdu のヘルプ画面(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1d Delete selected file or directory選択したファイルやディレクトリを削除するキー。削除すると元に戻せないので、内容を確かめてから使う

ヘルプ画面は、q キーで閉じます。ncdu 自体を終了するときも、q キーを押します。

キー動作
↑ ↓(k j)カーソルを上下に動かす
Enter(→)選択したディレクトリを開く
←(h)1つ上のディレクトリに戻る
n s名前順、サイズ順に並べ替える(もう一度押すと昇順と降順が切り替わる)
d選択したファイルやディレクトリを削除する
?ヘルプを表示する
q終了する(ヘルプ画面では、ヘルプを閉じる)

まとめ

ディスクの使用量は、まず df でファイルシステム全体の空き容量と inode を確認し、容量を使っている場所を du や ncdu で絞り込むと調べやすくなります。使うコマンドを、次の表にまとめます。

コマンド用途
df -hファイルシステムごとの容量と使用率を、読みやすい単位で表示する
df -h --total合計の行を追加して表示する
df -iinode の使用状況を表示する
du -hディレクトリごとの使用量を、読みやすい単位で表示する
du -hs指定したディレクトリの合計だけを表示する
du -sh * | sort -hrディレクトリごとの使用量を、多い順に並べる
ncdu画面を操作しながら、容量を使っている場所を探す

ストレージを効率よく管理するには、これらのコマンドで使用量を定期的に確認し、不要なファイルの削除やデータの圧縮を行います。必要に応じて、より大きなストレージにデータを移すことも検討します。

コメント