diff --git a/docs/28-servidor-de-produccion.md b/docs/28-servidor-de-produccion.md index b594053c..c03877b0 100644 --- a/docs/28-servidor-de-produccion.md +++ b/docs/28-servidor-de-produccion.md @@ -2616,6 +2616,57 @@ no se corrió allá. ⇒ **puerta 4 en verde.** Con eso, de las ocho quedan sólo las dos a medias (5 y 7) y ninguna en rojo. +### 6.44 🧹 Primer `store-gc` en la caja: 26,8 G — y dos bugs que sólo salen fuera de GNU *(2026-09-17)* + +El store estaba al **91 %** (8,2 G libres) justo cuando la caja pasó a ser hub, que es la peor +combinación: un hub sella y cosecha. + +``` + antes: 84,7 G usados · 8,2 G libres · 91 % · 1657 artefactos + después: 57,9 G usados · 35,0 G libres · 62 % · 1320 artefactos +``` + +**337 artefactos superados borrados y verificados (0 sobrevivientes), 26,8 G.** El default del gc no +toca los **150 huérfanos** —`11,4 G`, los que son el único ejemplar de su nombre— y eso está bien: +borrarlos es la diferencia entre «se reconstruye en dos minutos» y «hay que rehacer la torre». + +#### El control que hay que correr DESPUÉS de un gc en esta caja, y que no es obvio + +**11 binarios de `/usr/bin` son symlinks que apuntan DENTRO del store** — los daemons que se +instalaron estos dos días. Un gc que borre el artefacto equivocado no rompe el store: rompe el +`/usr/bin` de una máquina en producción. Antes de `--aplicar` se comprobó que los 11 enlazan al hash +**vigente** (y por lo tanto están en el conjunto protegido); después, que los 11 siguen resolviendo y +que los 21 entes siguen corriendo. Los dos controles pasaron. + +⚠ Y la advertencia que el propio gc imprime y que en esa caja **no se puede satisfacer**: «sin +`.config` legible (ni `/proc/config.gz` ni `/boot/config-…`) ⇒ NO se protege ningún kernel por esta +vía». Con el default da igual; con `--huerfanos` en una máquina que arranca de su store, no. + +#### Los dos números que el gc no sabía decir + +Funcionó, pero sus dos cifras salieron vacías — y son las que uno mira para decidir si vale la pena: + +``` + ==> espacio: superados · huérfanos + ==> 337 artefactos borrados y VERIFICADOS · libres: Available → Available +``` + +1. **`du -sch --files0-from=-` es de GNU y busybox no lo tiene** ⇒ `espacio()` devolvía vacío. *Un + número que falta se lee como un número chico.* +2. **`df -h /home` estaba cableado** y el store no vive ahí: en gioser es un bind-mount del volumen, + en la caja es `/store`. Sin `/home`, `tail -1` se quedó con la CABECERA — de ahí + «Available → Available». + +Arreglados los dos… y el primer arreglo **también estaba mal**: `xargs -d '\n'` es otra extensión +GNU. Eso imprimió `huérfanos ?`, y ese `?` es deliberado: cuando el total no se puede calcular, la +función lo DICE en vez de escribir 0 — un cero inventado habría dicho «no hay nada que ganar» con +11,4 G en huérfanos. Con `tr '\n' '\0' | xargs -0`, que busybox sí tiene, la caja ya contesta +**`espacio: superados 0 · huérfanos 11.4G`**. + +⇒ Van **cinco** tropiezos del mismo día con la misma forma (`/dev/tcp`, expansión de llaves, +`find -newermt`, sustitución de procesos, y estos dos). El patrón ya no es anécdota: **un script del +hub escrito en una máquina GNU no corre en la caja hasta que se prueba ahí.** + ## 7. Reusar los scripts que ya existen, y no escribir de nuevo Pedido explícito del usuario. El inventario de lo que ya hace el trabajo: