Liens durs, symboliques et inodes
« Le disque est plein mais du ne voit rien » (fichier supprimé encore ouvert !), backup par liens durs, déploiements atomiques par symlink : les liens expliquent les m…
Prérequis (cursus dev) : naviguer, manipuler les fichiers.
Pourquoi
« Le disque est plein mais du ne voit rien » (fichier supprimé encore ouvert !), backup par liens durs, déploiements atomiques par symlink : les liens expliquent les mystères et outillent les pros.
Concepts
- inode : la fiche du fichier (métadonnées + blocs). Le nom n'est qu'une entrée de dossier qui pointe vers l'inode.
ls -imontre le numéro. - Lien dur : deuxième nom pour le MÊME inode (même système de fichiers !). Supprimer un nom ne libère que si c'est le dernier + aucun process ouvert. D'où :
dfplein +duvide = fichier supprimé mais ouvert (lsof | grep deleted!). - Lien symbolique : petit fichier qui contient un chemin (franchit les filesystems, pointe vers du vide possible = lien cassé).
ln -s cible lien, chemins relatifs préférables (déplaçable). - Déploiement atomique :
releases/2026-01-02/+current -> releases/...: bascule = unln -sfn(atomique !), rollback = repointer. Zéro downtime de fichiers.
Exemple : comprendre et déployer
ls -i fichier && ln fichier dur && ls -i fichier dur # même inode !
lsof | grep deleted # les fantômes qui retiennent du disque
ln -sfn releases/v2 current # bascule atomique (-f -n : remplace le lien, pas la cible !)
Cas réel
Log supprimé « pour faire de la place », disque toujours plein : le daemon l'avait ouvert (17 Go retenus, invisibles à du). lsof | grep deleted → restart du service → 17 Go libérés. Depuis : rotation (jamais de rm sur un log ouvert !) + monitoring inode aussi (df -i : inodes épuisés = même panne, autre compteur).
Pièges
ln -sfnsans-nsur un lien vers dossier : crée le lien DEDANS au lieu de remplacer.-ntoujours avec-f.- Liens symboliques absolus (
/opt/app/...) : cassés après déplacement/chroot. Relatifs préférables. - Backup qui suit les symlinks (
tar -h?) : boucle infinie possible (lien vers parent !). Savoir ce qu'on archive.
À retenir
inode = le fichier, noms = pointeurs ; supprimé+ouvert = fantôme (lsof) ; deploys par symlink atomique.