従来のdf -hコマンドでは不十分なとき
熟睡している午前3時に「Disk space critical(ディスク容量切迫)」のアラートを受け取ることほど、システム管理者にとっての悪夢はありません。駆け出しの頃、私はすぐにdf -hを叩いていました。このコマンドはどのパーティションがいっぱいかを素早く教えてくれますが、具体的にどのファイルが数十GBを占有しているかについては「沈黙」したままです。
次に、私はdu -sh * | sort -hに苦戦することになりました。この方法は機能しますが、非常に低速です。サブディレクトリを深く掘り下げるたびにコマンドを打ち直さなければならず、作業効率を下げてしまっていました。本番環境のVPS群を半年間管理した後、私はその習慣を完全に捨てました。代わりに、ncduとdufのコンビを使っています。これら2つのツールは非常に軽量でありながら、問題を驚くほど直感的に解決してくれます。
30秒で完了するncduとdufのインストール
どちらもUbuntu 20.04以降の標準リポジトリで利用可能です。私は新しいサーバーを構築する際、いつもhtopと一緒にこの2つをプリインストールしています。
sudo apt update
sudo apt install ncdu duf -y
古いバージョンのUbuntuを使用している場合や、Go言語で書かれた最新のdufを試したい場合は、GitHubから.debファイルをダウンロードできます。しかし、日常的なクリーンアップ作業には、公式リポジトリにあるバージョンで十分すぎるほどです。
duf – dfコマンドの「進化版」
df -hコマンドの結果は非常に素っ気なく、多くのパーティションをマウントしているサーバーでは視認性が悪くなります。duf (Disk Usage/Free Utility) は、カラー表示のテーブル、バーチャート、そしてスマートな自動分類機能によって、この問題を解決します。
基本的な使い方
短いコマンドを1つ打つだけです:
duf
結果は、ローカルデバイス(local devices)、特殊なファイルシステム、ネットワークパーティションに分かりやすく分類されます。Usage(使用率)の列をひと目見るだけで、赤色になっている箇所が危険水域であるとすぐに分かります。
データフィルタリングのコツ
私がdufで最も気に入っている機能は、snapのループデバイスなどの「ノイズ」となるパーティションを隠して、実際の物理ディスクに集中できることです:
duf --only local
また、ディスク容量に空きがあるのにファイルを作成できない(iNode不足エラー)状況に遭遇した場合は、すぐに以下を確認してください:
duf --inodes
ncdu – 大容量ファイルを特定する「虫眼鏡」
dufが「どの家が満杯か」を教えてくれるものだとすれば、ncdu (NCurses Disk Usage) は「どのタンスにゴミが詰まっているか」を現地で確認させてくれるツールです。複雑なコマンドを何個も覚えることなくサーバーを掃除できる、最強の助っ人です。
効率的なスキャンの方法
現在のディレクトリをスキャンするにはncduコマンドを使用します。ただし、ルートディレクトリ / からスキャンする場合は、-xフラグを追加することをお勧めします。このフラグにより、ncduはネットワークドライブや外部マウントされたパーティションをスキャン対象外にするため、速度が2〜3倍速くなります。
sudo ncdu -x /
実例: 私はかつて、100GBのデータをスキャンして、45GBまで膨れ上がったNginxのログファイルを10秒足らずで見つけ出したことがあります。
覚えておくべきショートカットキー
ncduのインターフェースは、矢印キーで非常に簡単に操作できます:
- 上/下: ファイルやディレクトリ間の移動。
- 右 または Enter: ディレクトリの内部へ移動。
- 左: 親ディレクトリに戻る。
- sキー: 容量順にソート(デフォルト)。
- dキー: 選択中のファイルを直接削除。確認メッセージが表示されるので安心です。
実務経験:ディスク容量を「食い潰し」がちな場所
多くのトラブルシューティングを経て、私はまずncduでチェックすべき3つの場所を導き出しました:
1. システムログ (Journald)
/var/logディレクトリは常に第一の容疑者です。特にjournaldは、制限を設けていないと数GBを占有することがあります。以下のコマンドで7日より古いログを削除してみましょう:
sudo journalctl --vacuum-time=7d
2. Dockerリソース
サーバーでDockerを動かしている場合、古いイメージや不要なコンテナによって/var/lib/dockerディレクトリはあっという間に膨れ上がります。注意: この中のファイルを手動で削除しないでください。代わりに、このコマンドを一発叩きましょう:
docker system prune -a --volumes
3. Aptのキャッシュ
/var/cache/apt/archivesディレクトリには古い.debインストールファイルが保存されています。以下のコマンドだけで、数百MBから数GBを解放し、パフォーマンスを最適化できることがあります:
sudo apt-get clean
毎週のチェックルーティン
システムがダウンするまで掃除を待ってはいけません。私は毎週末に2分間かけてクイックチェックを行っています:
dufを打ち、80%を超えているパーティションがないか全体を把握する。ncduを使用して、古いログファイルやバックアップファイルを追跡する。- 確実に不要なものを
dキーで削除する。
正しいツールを手にすれば、Ubuntuのディスク管理は非常に楽になります。ぜひ今日からncduとdufを試してみてください。もう二度と手動でdu -shを打ち込んでいた時代には戻りたくなくなるはずです!

