diff --git a/scripts/store-gc.sh b/scripts/store-gc.sh index b8048267..5742441f 100755 --- a/scripts/store-gc.sh +++ b/scripts/store-gc.sh @@ -156,8 +156,18 @@ if movidos: PYK espacio() { # du sobre una lista de dirs, tolerante a lista vacía + # ⚠ `du --files0-from=-` es de GNU coreutils y **busybox no lo tiene** (medido en la caja takana + # el 2026-09-17): devolvía vacío, así que el gc anunciaba «espacio: superados · huérfanos » y + # nadie podía saber si valía la pena correrlo. Un número que falta se lee como un número chico. + # `xargs du -sk` anda en los dos mundos; el total lo suma awk, en KiB, y se imprime humano. [ -s "$1" ] || { echo "0"; return; } - sed "s|^|$STORE/|" "$1" | tr '\n' '\0' | du -sch --files0-from=- 2>/dev/null | tail -1 | cut -f1 + sed "s|^|$STORE/|" "$1" \ + | xargs -d '\n' du -sk 2>/dev/null \ + | awk '{t+=$1} END { + if (t=="") {print "?"; exit} + if (t>1048576) printf "%.1fG\n", t/1048576; + else if (t>1024) printf "%.0fM\n", t/1024; + else printf "%dK\n", t }' } echo "==> espacio: superados $(espacio "$TMP/superados.txt") · huérfanos $(espacio "$TMP/huerfanos.txt")" @@ -176,7 +186,7 @@ fi MANIFIESTO="work/store-gc-$(date +%Y-%m-%dT%H%M%S).txt" mkdir -p work; cp "$OBJETIVO" "$MANIFIESTO" echo "==> manifiesto de lo borrado: $MANIFIESTO" -ANTES=$(df -h /home 2>/dev/null | tail -1 | awk '{print $4}') +ANTES=$(df -h "$STORE" 2>/dev/null | tail -1 | awk "{print \$4}") sed "s|^|$STORE/|" "$OBJETIVO" | xargs rm -rf # ── GUARDIÁN: NO reportar «borrado» sin comprobarlo ───────────────────────────────────────────── @@ -193,7 +203,10 @@ sed "s|^|$STORE/|" "$OBJETIVO" | xargs rm -rf 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}') +# ⚠ `df -h /home` estaba CABLEADO, y el store casi nunca vive ahí: en gioser es un bind-mount del +# volumen y en una caja takana es `/store`, su propia partición. O sea que el «libres: antes → +# después» medía un sistema de ficheros que el gc ni toca. Se mide el del STORE. +AHORA=$(df -h "$STORE" 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."