store-gc: guardián — no reportar «borrado» sin comprobarlo
El script informó «364 artefactos borrados · libres: 24G → 48G» y no había borrado ninguno: los 364 de su propio manifiesto seguían enteros en el store. `xargs rm -rf` salió con 0 y el echo se lo creyó. Se reprodujo: corriéndolo en SEGUNDO PLANO el borrado no se materializa; en primer plano sí. Da igual la causa: un rm que devuelve 0 no es prueba de que el fichero se fue. La válvula de escape del disco estaba rota EN SILENCIO y encima reportaba éxito, que es peor que fallar — el disco llegó al 98% mientras yo creía haber liberado 24G. Ahora recuenta sobre el filesystem y sale distinto de cero si sobrevivió algo. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+23
-1
@@ -110,4 +110,26 @@ mkdir -p work; cp "$OBJETIVO" "$MANIFIESTO"
|
|||||||
echo "==> manifiesto de lo borrado: $MANIFIESTO"
|
echo "==> manifiesto de lo borrado: $MANIFIESTO"
|
||||||
ANTES=$(df -h /home 2>/dev/null | tail -1 | awk '{print $4}')
|
ANTES=$(df -h /home 2>/dev/null | tail -1 | awk '{print $4}')
|
||||||
sed "s|^|$STORE/|" "$OBJETIVO" | xargs rm -rf
|
sed "s|^|$STORE/|" "$OBJETIVO" | xargs rm -rf
|
||||||
echo "==> $(wc -l < "$OBJETIVO") artefactos borrados · libres: $ANTES → $(df -h /home 2>/dev/null | tail -1 | awk '{print $4}')"
|
|
||||||
|
# ── GUARDIÁN: NO reportar «borrado» sin comprobarlo ─────────────────────────────────────────────
|
||||||
|
# 2026-08-07: este script informó «364 artefactos borrados · libres: 24G → 48G» y NO había borrado
|
||||||
|
# NINGUNO — los 364 del manifiesto seguían enteros en el store, y los 24G que se liberaron esa vez
|
||||||
|
# vinieron de otro lado. `xargs rm -rf` salió con 0 y el `echo` de abajo se lo creyó. (Se reprodujo:
|
||||||
|
# corriendo el script en SEGUNDO PLANO el borrado no se materializa; en primer plano sí. Da igual la
|
||||||
|
# causa: un `rm` que devuelve 0 no es prueba de que el fichero se fue.)
|
||||||
|
#
|
||||||
|
# Consecuencia real: la válvula de escape del disco estaba rota EN SILENCIO, y encima reportaba éxito,
|
||||||
|
# que es peor que fallar. El disco llegó al 98%.
|
||||||
|
#
|
||||||
|
# Por eso ahora se RECUENTA sobre el filesystem y el script sale distinto de cero si sobrevivió algo.
|
||||||
|
QUEDAN=0
|
||||||
|
while IFS= read -r l; do [ -e "$STORE/$l" ] && QUEDAN=$((QUEDAN+1)); done < "$OBJETIVO"
|
||||||
|
PEDIDOS=$(wc -l < "$OBJETIVO")
|
||||||
|
AHORA=$(df -h /home 2>/dev/null | tail -1 | awk '{print $4}')
|
||||||
|
if [ "$QUEDAN" -gt 0 ]; then
|
||||||
|
echo "!! BORRADO INCOMPLETO: $QUEDAN de $PEDIDOS artefactos SIGUEN en $STORE."
|
||||||
|
echo "!! No te fíes del espacio libre de abajo. Reintentá en PRIMER PLANO y volvé a verificar."
|
||||||
|
echo "==> libres: $ANTES → $AHORA"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "==> $PEDIDOS artefactos borrados y VERIFICADOS (0 sobrevivientes) · libres: $ANTES → $AHORA"
|
||||||
|
|||||||
Reference in New Issue
Block a user