Skip to content
U UOpsLab
infra-devops tutoriels Linux Debian ncdu

ncdu sous Linux : libérer un disque plein avec les versions 1 et 2

Installer et utiliser ncdu sous Linux pour trouver ce qui remplit un disque, avec les différences entre ncdu 1.x et ncdu 2.x.

R

Raynal.T

12 min de lecture
Comparaison de ncdu 1.x et ncdu 2.x pour analyser un disque Linux plein

Il y a des outils que l’on utilise depuis des années. Ils ne font pas cinquante choses, n’ont pas une énorme interface Web et ne demandent pas de déployer dix conteneurs Docker… mais ils font parfaitement ce qu’on leur demande.

ncdu fait clairement partie de cette catégorie.

Je l’utilise depuis longtemps et il m’a souvent fait gagner un temps précieux pour répondre à cette grande question existentielle de l’administrateur système :

Mais qu’est-ce qui me bouffe tout l’espace disque ? 😅

ncdu, pour NCurses Disk Usage, est un analyseur d’utilisation disque qui fonctionne directement dans un terminal. On se connecte en SSH, on lance un scan et, quelques instants plus tard, on sait généralement où sont passés nos précieux gigaoctets.

Directement en SSH

Pas d’interface graphique, d’agent ou de service supplémentaire à déployer.

Le coupable en quelques minutes

L’arborescence est triée pour faire ressortir les fichiers et dossiers les plus lourds.

Un outil, deux branches

ncdu 1.x reste maintenu, tandis que ncdu 2.x apporte le scan parallèle et un nouvel export.

Le projet est développé par Yoran Heling, alias Yorhel, et distribué sous licence MIT. Son site officiel et son dépôt regroupent les téléchargements, la documentation et le code source.

1. Comprendre la différence entre ncdu 1 et ncdu 2

Petit détail intéressant : deux branches de ncdu sont maintenues en parallèle. La version proposée par votre distribution n’est donc pas forcément la branche 2.x.

ncdu 1.x

  • ➡️ Branche historique écrite en C
  • ➡️ Maintenue comme branche LTS
  • ➡️ Très stable et largement disponible
  • ➡️ Idéale pour les diagnostics classiques

ncdu 2.x

  • ➡️ Réécriture moderne en Zig
  • ➡️ Scan multithread depuis la version 2.5
  • ➡️ Export binaire compressé depuis la version 2.6
  • ➡️ Mieux adaptée aux très grosses arborescences

2. Installer ncdu sous Linux

Selon la machine et le contexte, trois méthodes sont possibles : utiliser le paquet de la distribution, transférer un binaire sur un serveur isolé ou installer directement ncdu 2.

Méthode 1 : installer ncdu 1 avec APT

Sur Debian ou Ubuntu, l’installation classique reste extrêmement simple :

sudo apt update
sudo apt install ncdu

On vérifie ensuite la version installée :

ncdu --version

Puis on peut analyser le répertoire courant :

ncdu

Un chemin précis :

ncdu /var

Ou l’ensemble du système :

sudo ncdu /

Personnellement, sur un serveur, j’utilise généralement :

sudo ncdu -x /

L’option -x, ou --one-file-system, demande à ncdu de rester sur le même système de fichiers. C’est particulièrement pratique lorsqu’un serveur possède plusieurs volumes, des partages NFS ou CIFS et d’autres montages dans son arborescence.

Méthode 2 : équiper un vieux serveur sans Internet

C’est justement une situation dans laquelle ncdu m’a déjà bien dépanné.

Je me suis retrouvé sur un ancien serveur Red Hat, complètement isolé du WAN, sans possibilité de mettre à jour les dépôts ou d’installer tranquillement un paquet avec yum.

Dans ce cas, le principe est simple : récupérer un binaire statique sur une autre machine, le copier sur le serveur et le lancer directement.

Vérifier l’architecture

Sur le serveur :

uname -m

Par exemple :

x86_64

Depuis une machine connectée à Internet, téléchargez ensuite un binaire compatible depuis la page officielle des téléchargements, puis transférez-le :

scp ncdu utilisateur@serveur:/tmp/

Sur le serveur isolé :

chmod +x /tmp/ncdu
/tmp/ncdu -x /

Pour une intervention ponctuelle, il n’est même pas nécessaire d’installer réellement ncdu : on copie le binaire, on trouve les 150 Go de logs oubliés depuis 2018, puis on le retire. 😁

Pour le conserver :

sudo install -m 0755 /tmp/ncdu /usr/local/bin/ncdu

Méthode 3 : passer à ncdu 2 sans compiler Zig

Sur un serveur Linux récent, quitte à installer ncdu aujourd’hui, j’avais envie de regarder plus sérieusement du côté de ncdu 2.

Au moment de cette publication, la dernière archive source est ncdu 2.9.2. Elle doit être compilée avec une version compatible de Zig. Installer et gérer un compilateur uniquement pour obtenir un petit analyseur de disque… personnellement : non. 😅

Heureusement, le développeur fournit également des binaires Linux statiques officiels. La dernière version précompilée disponible est alors ncdu 2.9.1, avec des archives pour x86, x86_64, ARM et AArch64.

Installer le binaire officiel de ncdu 2

L’exemple suivant concerne une machine Linux x86_64.

1. Vérifier l’architecture et la version existante

uname -m
ncdu --version
command -v ncdu

Si ncdu a été installé avec APT et que vous souhaitez le remplacer :

sudo apt remove ncdu

2. Télécharger ncdu 2.9.1

On travaille dans un répertoire temporaire :

cd /tmp
wget https://dev.yorhel.nl/download/ncdu-2.9.1-linux-x86_64.tar.gz

Si l’ancienne version installée par APT se trouvait dans /usr/bin/ncdu, Bash peut encore garder ce chemin en cache. Il faut alors réinitialiser sa table de hachage :

hash -r

3. Extraire et installer le binaire

tar -xzf ncdu-2.9.1-linux-x86_64.tar.gz
./ncdu --version
sudo install -m 0755 ncdu /usr/local/bin/ncdu
ncdu --version

Voilà. C’est exactement comme ça que j’aime installer ce genre de petit outil.

3. Utiliser ncdu au quotidien

Une fois le scan terminé, la navigation se fait entièrement au clavier.

| Touche                 | Action                          |
| ---------------------- | ------------------------------- |
| `↑` / `↓` ou `j` / `k` | Naviguer dans la liste          |
| `Entrée` / `→`         | Entrer dans un répertoire       |
| `←`                    | Revenir au répertoire parent    |
| `s`                    | Trier par taille                |
| `n`                    | Trier par nom                   |
| `i`                    | Afficher les informations       |
| `d`                    | Supprimer l’élément sélectionné |
| `q`                    | Quitter                         |

Analyser en lecture seule

L’option -r désactive la suppression depuis l’interface :

sudo ncdu -r -x /

Utilisée deux fois, elle désactive également l’ouverture d’un shell depuis ncdu :

sudo ncdu -rr -x /

Les fonctions intéressantes de ncdu 2

Scanner avec plusieurs threads

Depuis ncdu 2.5, plusieurs répertoires peuvent être parcourus en parallèle. Par exemple avec huit threads :

sudo ncdu -x -t8 /

Le scan parallèle n’est pas activé par défaut. Sur un SSD ou un NVMe contenant énormément de fichiers, il peut apporter un gain intéressant. Sur un vieux disque mécanique qui cherche déjà désespérément ses secteurs, huit threads ne vont pas forcément lui redonner une seconde jeunesse. 😅

Exporter un scan volumineux

ncdu 2.6 a introduit un format d’export binaire avec compression intégrée. Il fonctionne bien avec le scan parallèle et permet de parcourir une arborescence trop volumineuse pour tenir entièrement en mémoire.

sudo ncdu -x -t8 -O analyse.ncdu /

On ouvre ensuite le résultat sans rescanner le serveur :

ncdu -f analyse.ncdu

C’est pratique pour conserver l’état d’un serveur à un instant donné, lancer le scan pendant une fenêtre d’intervention ou analyser tranquillement plusieurs millions d’éléments.

Exclure ce qui est hors sujet

Pour ignorer un motif de fichier ou de répertoire :

sudo ncdu -x / --exclude 'backup-*'

Pour exclure un chemin monté, -x reste souvent le choix le plus simple. Si vous utilisez --exclude, gardez en tête que l’option attend un motif portant sur le nom d’une entrée, pas un chemin absolu arbitraire.

Collecter plus de métadonnées

L’option -e collecte notamment le propriétaire, les permissions et la date de modification, même s'il est plus consommateur de mémoire il est utile quand la taille seule ne suffit pas pour comprendre :

sudo ncdu -e -x /

Pour aller à l'essentiel

Voici le trio de commandes que j'utilise généralement

df -h   --> vérifie l’espace disque
df -i   --> vérifie les inodes
sudo ncdu -x /  --> aide à comprendre qui est responsable du carnage 😁

Personnaliser l’interface de ncdu

ncdu permet de définir une configuration permanente afin de ne pas avoir à retaper les mêmes options à chaque lancement.

Sur un serveur, le plus simple est d’utiliser directement la configuration globale :

sudo nano /etc/ncdu.conf

Cela permet d’avoir la même configuration quel que soit l’utilisateur qui lance ncdu, y compris avec sudo.

Configuration globale

/etc/ncdu.conf

Elle s’applique par défaut à tous les utilisateurs du serveur.

Configuration personnelle

~/.config/ncdu/config

Elle permet à chaque utilisateur de remplacer les préférences globales.

Les options disponibles peuvent varier légèrement entre ncdu 1.x et ncdu 2.x. La documentation officielle complète est disponible ici :

Exemple de configuration avec ncdu 2

Voici par exemple la configuration que j’utilise pour avoir une interface un peu plus lisible :

--color dark-bg
--show-graph
--show-percent
--show-itemcount
--group-directories-first
--sort=disk-usage-desc

Meilleur contraste

Couleurs et barre graphique d’occupation.

Plus d’informations

Pourcentage utilisé et nombre d’éléments.

Répertoires en premier

Les dossiers sont regroupés avant les fichiers.

Tri décroissant

Les éléments les plus lourds apparaissent en tête.

Il suffit ensuite de lancer normalement :

ncdu

Ou, pour analyser le filesystem racine sans traverser les autres points de montage :

sudo ncdu -x /

Les préférences définies dans /etc/ncdu.conf seront automatiquement appliquées.

Il est possible d’aller beaucoup plus loin dans la personnalisation : affichage des dates de modification, style des graphiques, mode lecture seule, ordre de tri ou encore affichage des tailles partagées avec ncdu 2.

Le plus simple reste de consulter la documentation correspondant à votre version pour connaître l’ensemble des options disponibles.

4. ncdu 1 ou ncdu 2 : lequel choisir ?

Pour moi, les deux ont toujours leur intérêt.

Diagnostic rapide

Le paquet de la distribution et ncdu 1.x suffisent largement.

Vieux serveur isolé

Choisissez un binaire statique adapté à son architecture.

Serveur et stockage récents

Préférez ncdu 2.x pour profiter de ses meilleures performances.

Très grosse arborescence

Utilisez ncdu 2.x avec -t et -O.

Sur beaucoup de serveurs, cette séquence reste suffisante :

sudo apt install ncdu
sudo ncdu -rr -x /

Sur une machine récente avec des millions de fichiers, ncdu 2 apporte en revanche de vrais avantages sans imposer de compilation grâce aux binaires statiques officiels.

5. Pour finir

ncdu fait partie de ces outils Linux que j’aime beaucoup : il est simple, léger et efficace.

Pas besoin d’une stack de monitoring complète pour répondre à une question toute simple :

Qu’est-ce qui remplit mon disque ?

Quand un serveur affiche fièrement /dev/mapper/root 100% et qu’il faut rapidement comprendre pourquoi, avant d’enchaîner du, find, sort, awk et grep dans une commande de trois kilomètres récupérée dans l’historique Bash d’un collègue parti depuis 2017… essayez simplement :

sudo ncdu -rr -x /

Parfois, il ne faut pas chercher plus compliqué. 😉

Liens officiels

Article basé sur la documentation officielle du projet ncdu et sur mon utilisation de l’outil en administration système.

Cet article vous a-t-il été utile ?

Votre retour aide à mieux choisir les prochains sujets.

0
0
Retour aux articles
Share:

Suivre UOpsLab

Nouveaux articles, retours terrain et notes de lab.