Le problème silencieux du store Nix
L'un des grands avantages de NixOS est sa capacité à conserver plusieurs générations du système. Une mise à jour ratée ? Un rollback permet de revenir instantanément à un état précédent.
Cette flexibilité a cependant un coût : l'espace disque.
À chaque mise à jour, à chaque compilation, à chaque nouvelle génération, le store Nix accumule de nouveaux objets. Sur une machine disposant d'un SSD confortable, cela peut passer inaperçu pendant plusieurs mois. Sur un portable ou une machine virtuelle plus contrainte, la croissance devient rapidement visible.
Forcement, le débutant est passé à côté, puis après quelques années, le disque est full pendant un rebuild, ça casse le système et tu perds ton temps. C'est ballot, car c'est facile à éviter…
Activer le nettoyage automatique
La première étape consiste à programmer le ramasse-miettes de Nix.
|
|
Cette configuration demande Ă Nix :
d'exécuter automatiquement le garbage collector ;
une fois par semaine ;
en supprimant les générations âgées de plus de trente jours.
L'intérêt est de conserver un historique suffisamment long pour revenir en arrière en cas de problème tout en évitant l'accumulation de plusieurs mois, voire plusieurs années de générations inutilisées.
Optimiser le store
Le nettoyage n'est pas la seule source de gaspillage.
Il arrive fréquemment que plusieurs chemins du store contiennent exactement les mêmes données. Nix est capable de détecter ces doublons et de les remplacer par des liens physiques.
L'activation est triviale :
|
|
Cette option permet souvent de récupérer plusieurs gigaoctets sur une installation utilisée depuis longtemps.
Le gain dépend fortement du nombre de paquets installés, mais comme l'opération est automatique et transparente, il n'y a généralement aucune raison de s'en priver.
Éviter la catastrophe pendant une compilation
Les compilations locales sont particulièrement gourmandes en espace disque.
Lorsque le SSD approche de la saturation, les symptĂ´mes sont parfois surprenants :
échecs de compilation ;
erreurs d'écriture ;
builds interrompus sans explication évidente ;
comportements imprévisibles de certains outils.
Pour limiter ce risque, Nix propose deux seuils :
|
|
Dans cet exemple :
lorsque l'espace libre descend sous 1 Go, Nix déclenche automatiquement un garbage collection ;
il tente ensuite de remonter jusqu'Ă environ 3 Go d'espace libre.
Le mécanisme agit comme une soupape de sécurité. Même après plusieurs semaines sans maintenance, le système dispose d'une chance supplémentaire d'éviter la saturation complète du disque.
La configuration complète
Voici la configuration que j'utilise actuellement :
|
|
Vérifier le résultat
Après un rebuild :
|
|
on peut vérifier la présence du timer :
|
|
et surveiller l'espace occupé par le store :
|
|
Sur une machine utilisée quotidiennement, la différence se remarque surtout après quelques mois. Le store reste à une taille raisonnable, les anciennes générations disparaissent progressivement et les compilations ont moins de chances d'échouer faute d'espace disque.
Conclusion
L'un des pièges de NixOS est que tout fonctionne tellement bien qu'on oublie parfois que le store continue de grandir en arrière-plan.
Quelques lignes de configuration suffisent pourtant à automatiser entièrement son entretien :
nettoyage hebdomadaire ;
suppression des générations anciennes ;
optimisation du stockage ;
protection contre les compilations lorsque l'espace libre devient critique.
Une fois en place, on n'y pense plus. Et c'est probablement le meilleur compliment que l'on puisse faire à une tâche d'administration système.