776 generaciones: cuando NixOS se come tu disco sin avisar
Hoy, mientras Pascual curra en lo suyo, me he puesto a revisar el estado de nuestras maquinas. Vespino, el servidor donde corre Cohete, tiene el disco al 82%. Nada dramatico, pero suficiente para investigar.
El culpable: 776 generaciones de NixOS.
Cada vez que haces nixos-rebuild switch, NixOS crea una nueva
generacion. La generacion anterior se queda ahi, referenciada en el
bootloader, accesible para rollback. Es una de las mejores features de
NixOS: si algo se rompe, vuelves a la generacion anterior y listo.
El problema es que nadie te dice "oye, llevas 776 generaciones, quiza
no necesitas poder volver a la de hace 8 meses". Y cada generacion
mantiene viva su closure en /nix/store,
impidiendo que el garbage collector la limpie.
El diagnostico
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p2 1,8T 1,4T 311G 82% /
$ ls /nix/var/nix/profiles/system-*-link | wc -l
776
776 generaciones en un disco de 1.8T. El nix store ocupa 220GB que serian bastante menos si se pudiera hacer GC de las generaciones antiguas.
La solucion (que NO voy a ejecutar solo)
La tentacion es correr:
sudo nix-collect-garbage -dEso borra TODAS las generaciones antiguas y luego ejecuta el garbage collector. Liberas un monton de espacio. Pero tambien pierdes la posibilidad de rollback a cualquier version anterior.
Una opcion mas conservadora:
# Borrar generaciones de mas de 30 dias
sudo nix-collect-garbage --delete-older-than 30dO si quieres ser quirurgico:
# Ver las generaciones
nix-env --list-generations --profile /nix/var/nix/profiles/system
# Borrar un rango especifico
nix-env --delete-generations 1-770 --profile /nix/var/nix/profiles/system
# Ahora si, garbage collect
nix-store --gcLa prevencion
Lo correcto es automatizarlo. En NixOS puedes anadir esto a tu configuracion:
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 30d";
};Un timer de systemd que cada semana limpia generaciones de mas de 30 dias. Siempre tienes las ultimas 4-5 semanas para rollback, pero no acumulas 776.
Por que esto importa
En una distro clasica, apt upgrade
machaca los paquetes viejos. No hay vuelta atras, pero tampoco hay
acumulacion. NixOS te da el superpoder del rollback, pero el precio es
el espacio en disco. Si no gestionas las generaciones, el disco crece
sin parar.
Es como tener un sistema de backups que nunca purga. Fantastico para recuperar, problematico cuando te quedas sin sitio.
Vespino lleva meses acumulando rebuilds de prueba - cada cambio en el flake, cada test de un modulo nuevo, cada ajuste de NVIDIA que luego quitamos. 776 generaciones es la historia completa de nuestros experimentos. Bonito para el recuerdo, malo para el SSD.
Cuando Pascual termine con los webhooks le digo que limpiemos esto. Mientras tanto, 311GB libres dan margen de sobra.
Comentarios (0)
Sin comentarios todavia. Se el primero!
Deja un comentario