Linuxディスク容量逼迫の調査術|dufとncduで原因を高速特定

LinuxサーバーやWSL2環境を使っていて、「No space left on device」というエラーに突然遭遇したり、ディスク使用率が100%に達してシステムの動作が急激に重くなったりした経験はないでしょうか。

サーバー運用においてディスク容量の逼迫は、データベースの書き込み停止やログ出力の失敗、各種サービスの異常終了を引き起こす重大なトラブルです。しかし、Linux標準コマンドの df -h ではパーティション全体の空き容量しかわからず、du -sh /* では階層を1つ調べるたびにコマンドを打ち直す必要があり、原因特定に長い時間がかかってしまいます。

この記事では、モダンなCLIツール duf でディスク全体の空き状況を一瞬で可視化し、TUI(端末UI)ツール ncdu で容量を圧迫している巨大ディレクトリやファイルを直感的に特定・対処する手順を解説します。初心者の方でも迷わないよう、ツールの導入から実務で役立つ安全な操作方法まで丁寧に説明します。

この記事で行うこと

  • 視覚的なディスク使用量ビューア duf を導入し、マウントポイントごとの空き容量を一目で把握する
  • インタラクティブなTUIツール ncdu を導入し、カーソルキー操作で大容量ファイルを高速にドリルダウン特定する
  • 本番サーバーや実務環境で事故を防ぐための安全オプション(-x や -r)を身につける
  • 肥大化しやすいログやパッケージキャッシュの安全な掃除手順を理解する

前提条件・対象読者

  • 対象OS:Ubuntu(22.04 / 24.04 / 26.04 LTS)、Debian、RHEL系(AlmaLinux / Rocky Linux / Fedora)、Arch Linux、WSL2
  • 必要権限:パッケージのインストールやシステムディレクトリのスキャンを行うための sudo 権限
  • 対象読者:LinuxサーバーやWSL2で容量不足エラーに直面した方、従来の df や du コマンドに使いにくさを感じている方

なぜ標準のdf・duコマンドでは時間がかかるのか

Linuxのディスク容量を確認する際、古くから使われている標準コマンドにはそれぞれ使いづらい点があります。

従来の調査フローにおける2大ストレス

  1. df -h の限界 パーティション全体の使用率(例:/dev/sda1 が 98% など)はわかりますが、具体的にどのディレクトリやファイルが容量を食っているのかは一切わかりません。
  2. du -sh /* 2>/dev/null | sort -hr の限界 ルート直下の各ディレクトリのサイズを一覧表示できますが、例えば /var が大きいとわかった後、次は du -sh /var/*、その次は du -sh /var/log/* のように、階層を掘り下げるたびにコマンドを再実行しなければなりません。ディレクトリのサイズ計算には時間がかかるため、原因にたどり着くまでに何度も待たされることになります。

dufとncduを組み合わせるメリット

この課題を解決するのが、duf と ncdu の組み合わせです。

項目dufncdu
主な役割ディスク全体の空き状況・マウント一覧の可視化特定ディレクトリ内の詳細調査・ファイル特定
置き換える標準コマンドdf コマンドの代替du コマンドの代替
表示形式カラー表・プログレスバー表示端末UI(TUI)による対話的な階層ツリー
特徴一目でどのドライブが満杯かわかる矢印キーでディレクトリを潜りながら原因を探せる

実務では、まず duf で「どのマウントポイントが逼迫しているか」を把握し、次にその領域に対して ncdu を実行して「何が容量を食っているか」を突き止める流れが最も効率的です。

手順1:dufを使える状態にしてディスク全体を把握する

まずは、ディスク全体の利用状況を美しく整理して表示してくれる duf(Disk Usage/Free Utility)を使える状態にします。

ディストリビューション別のインストール方法

お使いのLinux環境に合わせて、以下のコマンドを実行してください。

Ubuntu / Debian系の場合:

sudo apt update
sudo apt install duf

※Ubuntu 22.04 LTS以降およびDebian 12以降であれば、標準リポジトリからそのままインストール可能です。

Fedora系の場合:

sudo dnf install duf

RHEL / AlmaLinux / Rocky Linux系の場合:

sudo dnf install epel-release
sudo dnf install duf

※RHEL系では、EPEL(Extra Packages for Enterprise Linux)リポジトリを有効化することでインストールできます。

Arch Linux系の場合:

sudo pacman -Sy duf

※Arch Linuxでは事前にパッケージデータベースの同期(-Sy)を行ってください。なお、Windows上のMSYS2環境の pacman には duf が収録されていないため、Windows環境では後述のScoop(scoop install duf)やGitHubリリースのバイナリをご利用ください。

macOS(Homebrew)の場合:

brew install duf

インストールが完了したら、バージョン確認コマンドを実行して正常にインストールされたか確認します。

duf --version

dufでディスク使用量を表示する

インストールが完了したら、ターミナルで duf と入力して実行します。

duf

実行すると、ターミナルの横幅に合わせて自動調整された美しいカラーテーブルが表示されます。

  • Local Devices:ローカルストレージ(SSDやHDD、ルートパーティションなど)
  • Mounted Devices:マウントされた外部ドライブやネットワークドライブ
  • Special Devices:tmpfsなどの仮想メモリファイルシステム

各行には、マウントポイント(Mounted on)、ファイルシステム形式(Type)、合計容量(Size)、使用量(Used)、空き容量(Avail)、および直感的なカラーバー付きの使用率(Usage)が表示されます。使用率が危険水域に達しているドライブは赤系統で強調されるため、どのパーティションが逼迫しているかが一瞬で判断できます。

覚えておくと便利な実務オプション

実務でよく使う duf のオプションをいくつか紹介します。

ローカルドライブのみに絞り込んで表示したい場合:

duf --only local

Dockerコンテナや仮想ファイルシステム(tmpfs)が多く存在する場合、ローカルストレージだけに絞ることで画面が見やすくなります。

使用率(Usage)順に並べ替えたい場合:

duf --sort usage

容量(Size)順に並べ替えたい場合:

duf --sort size

注意点として、duf の --sort オプションはツール内部の仕様により「昇順(小さい順・低い順)」でソートされます。現行のバージョンには降順(大きい順)にするオプションが用意されていないため、最も使用率が高いドライブや最も容量が大きいドライブは、テーブルの「一番下(末尾)」に表示される点に留意してください。

手順2:ncduを使える状態にして原因ディレクトリを深掘りする

duf で逼迫しているマウントポイント(多くはルート / や /var/home など)が特定できたら、次はどのディレクトリやファイルが肥大化しているのかを ncdu(NCurses Disk Usage)で調査します。

ディストリビューション別のインストール方法

ncdu は主要なディストリビューションの公式リポジトリに収録されています。

Ubuntu / Debian系の場合:

sudo apt update
sudo apt install ncdu

Fedora系の場合:

sudo dnf install ncdu

RHEL / AlmaLinux / Rocky Linux系の場合:

sudo dnf install epel-release
sudo dnf install ncdu

※RHEL系では、EPELリポジトリを有効化することでインストールできます。

Arch Linux系の場合:

sudo pacman -Sy ncdu

※Windows上のMSYS2環境でも、pacman -S ncdu でそのままインストール可能です。

macOS(Homebrew)の場合:

brew install ncdu

バージョン確認コマンドを実行し、導入されたことを確認します。

ncdu -v

ncduの実行と実務で必須の安全オプション

ncdu は引数にスキャンしたいディレクトリパスを指定して起動します。

現在のディレクトリをスキャンする場合:

ncdu

特定のディレクトリ(例:/var/log)をスキャンする場合:

sudo ncdu /var/log

システム全体(ルートディレクトリ /)を調査する場合は、以下のコマンドを実行します。

sudo ncdu -x /

ここで付与しているオプションには、実務上非常に重要な意味があります。

  1. sudo を付ける理由 システムディレクトリ(/var/root/etc など)には一般ユーザーでは読み取り権限がないファイルが多く存在します。sudo を付けずに実行すると大量の Permission denied が発生し、正しい容量計算ができません。
  2. -x オプション(同一ファイルシステム限定)の重要性 -x は、指定したディレクトリと同じファイルシステム内のみをスキャンし、別のマウントポイントをまたがないようにするオプションです。これがないと、NFSなどのネットワークストレージ、外付けハードディスク、あるいはWSL2環境でマウントされているWindows側の巨大な C:\ ドライブ(/mnt/c)まで延々とスキャンしてしまい、スキャンがいつまでも終わらなくなります。ルート直下の調査では必ず -x を指定するのが鉄則です。
  3. -r オプション(読み取り専用モード) ncdu には画面上からファイルを削除できる機能が備わっていますが、誤操作で重要なシステムファイルを消してしまう危険があります。削除を行わず調査だけに専念したい場合は、以下のように -r を付けて起動すると安心です。
sudo ncdu -rx /

ncduの画面操作方法

スキャンが完了すると、容量の大きい順にディレクトリとファイルが並んだTUI画面が表示されます。

主なキーボード操作は以下の通りです。

キー動作内容
 /  または k / jカーソルの上下移動
Enter または  / l選択したディレクトリに入る(深掘り)
 または h1つ上の親ディレクトリに戻る
sサイズ順(昇順/降順)に並び替え
nファイル名順に並び替え
gグラフ表示の切り替え(グラフ+パーセント、パーセントのみ、非表示)
c子アイテム数の表示切り替え
i選択中のアイテムの詳細情報(フルパス、更新日時など)を表示
d選択中のファイルまたはディレクトリを削除(確認プロンプトあり)
b現在のディレクトリでシェルを一時起動
qncduを終了する
?キーボードヘルプを表示

矢印キーを使って「サイズの大きいフォルダ」へと順番に潜っていくだけで、数秒から数十秒で容量を圧迫している真犯人のファイル(巨大化したログファイルやコアダンプ、肥大化したキャッシュなど)にたどり着くことができます。

手順3:原因別の安全な容量削減とクリーンアップ

ncdu で肥大化している場所が特定できたら、適切に対処して空き容量を回復させます。Linux環境で容量不足を引き起こしやすい4大原因と、その安全な対処法を紹介します。

1. システムログ(systemd-journald)の肥大化

/var/log/journal/ にあるsystemdのジャーナルログがギガバイト単位で溜まっているケースは非常によくあります。 このログは直接 rm で消すのではなく、専用の管理コマンド journalctl を使って安全に削減します。

現在のジャーナルログ使用量を確認するコマンド:

journalctl --disk-usage

ログを直近の容量(例:合計500MBまで)に制限して古いものを自動削除するコマンド:

sudo journalctl --vacuum-size=500M

あるいは、保存期間(例:直近7日間分のみ残す)で削除するコマンド:

sudo journalctl --vacuum-time=7d

2. パッケージマネージャのキャッシュ蓄積

UbuntuやDebianでは、過去にインストールしたパッケージのアーカイブファイル(.deb)が /var/cache/apt/archives/ に溜まり続けます。

不要になった古いパッケージキャッシュを一括削除するコマンド:

sudo apt clean

過去のカーネルアップデートなどで使われなくなった孤立パッケージを掃除するコマンド:

sudo apt autoremove --purge

これらを実行するだけで、数GBの空き容量が一瞬で確保できることがあります。

3. Docker関連データ(/var/lib/docker)の肥大化

/var/lib/docker が数十GB以上を消費している場合、使われなくなったコンテナイメージ、停止中コンテナ、ビルドキャッシュ、不要なボリュームが原因です。 不要なDockerリソースを一括でクリーンアップする手順については、以下の当サイト個別記事で詳しく解説しています。

4. WSL2環境での仮想ディスク肥大化

WSL2上でLinuxを使っている場合、Linux内でファイルを削除しても、Windows側の仮想ディスクファイル(ext4.vhdx)は自動的に縮小されず、WindowsのCドライブ容量が圧迫されたままになります。 WSL2の肥大化したディスクを安全に圧縮してWindowsの空き容量を取り戻す手順は、以下の記事を参考にしてください。

うまくいかない場合の確認ポイント

Permission deniedのエラーが多発する

原因: root権限が必要なディレクトリを一般ユーザー権限でスキャンしようとしています。

対処法: ncdu の前に必ず sudo を付与して実行してください。

sudo ncdu -x /

ncduでファイルを削除したのに空き容量が増えない

原因: Linuxでは、起動中のプロセスがファイルを開いたまま(Open状態)にしていると、ファイルシステム上で rm して名前を消しても、そのプロセスが終了するまでディスク上のブロックが解放されません。肥大化したログファイルを直接削除した場合によく発生します。

対処法: 削除された後もプロセスに掴まれているファイルを確認します。

sudo lsof +L1

または以下のコマンドで確認できます。

sudo lsof | grep deleted

一覧に表示されたプロセスのサービス名(例:nginx、apache2、syslogなど)を確認し、そのサービスを再起動します。

sudo systemctl restart nginx

サービスが再起動されるとファイルディスクリプタが解放され、空き容量が即座に回復します。

ncduのスキャンに時間がかかりすぎる

原因: 数百万個以上のファイルが存在する大規模ファイルサーバーなどで画面の描画更新がボトルネックになっているか、外部マウントを巻き込んでいる可能性があります。

対処法: 画面の描画頻度を下げてスキャンを高速化する -q(Quietモード)を使用するか、怪しいディレクトリに絞ってスキャンを実行してください。

sudo ncdu -qx /var

よくある質問

Q. 本番サーバーでncduを実行しても安全ですか?

A. はい、基本的には安全です。ただし、ディスクI/Oが発生するため、データベースが高負荷で稼働しているピーク時間帯の全スキャンは避けるのが無難です。また、誤削除を防ぐために必ず -r オプションを付けて読み取り専用モードで起動することをおすすめします。

Q. dufとdfで表示される空き容量にわずかな差があるのはなぜですか?

A. Linuxのext4などのファイルシステムでは、rootユーザー用に全体の約5%が緊急用予約領域(Reserved Blocks)として確保されています。df は一般ユーザーが書き込み可能な容量を表示するのに対し、duf はファイルシステム全体の物理的な空き容量を基に計算している場合があるため、わずかな差異が生じることがあります。

Q. ncduのバージョン1系と2系は何が違いますか?

A. ncdu 1.x系はC言語で実装された長期サポート(LTS)版であり、多くのLinuxディストリビューションの安定版パッケージとして広く利用されています。一方の2.x系はプログラミング言語Zigでゼロから再設計されたバージョンで、メモリ消費量の削減とスキャンのさらなる高速化が図られています。基本的な操作方法や主要オプションはどちらも共通です。

Q. WindowsやMSYS2環境でも使えますか?

A. はい、利用可能です。 ncdu はMSYS2のパッケージマネージャ(pacman -S ncdu)から直接インストールできます。 一方、duf はMSYS2公式リポジトリには登録されていないため、Windowsのパッケージマネージャ Scoop(scoop install duf)や Chocolatey(choco install duf)を使うか、GitHubの公式ReleasesからWindows用バイナリ(zip)をダウンロードしてPATHを通すことで、MSYS2ターミナルやPowerShell上からも快適に利用できます。

まとめ

Linuxでディスク容量が逼迫した際の調査手順をまとめます。

  1. 全体把握:duf コマンドで、どのパーティション・マウントポイントが満杯になっているかを確認する
  2. 原因特定:sudo ncdu -x [対象パス] を実行し、TUI上で大容量ディレクトリやファイルを特定する
  3. 安全確保:本番環境では誤操作を防ぐため読み取り専用モード(-r)を活用し、別マウント横断を防ぐ -x を必ず付ける
  4. 適切に対処:ジャーナルログの制限削除(journalctl --vacuum-size)やパッケージキャッシュ削除(apt clean)など、安全な方法で容量を解放する
  5. プロセス確認:削除しても容量が戻らない場合は lsof +L1 で削除済みオープンファイルを確認し、サービスを再起動する

従来の df や du コマンドで苦労していた方は、ぜひ duf と ncdu をサーバーやWSL2環境に導入し、スムーズな容量管理に役立ててください。

次に読むおすすめ記事

Linuxの全体像や初期設定、サーバー構築手順、トラブル解決を体系的に学びたい方は、以下の完全ガイドもあわせて参考にしてください。

Ubuntu・Linux完全ガイド|初期設定からサーバー構築まで
UbuntuをはじめとするLinux環境は、エンジニアの日常に欠かせない存在となっています。自宅・職場を問わず、開発サーバーの構築、WSL2上のLinux活用、デスクトップ環境のカスタマイズなど、Linuxを活用する場面は年々広がっています…

また、日常的に使うLinuxの基本コマンドを総復習したい方は、以下のチートシート記事もおすすめです。

【初心者向け】Ubuntuでまず覚える基本コマンド一覧&チートシート
UbuntuをインストールしてデスクトップやWSL2の環境が整ったあと、多くの初学者が最初に直面するのが「黒い画面(ターミナル)で何をどう入力すればいいかわからない」という壁ではないでしょうか。WindowsやMacのGUI操作(マウス操作…

参考情報