respaldo: un parcial de SÓLO LECTURA envenena esa ruta para siempre — y el bucle lo llamaba «red»
La primera corrida completa desde la caja (puerta 7) se cayó 40 veces seguidas con el MISMO fichero: open ".../fonts/dejavu/.rsync-partial/DejaVuSans-Oblique.ttf" failed: No such file… (2) .. store: corte de red (rsync 23). Intento 39; reanudo en 60s. !! store: 40 intentos y sigue cayéndose. Dejo lo subido y paro. No era red. Una transferencia interrumpida el 11-sep dejó ese PARCIAL en el destino con modo -r--r--r-- (el del origen: el store es de sólo lectura por diseño), y ningún intento posterior puede reescribirlo. El fallo es ETERNO, y el bucle reintentaba cada 60 s contra esa pared — exactamente lo que la cabecera de la función de reintento dice que no hay que hacer. Dos arreglos: 1. `--chmod=Fu+w`: los ficheros del respaldo quedan escribibles por su dueño, así que un corte a mitad se RETOMA en vez de trabarse. El precio es no conservar el bit de sólo-lectura en la copia; es bajo: el contenido es lo que se respalda y los permisos los reconstruye el store. 2. Al rsync 23 se le dan TRES intentos, no cuarenta, y al tercero se NOMBRA la causa probable (un parcial de sólo lectura en el destino) en vez de llamarlo corte de red. El 23 es «some files were not transferred», que tanto puede ser un cable como una pared. Comprobado: borrado el parcial envenenado, ese fichero sube a la primera. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -153,7 +153,13 @@ else
|
||||
echo "⚠ este rsync no trae zstd (compress list sin él) ⇒ comprimo con zlib."
|
||||
echo " Es ~la mitad de rendimiento efectivo. Se arregla en recipes/rsync.toml (dep zstd)."
|
||||
fi
|
||||
RS="rsync -a --partial-dir=.rsync-partial --exclude /.dmerge $PROG $COMPRESION"
|
||||
# ⚠ `--chmod=Fu+w` NO es cosmético: sin él, un parcial interrumpido queda en el destino con el modo
|
||||
# del origen —el store es `-r--r--r--` por diseño— y **ningún intento posterior puede reescribirlo**.
|
||||
# Eso envenena esa ruta PARA SIEMPRE (medido el 2026-09-17: 40 reintentos contra el mismo .ttf). Con
|
||||
# los ficheros del respaldo escribibles por su dueño, un corte a mitad se retoma en vez de trabarse.
|
||||
# El precio es que la copia no conserva el bit de sólo-lectura; es un precio bajo: el contenido es lo
|
||||
# que se respalda, y los permisos del store los reconstruye el propio store.
|
||||
RS="rsync -a --chmod=Fu+w --partial-dir=.rsync-partial --exclude /.dmerge $PROG $COMPRESION"
|
||||
|
||||
# ── REINTENTOS: EL ENLACE SE CAE, Y ESO NO ES EXCEPCIONAL ───────────────────────────────────────
|
||||
# Primera corrida real (2026-08-07): tras subir el cerebro y 2,3 G de store, murió con
|
||||
@@ -172,7 +178,27 @@ reintentar() {
|
||||
"$@" && return 0
|
||||
rc=$?
|
||||
case "$rc" in
|
||||
10|12|23|30|35|255) ;; # red / pipe roto / timeout: insistir
|
||||
10|12|30|35|255) ;; # red / pipe roto / timeout: insistir
|
||||
# ⚠ 23 NO ES NECESARIAMENTE RED, y creerlo costó 40 reintentos inútiles (2026-09-17). El
|
||||
# respaldo desde la caja se cayó 40 veces seguidas con el MISMO fichero:
|
||||
#
|
||||
# open ".../fonts/dejavu/.rsync-partial/DejaVuSans-Oblique.ttf" failed: No such file… (2)
|
||||
#
|
||||
# La causa: una transferencia interrumpida el 11-sep dejó ese PARCIAL en el destino con modo
|
||||
# `-r--r--r--` (el del origen: el store es de sólo lectura por diseño). Ningún intento
|
||||
# posterior puede reescribirlo, así que el fallo es ETERNO — y el bucle lo llamaba «corte de
|
||||
# red» y volvía a intentar cada 60 s. Es exactamente la pared que la cabecera de esta función
|
||||
# dice que no hay que golpear 40 veces.
|
||||
#
|
||||
# ⇒ al 23 se le dan TRES intentos, no cuarenta, y al tercero se nombra la causa probable.
|
||||
23)
|
||||
if [ "$intento" -ge 3 ]; then
|
||||
echo "!! $etiqueta: rsync 23 tres veces seguidas. NO parece red: mirá si quedó un" >&2
|
||||
echo "!! parcial de sólo lectura en el destino (\`.rsync-partial/\` dentro del árbol)." >&2
|
||||
echo "!! Se borra a mano en el Storage Box y la corrida siguiente pasa." >&2
|
||||
return "$rc"
|
||||
fi
|
||||
;;
|
||||
# 24 = «ficheros de origen desaparecieron durante la transferencia». NO es un fallo: pasa
|
||||
# cuando `store-gc.sh` poda artefactos superados mientras el respaldo corre, que es una
|
||||
# combinación NORMAL en este proyecto (el respaldo dura ~19 h y la poda es la válvula del
|
||||
|
||||
Reference in New Issue
Block a user