montar-trabajo: /var/log se muda al volumen — la raíz son 5,8 G y al llenarse se cae entera
La raíz del anfitrión estaba al 74% con 1,4 G libres, y lo que la llenaba no era
basura acumulada sino una fuente viva: ~100 M de log al día. El log rotado de gitea
pesaba 94 M COMPRIMIDO, y son bots — ClaudeBot 5055 peticiones, más MJ12bot,
SemrushBot y el crawler de Meta martillando /tawasuyu/tawasuyu/compare/null.
Nada que crezca solo debe vivir en una partición cuyo llenado tumba la máquina. El
volumen (sdc, 254 G) tiene 144 G libres y la card ya lo monta, así que /var/log pasa
a ser un bind de /vvv/log, al lado del de /work/sergio que ya existía.
Se elige bind y no symlink a propósito: si el volumen no está, /var/log sigue siendo
el directorio de la raíz y los servicios escriben igual. Un symlink apuntaría a la
nada y los rompería — degradar mal es peor que no proteger.
El bind va ANTES del `test -d /vvv/sergio || exit 0`, no después: un /vvv/sergio
ausente no tiene por qué dejar los logs en la raíz.
Y como el orden de arranque de arje no está declarado (ninguna card usa
requires/provides; las 26 son priority normal), si los daemons ganan la carrera
escribirían a la raíz tapada bajo el bind — el mismo silencio de antes. Por eso se
añade un aviso a stderr cuando el bind no quedó puesto: que falle ruidosamente.
Probado con la rotura, no sólo con el caso feliz: en un mount namespace aislado, con
/var/log desmontado, el script lo remonta (0 -> 74 ficheros, rc=0); y es idempotente
con todo ya montado.
De paso arregla el quoting: la card que corría en /etc había perdido las comillas
respecto a esta y fallaba en silencio desde entonces —`awk NR==2{print }` en vez de
`awk 'NR==2{print $4}'`—, con su log diciendo `awk: cmd. line:1: Unexpected token` y
`montar-trabajo: /vvv libres`, sin el número. Ahora dice `/vvv 144.2G libres`.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Semantic delta
No definition changed: this change is text, documentation or data.
1 files · +2 −2
diff --git a/scripts/servidor/cards/montar-trabajo.json b/scripts/servidor/cards/montar-trabajo.json
index f55ea70e..a65c74e0 100644
--- a/scripts/servidor/cards/montar-trabajo.json
+++ b/scripts/servidor/cards/montar-trabajo.json
@@ -55,8 +55,8 @@
"argv": [
"sh",
"-c",
- "mkdir -p /run/user; chmod 1777 /run/user; for h in /home/*; do u=$(basename \"$h\"); uid=$(id -u \"$u\" 2>/dev/null) || continue; mkdir -p \"/run/user/$uid\"; chown \"$u\" \"/run/user/$uid\"; chmod 700 \"/run/user/$uid\"; done; d=$(blkid -L trabajo 2>/dev/null); test -n \"$d\" || { echo \"montar-trabajo: ningun disco con LABEL=trabajo — el volumen no esta enchufado\" >&2; exit 78; }; mkdir -p /vvv; grep -q \" /vvv \" /proc/mounts || mount \"$d\" /vvv || { echo \"montar-trabajo: no pude montar el volumen\" >&2; exit 78; }; test -d /vvv/sergio || exit 0; mkdir -p /work/sergio; grep -q \" /work/sergio \" /proc/mounts || mount --bind /vvv/sergio /work/sergio; echo \"montar-trabajo: /vvv $(df -h /vvv | awk 'NR==2{print $4}') libres\""
+ "mkdir -p /run/user; chmod 1777 /run/user; for h in /home/*; do u=$(basename \"$h\"); uid=$(id -u \"$u\" 2>/dev/null) || continue; mkdir -p \"/run/user/$uid\"; chown \"$u\" \"/run/user/$uid\"; chmod 700 \"/run/user/$uid\"; done; d=$(blkid -L trabajo 2>/dev/null); test -n \"$d\" || { echo \"montar-trabajo: ningun disco con LABEL=trabajo — el volumen no esta enchufado\" >&2; exit 78; }; mkdir -p /vvv; grep -q \" /vvv \" /proc/mounts || mount \"$d\" /vvv || { echo \"montar-trabajo: no pude montar el volumen\" >&2; exit 78; }; mkdir -p /vvv/log; grep -q \" /var/log \" /proc/mounts || mount --bind /vvv/log /var/log; grep -q \" /var/log \" /proc/mounts || echo \"montar-trabajo: AVISO — /var/log NO quedo en el volumen; los logs caen en la raiz de 5,8G y la llenan en silencio\" >&2; test -d /vvv/sergio || exit 0; mkdir -p /work/sergio; grep -q \" /work/sergio \" /proc/mounts || mount --bind /vvv/sergio /work/sergio; echo \"montar-trabajo: /vvv $(df -h /vvv | awk 'NR==2{print $4}') libres\""
]
}
}
-}
\ No newline at end of file
+}