fix(arje): la caja perdia el volumen de trabajo en cada arranque por el blkid equivocado
Sintoma, reportado asi: "no se por que todo se borra solo por reiniciar, que
verga de distro". No era la distro y no se borraba nada.
En esta caja /work/sergio es un bind a /vvv/sergio, y /vvv es el volumen con
LABEL=trabajo (255 G). Lo monta la card montar-trabajo, que es la segunda
entrada del genesis. Tras el primer reinicio en meses NO monto, y sin ese bind
/work/sergio cae al directorio de ABAJO -- otra particion, con una copia vieja
del 18-sep. Desde afuera se ve exactamente como si la maquina se hubiera comido
los archivos: faltaban los binarios puestos el 21-sep y hasta un wrapper habia
"vuelto" a su version vieja. Estaban todos intactos en el volumen, detras de un
montaje que no se hizo.
La causa es una linea. La card resolvia el disco con
d=$(blkid -L trabajo 2>/dev/null); test -n "$d" || ...
y en esta caja hay DOS blkid: /sbin/blkid (util-linux, 2,1 M) que contesta
/dev/sdb, y /usr/sbin/blkid (112 K) cuyo -L imprime una TABLA CON ENCABEZADO. El
PATH de la card es /usr/sbin:/usr/bin:/sbin:/bin, asi que gana el segundo, $d se
lleva la tabla entera, y `test -n` la da por buena porque no esta vacia. Lo que
llego a mount fue "device fs_type label mount point UUID" y una linea de
guiones. Medido con el PATH exacto de la card: lo viejo da por bueno la tabla,
lo nuevo resuelve a /dev/sdb.
El arreglo son las dos mitades:
· `findfs LABEL=trabajo`, que es LA herramienta para esto y devuelve el
devname a secas, con /sbin/blkid como respaldo por si falta.
· `test -b` en lugar de `test -n`. Esta es la que importa: un nombre de
dispositivo que no es un dispositivo de bloque no puede pasar la guarda. Con
`test -n` cualquier basura no vacia pasaba, y el error terminaba siendo un
mensaje de mount ilegible en vez de "aca no hay disco".
El mensaje de falla ahora dice QUE vino en $d, que es lo unico que hubiera
hecho evidente el defecto en vez de mandarlo a mirar el cable del volumen.
Certificado con su brazo de control: con una etiqueta inexistente se planta
limpio en vez de seguir. Instalado en los tres lugares donde vive la card -- el
repo, /etc/arje/cards.d, y el seed embebido en /ente/seed.card.json, que es el
que corre en el boot y el unico que arregla el proximo arranque. El seed se
valido antes con el parser del init (arje-zero --attest-check) y quedo
respaldado en seed.card.json.antes-de-findfs-20260925.
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 e7f76dc1..28c1336f 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); id -u $u >/dev/null 2>&1 || continue; mkdir -p /run/user/$(id -u $u); chown $u /run/user/$(id -u $u); chmod 700 /run/user/$(id -u $u); 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 }) libres\""
+ "mkdir -p /run/user; chmod 1777 /run/user; for h in /home/*; do u=$(basename $h); id -u $u >/dev/null 2>&1 || continue; mkdir -p /run/user/$(id -u $u); chown $u /run/user/$(id -u $u); chmod 700 /run/user/$(id -u $u); done; d=$(findfs LABEL=trabajo 2>/dev/null) || d=\"\"; [ -b \"$d\" ] || d=$(/sbin/blkid -L trabajo 2>/dev/null) || d=\"\"; test -b \"$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 }) libres\""
]
}
}
-}
\ No newline at end of file
+}