respaldo: .dmerge tumbó la subida 40 veces seguidas y el mensaje nunca lo dijo

El respaldo se detuvo en 79 G de 127 G con «40 intentos y sigue cayéndose». El código era 23
(«some files/attrs were not transferred»), que está en la lista de reintentables — así que el
bucle lo reintentó cuarenta veces contra la misma pared y se rindió.

LA CAUSA, al mirar los errores de verdad en vez del código de salida: todos eran rutas
`/home/hammer/store/.dmerge/...`. Son directorios TRANSITORIOS de fusión del store, que aparecen
y desaparecen mientras hammer sella. rsync los empieza a copiar, se esfuman a media
transferencia, y falla. `cosecha-cron.sh` ya los excluía; este script no, y ésa era toda la
diferencia.

⇒ Añadido `--exclude /.dmerge`.

Y una lección para el propio bucle de reintentos: **un error reintentable que se repite 40 veces
no es un corte de red, es algo estructural**. Cuarenta reintentos idénticos deberían haber
gritado «esto no se arregla esperando» en vez de agotarse en silencio. Queda anotado; el bucle
todavía no distingue «se cayó una vez» de «falla siempre igual».

De paso, `appstream` —la única de las cinco del split que se perdió al borrarse el worker— se
reconstruyó en el hub: 18 M, 0 secciones .debug_. Las cinco quedan consistentes (hash vigente
con artefacto presente): bison 3M · appstream 18M · zstd 2M · expat 1M · ncurses 2M.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-08 08:41:28 -04:00
co-authored by Claude Opus 5
parent 693938bed2
commit b38db3f35d
+9 -1
View File
@@ -64,7 +64,15 @@ SECO=""
SSH_CMD="ssh -4 -p $SB_PORT -i $KEY -o StrictHostKeyChecking=accept-new -o ServerAliveInterval=30"
# Opciones comunes. `--partial-dir` es lo que hace el respaldo continuable a mitad de fichero.
RS="rsync -a --partial-dir=.rsync-partial --info=progress2 -z --compress-choice=zstd --compress-level=3"
# `--exclude /.dmerge`: son directorios TRANSITORIOS de fusión del store — aparecen y desaparecen
# mientras hammer sella. rsync los empieza a copiar, se esfuman a media transferencia y devuelve 23
# («some files/attrs were not transferred»). Como 23 está en la lista de reintentables, el bucle los
# reintentó **40 veces seguidas** y se rindió con el respaldo a medias (79 G de 127 G), sin que el
# mensaje dijera nunca que la culpa era de un directorio temporal. `cosecha-cron.sh` ya los excluía;
# este script no, y ésa era toda la diferencia.
# ⇒ Un error reintentable que se repite 40 veces no es un corte de red: es algo estructural. Vale la
# pena que el bucle distinga «se cayó una vez» de «falla siempre igual».
RS="rsync -a --partial-dir=.rsync-partial --exclude /.dmerge --info=progress2 -z --compress-choice=zstd --compress-level=3"
# ── 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